Fastllm: A LLM inference library that runs DeepSeek-V4 with 10GB VRAM Fastllm, a C++ LLM inference library, now supports running DeepSeek-V4 and the full DeepSeek R1 671B model on a single GPU with just 10GB VRAM. The library is compatible with Nvidia, AMD, and domestic GPUs, and supports FP8 inference on any GPU. | 快速开始 %E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B | 部署DeepSeek /ztxz16/fastllm/blob/master/docs/deepseek.md | 部署Qwen3 /ztxz16/fastllm/blob/master/docs/qwen3.md | 版本日志 /ztxz16/fastllm/blob/master/docs/version.md | English Document /ztxz16/fastllm/blob/master/README EN.md 本项目参考了许多开源项目的代码和相关文章,具体请参考 参考代码和文章 %E5%8F%82%E8%80%83%E4%BB%A3%E7%A0%81%E5%92%8C%E6%96%87%E7%AB%A0 fastllm是c++实现自有算子替代Pytorch的高性能全功能大模型推理库,可以推理Qwen, Llama, Phi等稠密模型,以及DeepSeek, Qwen-moe等moe模型 - 具有优良的兼容性,支持M40, K80到5090全系列N卡,支持MI50,7900等A卡,支持天数,沐曦等国产卡,支持ThinkForce NPU推理 - 支持任意显卡的FP8推理 - 任意显卡只需要显存 10G就可以支持单卡推理满血DeepSeek R1 671B模型 - 双路9004/9005服务器 + 单显卡部署DeepSeek R1 671B - FP8原版模型,单并发速度可达20左右,部署INT4模型单并发速度可达30左右,最高并发速度可达60+ 部署交流QQ群:831641348 微信 - Fastllm目前支持DeepSeek-V4模型了 - Fastllm目前支持导出通用动态量化模型了!参考 动态量化说明 /ztxz16/fastllm/blob/master/docs/dtype config.md - Fastllm目前可以支持部分GGUF模型的读取了!需要注意,目前需要使用 --ori 参数指定源模型配置文件夹,请阅读 使用指南 %E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97 - 🚀 安装使用简单方便,一条命令就能成功安装,一条命令就能成功运行。 - 🚀 支持CPU + GPU混合推理MOE大参数模型(单显卡即可推理DEEPSEEK 671B)。 - 🚀 使用C++实现自有底层算子,不依赖PyTorch。 - 🚀 兼容性好,PIP安装支持可以支持到P100、MI50等老卡,源码安装支持更多设备。 - 🚀 支持多卡张量并行推理,支持3、5、7等奇数张卡。 - 🚀 支持GPU + CPU混合张量并行推理 - 🚀 支持CPU和显卡实现FP8运算,老设备也可以运行 - 🚀 支持多CPU加速,且只占用1份内存 - 🚀 支持ROCM,AMD GPU;支持天数,沐曦,燧原;支持华为昇腾。 - 🚀 支持动态Batch,流式输出;前后端分离设计,可跨平台移植,可在安卓上直接编译。 - 🚀 支持Python 自定义模型结构 /ztxz16/fastllm/blob/master/docs/custom.md pip 安装支持 Nvidia GPU 和 AMD GPU ,其余 GPU 请使用 源码安装 %E6%BA%90%E7%A0%81%E5%AE%89%E8%A3%85 pip 安装速度慢时,可使用镜像加速 pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple pip install ftllm -U 由于目前PyPI限制库大小,安装包中不含ROCM依赖,安装ftllm之前建议先手动安装ROCM 6.3.3 若已安装ROCM可跳过 wget wget https://repo.radeon.com/amdgpu-install/6.3.3/ubuntu/jammy/amdgpu-install 6.3.60303-1 all.deb apt install ./amdgpu-install 6.3.60303-1 all.deb -y amdgpu-install --usecase=hiplibsdk,rocm,dkms -y 然后用pip安装,命令如下: pip install ftllm-rocm -U 第一次安装前需要安装依赖库: pip install https://www.modelscope.cn/models/huangyuyang/fastllmdepend-windows/resolve/master/ftllmdepend-0.0.0.2-py3-none-win amd64.whl 然后用pip安装,命令如下: pip install ftllm -U - Hint Conda下安装有时候会出现环境错误,如果出现可以尝试在Conda外或使用venv等虚拟环境尝试 (若使用时报错,可参考 ftllm报错 /ztxz16/fastllm/blob/master/docs/faq.md ftllm%E5%8A%A0%E8%BD%BD%E6%8A%A5%E9%94%99 可以运行一个较小模型测试安装是否成功, 以Qwen/Qwen3-0.6B模型为例 ftllm run Qwen/Qwen3-0.6B ftllm webui Qwen/Qwen3-0.6B ftllm server Qwen/Qwen3-0.6B ftllm ftllm tui ftllm 不带参数时会进入终端部署向导,等价于 ftllm tui 。它会保存部署配置到本机用户配置目录,首页可通过键盘选择已保存命令进行新建、编辑、启动或删除。部署表单默认只显示基础配置,更多参数放在高级选项中;模型路径必须填写为已存在的本地目录,可按 Tab 补全目录;也可以从常用 ModelScope 模型列表中选择模型并下载到指定目录。 基本的启动命令格式如下: ftllm run Qwen/Qwen3-0.6B 启动本地对话 ftllm webui Qwen/Qwen3-0.6B 启动WebUI ftllm server Qwen/Qwen3-0.6B 启动API Server ftllm 通过终端命令列表选择/编辑/启动部署配置,模型路径必须是已存在目录 根据你需要开启的服务,选择相应的命令。以 server 命令为例,格式如下: ftllm server model 这里的 model 可以是: - Huggingface上的模型,例如 Qwen/Qwen3-0.6B 代表 千问3-0.6B模型 https://hf-mirror.com/Qwen/Qwen3-0.6B - 本地模型路径。例如 /mnt/Qwen3-0.6B ,高速下载模型可以参考 模型下载 %E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD 无论是在线模型还是本地模型,目前支持以下几种格式 (均以在线模型举例,可以在Huggingface上搜到对应模型): FP16 , BF16 格式的原始模型,例如 Qwen/Qwen3-0.6B FP8 格式的模型,例如 Qwen/Qwen3-0.6B-FP8 AWQ 格式的模型,例如 Qwen/Qwen3-14B-AWQ Fastllm 格式的模型,例如 fastllm/DeepSeek-V3-0324-INT4 。也可以下载原始模型后通过 模型导出 %E6%A8%A1%E5%9E%8B%E5%AF%BC%E5%87%BA 中的命令导出 GGUF 格式的模型,需要用 --ori 参数指定原始模型路径,例如 ftllm server DeepSeek-V3-0324-Q4 K M-00001-of-00009.gguf --ori DeepSeek-V3 这里的 DeepSeek-V3 是原始模型文件夹,无需下载权重文件,可以参考如下命令下载: ftllm download deepseek-ai/DeepSeek-V3 --exclude " safetensors " 如果您是第一次使用ftllm,建议直接使用基本的启动命令启动,所有的参数都会自动设置。如果您希望继续调参,请参照下面的参数设置说明 当启动的模型为浮点精度时( BF16 , FP16 , FP8 )时,可以通过以下参数来设置模型的推理精度: - --dtype : 描述 : 指定模型的数据类型。 可选值 : int4g int4 int8 fp8 float16 或其他支持的数据类型。 示例 : --dtype int4 - --moe dtype : 描述 : 指定模型MOE层的数据类型。 可选值 : int4g int4 int8 fp8 float16 或其他支持的数据类型。 示例 : --moe dtype int4 说明 : 如果指定的模型不是 moe 结构的模型,这个参数不会生效 命令示例: ftllm server Qwen/Qwen3-0.6B --dtype int8 上面的命令会读取原始模型(这个模型是BF16精度),并在线量化为INT8精度推理 ftllm server deepseek-ai/DeepSeek-V3-0324 --dtype fp8 --moe dtype int4 上面的命令会读取原始模型(这个模型是FP8精度),并使用FP8 + INT4的混合精度推理 --dtype config : 描述 : 指定动态量化配置文件。 说明 : 参考 动态量化说明 /ztxz16/fastllm/blob/master/docs/dtype config.md 若不设定这些参数,ftllm会使用模型中设定的精度来进行推理 若使用的模型已经是量化好的模型(例如AWQ模型,Fastllm导出的量化模型等),建议不指定这些参数 可以通过以下参数来设定执行推理的设备 - --device : 描述 : 指定模型运行的计算设备。 示例 : --device cpu , --device cuda 常用值说明 : cpu 使用 cpu 推理 cuda 使用 gpu 推理 numa 使用多路 numa 节点加速推理,在多CPU的机器才会有提升。使用numa加速时,强烈建议关闭系统numa平衡。(ubuntu中可使用命令 sudo sysctl -w kernel.numa balancing=0 multicuda 使用多设备张量并行推理 使用多显卡 : --device multicuda:0,1 使用多显卡+CPU : --device multicuda:0,cpu 按比例使用多显卡+CPU : --device multicuda:0:4,1:5,cpu:1 cuda:0 计算4/10, cuda:1 计算5/10, cpu 计算1/10 串行计算 : 一些场景下可以指定不同的device串行执行。例如 --device "{'cuda:0':3,'cuda:1':2}" : 这样 3/5 的层会运行在 cuda:0 上, 2/5 的层会运行在 cuda:1 上 --device "{'multicuda:0,1':3,'cuda:1':2}" : 这样 3/5 的层会使用 cuda:0 , cuda:1 张量并行, 2/5 的层仅仅运行在 cuda:1 上 简写 : --device cudapp=N 表示N卡均匀串行,例如 --device cudapp=4 等价于 --device "{'cuda:0':1,'cuda:1':1,'cuda:2':1,'cuda:3':1}" 简写 : --device cudapp=1:2:3 表示三卡按1:2:3比例串行,等价于 --device "{'cuda:0':1,'cuda:1':2,'cuda:2':3}" - --moe device : 描述 : 指定 MOE(Mixture of Experts)层的计算设备。 示例 : --moe device cpu , --moe device numa 常用值说明 : cpu 使用 cpu 推理 numa 使用多路 numa 节点加速推理,在多CPU的机器才会有提升 cuda 使用 gpu 推理 (MOE层需要大量显存,一般不建议指定为 cuda ) 说明 : 一般和device指定为不同的设备实现混合推理,例如 --device cuda --moe device cpu 来实现MOE模型的单卡+CPU混合推理。 --device cuda --moe device numa 来实现MOE模型的单卡+多NUMA节点加速推理 如果指定的模型不是 moe 结构的模型,这个参数不会生效 - --moe device layers : 描述 : 指定最后多少层 MOE 使用 --moe device ,前面的 MOE 层继续使用主设备或 --tp 指定的 CUDA 张量并行设备。 示例 : --tp 0,1 --moe device numa --moe device layers 8 说明 : 默认 -1 表示所有 MOE 层都使用 --moe device ,设置为 0 表示不单独把后段 MOE 放到 --moe device 。 若不设定这些参数,会使用默认配置来推理,默认配置如下: | 模型类型 | device | moe device | |---|---|---| | 稠密模型 | cuda | 不生效 | | MOE模型 | cuda | cpu | 如果只设置了device没设置moe device,则moe device会跟随device 对于发烧友而言,如果想更进一步榨干硬件,可以参考 混合推理指南 /ztxz16/fastllm/blob/master/docs/mixforward.md multicuda专用worker线程的调优环境变量见 混合推理指南:multicuda调优环境变量 /ztxz16/fastllm/blob/master/docs/mixforward.md multicuda%E8%B0%83%E4%BC%98%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F 可以通过下列参数设置运行参数。 需要注意的是,速度和参数设置并不一定正相关,如果对性能要求高,可以多方向尝试一下 -t 或 --threads : 描述 : 设置使用的CPU线程数。- 当 device 为 cpu 时,这个参数决定了推理使用的线程数 - 当 device 为 numa 时,推理线程数主要由环境变量 FASTLLM NUMA THREADS 决定, threads 参数请设得小一点(推荐设为1) - 当 示例 : -t 27 例如我们在多CPU设备上用GPU + 多CPU混合部署一个 MOE 模型 fastllm/DeepSeek-V3-0324-INT4 ,可以尝试这些命令: export FASTLLM NUMA THREADS=27 && ftllm server fastllm/DeepSeek-V3-0324-INT4 --device cuda --moe device numa -t 1 使用多numa推理,每个numa节点使用27个线程 export FASTLLM NUMA THREADS=16 && ftllm server fastllm/DeepSeek-V3-0324-INT4 --device cuda --moe device numa -t 1 使用多numa推理,每个numa节点使用16个线程 numactl -C 0-31 -m 0 ftllm server fastllm/DeepSeek-V3-0324-INT4 --device cuda --moe device cpu -t 27 绑定单numa节点,使用CPU推理,使用27线程 不同硬件上,不同参数发挥出的性能有很大不同。一般而言,CPU上使用的线程数不建议超过物理核数 - --moe experts : 描述 : 指定 MOE(Mixture of Experts)层使用的专家数。不设定则根据模型配置设定。减少专家数可以提高推理速度,但可能降低推理准确度 示例 : --moe experts 6 - --cuda se : 描述 : 指定 MOE中的共享专家 是否在cuda上执行,默认为true 示例 : --cuda se false - --cuda slab : 描述 : 设置 CUDA 模型权重 slab 分配块大小,单位 MB。默认 0 表示关闭。将大量 MOE 专家权重放在 CUDA 上时,可用它减少小权重分别 cudaMalloc 带来的显存页对齐和碎片开销。 示例 : --cuda slab 1024 - --port : 描述 : 指定服务运行的端口号。 示例 : --port 8080 - --help : 描述 : 查看模块参数详细信息。 示例 : ftllm server --help - --version 或 -v : 描述 : 查看ftllm版本号。 示例 : ftllm -v - --hide input : 描述 : server模式隐藏日志中的请求信息。 示例 : ftllm server --hide input - --api key : 描述 : server模式设定api key。 示例 : ftllm server --api key xxxxxxxx - --max token : 描述 : webui模式指定最大输出。 示例 : ftllm webui --max token - --think : 描述 : 强制思考。 示例 : ftllm webui --think - --cache dir : 描述 : 指定在线Huggingface模型的缓存目录 示例 : ftllm --cache dir /mnt - --chat template : 描述 : 指定chat template文件 示例 : ftllm --chat template deepseekv31.jinja 目前以下模型支持工具调用: - GLM4.5, GLM4.5-AIR - Qwen3-Instruct系列 - Qwen3-Coder系列 - Kimi-K2 - DeepSeekV3.1, 需要指定chat template, 文件位于本项目 example/chat template/deepseekv31.jinja 可以使用如下命令将模型下载到本地(使用高速镜像,无需科学上网) ftllm download deepseek-ai/DeepSeek-R1 如果使用量化加载模型(如 --dtype int4 ),那么每次读取模型时会在线量化,读取速度较慢。 ftllm export 是一个用于导出和转换模型权重的工具。它支持将模型权重转换为不同的数据类型。以下是如何使用 ftllm export 的详细说明。 ftllm export <模型路径 -o <输出路径 --dtype <数据类型 -t <线程数 ftllm export /mnt/DeepSeek-V3 -o /mnt/DeepSeek-V3-INT4 --dtype int4 -t 16 可以通过指定 --moe dtype 来实现混合精度,例如 ftllm export /mnt/DeepSeek-V3 -o /mnt/DeepSeek-V3-FP16INT4 --dtype float16 --moe dtype int4 -t 16 导出后的模型使用方法和原始模型类似,使用导出模型时 --dtype 参数将被忽略 例如 ftllm run /mnt/DeepSeek-V3-INT4/ 如果需要运行更多早期的模型,请参考 支持模型列表 /ztxz16/fastllm/blob/master/docs/models.md 若pip安装失败或有其它特殊需求,可以用源码编译安装 源码安装后如果需要卸载,方法和PIP安装一样 pip uninstall ftllm 建议使用cmake编译,需要提前安装gcc,g++ 建议9.4以上 , make, cmake 建议3.23以上 需要安装numa库,在Ubuntu下的安装命令一般使用: apt-get install libnuma-dev 如果编译出错,建议使用AI工具帮忙安装环境 GPU编译需要提前安装好CUDA编译环境,建议使用尽可能新的CUDA版本,并安装NCCL包 使用如下命令编译 bash install.sh -DUSE CUDA=ON -D CMAKE CUDA COMPILER=$ which nvcc 编译GPU版本 bash install.sh -DUSE CUDA=ON -DCUDA ARCH=89 -D CMAKE CUDA COMPILER=$ which nvcc 可以指定CUDA架构,如4090使用89架构 bash install.sh 仅编译CPU版本 其他不同平台的编译可参考文档 编译中遇到问题可参考 FAQ文档 /ztxz16/fastllm/blob/master/docs/faq.md 1Cat-vLLM 中的 awq sm70 gemm 适配思路 https://github.com/1CatAI/1Cat-vLLM/blob/main/csrc/quantization/awq/awq sm70 gemm.cu 感谢大佬对开源社区的贡献!如发现未标明的引用代码可在issue中提出