2025年2月10日: 支持在单个(24GB 显存)/多个 GPU 和 382GB 内存上运行 DeepseekR1 和 V3,速度提升高达 3~28 倍。
嗨,我们是 KTransformers 团队(以前因本地 CPU/GPU 混合推理开源项目 DeepSeek-V2 而闻名)。
我们听到了您对 DeepSeek-R1/V3 支持的请求——我们很高兴终于可以交付了!很抱歉让您久等了,但我们一直在酝酿一些真正令人惊叹的东西!
今天,我们自豪地宣布,我们不仅支持 DeepSeek-R1/V3,如下视频所示:
v3.up.mov
- [NEW!!!] 本地 671B DeepSeek-Coder-V3/R1: 仅使用 14GB 显存和 382GB 内存运行其 Q4_K_M 版本。
- 预填充(Prefill)速度 (tokens/s):
- KTransformers: 54.21 (32 核心) → 74.362 (双插槽,2×32 核心) → 255.26 (优化的 AMX 基 MoE 内核,仅 V0.3) → 286.55 (选择性使用 6 个专家,仅 V0.3)
- 与 llama.cpp 在 2×32 核心下 10.31 tokens/s 相比,速度提升高达 27.79 倍
- 解码(Decode)速度 (tokens/s):
- KTransformers: 8.73 (32 核心) → 11.26 (双插槽, 2×32 核心) → 13.69 (选择性使用 6 个专家,仅 V0.3)
- 与 llama.cpp 在 2×32 核心下 4.51 tokens/s 相比,速度提升高达 3.03 倍
- 预填充(Prefill)速度 (tokens/s):
我们还提供了即将推出的优化预览,包括英特尔 AMX 加速内核和选择性专家激活方法,这将显著提升性能。通过 V0.3 预览版,我们在预填充方面实现了高达 286 tokens/s 的速度,比本地推理的 llama.cpp 快 28 倍。二进制发行版现已可用,源代码即将推出!请查看 wheel 包 此处 。
我们在以下配置下进行了最佳性能测试(V0.2):
CPU: Intel (R) Xeon (R) Gold 6454S 1T 内存 (2 NUMA 节点)
GPU: 4090D 24G 显存
内存: 标准 DDR5-4800 服务器内存 (1 TB)
- Model: DeepseekV3-q4km (int4)
- CPU: cpu_model_name: Intel (R) Xeon (R) Gold 6454S,每个插槽 32 核心,2 个插槽,2 个 NUMA 节点
- GPU: 4090D 24G 显存
- 我们在充分预热后进行测试
- 单插槽: 382G 内存,至少 14GB 显存
- 双插槽: 1T 内存,至少 14GB 显存
“6 个专家” 情况是 V0.3 预览版中内容
Prompt (500 tokens) |
双插槽 Ktrans (6 个专家) | 双插槽 Ktrans (8 个专家) | Single socket Ktrans (6 个专家) | Single socket Ktrans (8 个专家) | llama.cpp (8 个专家) |
---|---|---|---|---|---|
预填充(Prefill) token/s | 97.32 | 82.94 | 65.14 | 54.21 | 10.31 |
解码(Decode) token/s | 13.69 | 12.208 | 10.303 | 8.73 | 4.51 |
最高加速比在解码方面达到 3.03x 倍,在预填充方面达到 9.44x 倍。
- Model: DeepseekV3-BF16 (在线量化为 CPU 的 int8 和 GPU 的 int4)
- CPU: cpu_model_name: Intel (R) Xeon (R) Gold 6454S,每个插槽 32 核心,2 个插槽,2 个 NUMA 节点
- GPU: (1~4)x 4090D 24G 显存 (更长的 prompt 需要更多显存)
- 644GB 内存,至少 14GB 显存
Prompt length | 1K | 2K | 4K | 8K |
---|---|---|---|---|
KTrans (8 个专家) Prefill token/s | 185.96 | 255.26 | 252.58 | 195.62 |
KTrans (6 个专家) Prefill token/s | 203.70 | 286.55 | 271.08 | 207.20 |
KTrans V0.3 的预填充速度比 KTrans V0.2 快 3.45x 倍,比 llama.cpp 快 27.79x 倍。 解码速度与 KTrans V0.2(6 个专家版本)相同,因此省略。
主要加速来自于
- 英特尔 AMX 指令集和我们专门设计的缓存友好内存布局
- 专家选择策略,根据离线配置文件结果选择更少的专家
从我们对 DeepSeekV2、DeepSeekV3 和 DeepSeekR1 的研究中,当我们略微减少推理中的激活专家数量时,输出质量没有变化。但解码和预填充的速度加快了,这令人鼓舞。因此,我们的展示利用了这一发现。
我们的 local_chat 测试命令是:
git clone https://github.com/kvcache-ai/ktransformers.git
cd ktransformers
git submodule init
git submodule update
numactl -N 1 -m 1 python ./ktransformers/local_chat.py --model_path <your model path> --gguf_path <your gguf path> --prompt_file <your prompt txt file> --cpu_infer 33 --max_new_tokens 1000
<当您看到聊天时,按回车键加载文本提示文件>
<your model path>
可以是本地路径,也可以是在线路径,例如 deepseek-ai/DeepSeek-V3。如果在线连接出现问题,可以尝试使用镜像(hf-mirror.com)
<your gguf path>
也可以是在线路径,但由于其体积较大,我们建议您下载并量化模型(注意这是目录路径)
--max_new_tokens 1000
是最大输出 token 长度。如果发现答案被截断,可以增加此数字以获得更长的答案(但要注意内存不足问题,增加此数字会降低生成速度).
命令 numactl -N 1 -m 1 的目的是避免 NUMA 节点之间的数据传输
注意!如果测试 R1 可能会跳过思考。因此,可以添加参数:--force_think true
,这在 常见问题解答 部分中解释。
在安装之前(使用 install.sh 或 make dev_install
),请确保设置环境变量 USE_NUMA=1
,方法是 export USE_NUMA=1
(如果已经安装,请重新安装并设置此环境变量)
我们的 local_chat 测试命令是:
git clone https://github.com/kvcache-ai/ktransformers.git
cd ktransformers
git submodule init
git submodule update
export USE_NUMA=1
make dev_install # or sh ./install.sh
python ./ktransformers/local_chat.py --model_path <your model path> --gguf_path <your gguf path> --prompt_file <your prompt txt file> --cpu_infer 65 --max_new_tokens 1000
<当您看到聊天时,按回车键加载文本提示文件>
参数的含义相同。但因为我们使用双插槽,所以将 cpu_infer 设置为 65。
我们的 local_chat 测试命令是:
wget https://github.com/kvcache-ai/ktransformers/releases/download/v0.1.4/ktransformers-0.3.0rc0+cu126torch26fancy-cp311-cp311-linux_x86_64.whl
pip install ./ktransformers-0.3.0rc0+cu126torch26fancy-cp311-cp311-linux_x86_64.whl
python -m ktransformers.local_chat --model_path <your model path> --gguf_path <your gguf path> --prompt_file <your prompt txt file> --cpu_infer 65 --max_new_tokens 1000
<当您看到聊天时,按回车键加载文本提示文件>
参数的含义与 V0.2 相同。但因为我们使用双插槽,所以将 cpu_infer 设置为 65。
-
我们还想进一步利用 Xeon Gold CPU 上的两个 NUMA 节点。为了避免节点之间的数据传输成本,我们在两个节点上 "copy" 了关键矩阵,这会增加内存占用,但会加速预填充和解码过程。但这种方法占用大量内存,加载权重时速度较慢,因此加载时请耐心等待并监控内存使用情况。我们计划优化这一巨大的内存开销。敬请期待。
-
命令参数
--cpu_infer 65
指定使用多少核心(超过物理核心数量是可以的,但并不是越多越好。根据实际核心数量适当降低此值)。 -
为什么使用 CPU/GPU 混合推理? DeepSeek 的 MLA 操作符计算密集。虽然全部在 CPU 上运行是可行的,但将繁重的计算任务卸载到 GPU 上能带来巨大的性能提升。
-
加速来自哪里?
- 专家卸载:与传统的基于层或 KVCache 卸载(如 llama.cpp 中的)不同,我们将专家计算卸载到 CPU,将 MLA/KVCache 卸载到 GPU,与 DeepSeek 的架构完美对齐,实现最佳效率。
- 英特尔 AMX 优化 – 我们的 AMX 加速内核经过精心调优,运行速度是现有 llama.cpp 实现的数倍。我们计划在清理后开源此内核,并考虑向 llama.cpp 上游贡献代码。
-
为什么选择英特尔 CPU? 英特尔目前是唯一支持 AMX 类似指令的 CPU 供应商,与仅支持 AVX 的替代方案相比,性能显著更好。
注意!如果测试 R1 可能会跳过思考。因此,可以添加参数:--force_think true
。详细信息在 常见问题解答 部分中。
- 修复服务器集成功能以实现网络API访问支持
- 修复本地聊天功能仅支持单行提示输入的问题(目前输入换行符(\n)即开始生成提示)