摘要
2025 年 2 月 10 日: 在单 GPU (24GB 显存) / 多 GPU 和 382GB 内存上支持 DeepseekR1 和 V3,速度提升高达 3~28 倍。
大家好,KTransformers 团队 (前身为 CPU/GPU 混合推理开源项目团队,以 DeepSeek-V2 而闻名) 向大家问好。
KTransformers 团队收到了大家对 DeepSeek-R1/V3 支持的请求,并且非常激动地宣布终于交付了!
对于此次等待深感抱歉,但 KTransformers 团队一直在酝酿一些真正令人惊叹的东西!
今天,KTransformers 团队自豪地宣布,不仅支持 DeepSeek-R1/V3,正如以下视频所示:
https://github.com/user-attachments/assets/ebd70bfa-b2c1-4abb-ae3b-296ed38aa285
- [最新!!!] 本地 671B DeepSeek-Coder-V3/R1: 仅使用 14GB 显存和 382GB 内存运行其 Q4_K_M 版本。
- Prefill 速度 (tokens/s):
- KTransfermor: 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):
- KTransfermor: 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):
KTransformers 团队还给出了即将到来的优化预览,包括 Intel AMX 加速内核和选择性专家激活方法,这将显著提高性能。借助 V0.3-preview,预填充 (prefill) 速度高达 286 tokens/s,比本地推理的 llama.cpp 快 28 倍。
二进制发行版现已发布,源代码将尽快发布!在此处查看 wheel 包。
准备条件
KTransformers 团队在以下配置上运行了最佳性能测试 (V0.2):
CPU: Intel (R) Xeon (R) Gold 6454S 1T 内存 (2 个 NUMA 节点)
GPU: 4090D 24G 显存
内存: 标准 DDR5-4800 服务器内存 (1 TB)
基准测试结果
V0.2
设置
- 模型: DeepseekV3-q4km (int4)
- CPU: cpu_model_name: Intel (R) Xeon (R) Gold 6454S, 每路 32 核,2 路,2 个 numa 节点
- GPU: 4090D 24G 显存
- KTransformers 团队在充分预热后进行测试
内存消耗:
- 单路: 382G 内存,至少 14GB 显存
- 双路: 1T 内存,至少 14GB 显存
基准测试结果
“6 experts” 情况是 V0.3 预览版的一部分
| Prompt
(500 tokens) | 双路 Ktrans (6 experts) | 双路 Ktrans (8 experts) | 单路 Ktrans (6 experts) | 单路 Ktrans (8 experts) | llama.cpp (8 experts) |
---|---|---|---|---|---|
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.03 倍,预填充速度最高提升 9.44 倍。 看起来 KTransformers 在解码加速方面提升不如预填充明显,解码的优化空间仍然很大。
V0.3-Preview
设置
- 模型: DeepseekV3-BF16 (在线量化为 int8 用于 CPU,int4 用于 GPU)
- CPU: cpu_model_name: Intel (R) Xeon (R) Gold 6454S, 每路 32 核,2 路,2 个 numa 节点
- GPU: (1~4)x 4090D 24GVRAM (更长的 prompt 需要更多显存)
内存消耗:
- 644GB 内存,至少 14GB 显存
基准测试结果
Prompt length | 1K | 2K | 4K | 8K |
---|---|---|---|---|
KTrans (8 experts) Prefill token/s | 185.96 | 255.26 | 252.58 | 195.62 |
KTrans (6 experts) Prefill token/s | 203.70 | 286.55 | 271.08 | 207.20 |
KTrans V0.3 的预填充速度比 KTrans V0.2 快 3.45 倍,比 llama.cpp 快 27.79 倍。 这个预填充速度的提升确实非常惊人,看起来 KTransformers 在预填充优化方面下了很大功夫。
解码速度与 KTrans V0.2 (6 experts 版本) 相同,因此省略 看来 V0.3 版本主要关注在预填充速度上的提升。
主要的加速来自
- Intel AMX 指令集和 KTransformers 团队专门设计的缓存友好型内存布局
- 基于领域外数据的离线 profile 结果选择较少专家的专家选择策略
根据 KTransformers 团队对 DeepSeekV2、DeepSeekV3 和 DeepSeekR1 的研究,
当稍微减少推理中激活的专家数量时,
输出质量不会改变。但是解码和预填充的速度
会加快,这令人鼓舞。因此 KTransformers 团队的演示利用了这一发现 看来“专家选择策略”是提速的关键,但如何保证输出质量不下降,还需要更多测试和验证。
如何运行
V0.2 演示
单路版本 (32 核)
KTransformers 团队的 local_chat
测试命令是:
git clone https://github.com/kvcache-ai/ktransformers.git
cd ktransformers
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 --cache_lens 1536
<当看到 chat 时,按 Enter 键加载文本 prompt_file>
<your model path> 可以是本地路径,也可以是从在线 hugging face 设置的路径,例如 deepseek-ai/DeepSeek-V3。如果在线遇到连接问题,请尝试使用镜像 (hf-mirror.com)
<your gguf path> 也可以是在线路径,但由于它很大,KTransformers 团队建议您下载它并将模型量化为您想要的格式
命令 numactl -N 1 -m 1
旨在避免 NUMA 节点之间的数据传输
双路版本 (64 核)
在安装之前 (使用 install.sh 或 make dev_install
),通过 export USE_NUMA=1
设置环境变量 USE_NUMA=1
(如果已安装,请在设置此环境变量的情况下重新安装)
KTransformers 团队的 local_chat
测试命令是:
git clone https://github.com/kvcache-ai/ktransformers.git
cd ktransformers
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 --cache_lens 1536
<当看到 chat 时,按 Enter 键加载文本 prompt_file>
参数的含义相同。但由于 KTransformers 团队使用双路,因此将 cpu_infer
设置为 65
V0.3 演示
双路版本 (64 核)
KTransformers 团队的 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 --cache_lens 1536
<当看到 chat 时,按 Enter 键加载文本 prompt_file>
参数的含义与 V0.2 相同。但由于 KTransformers 团队使用双路,因此将 cpu_infer
设置为 65
一些解释
- KTransformers 团队还希望进一步利用 Xeon Gold CPU 上的两个 NUMA 节点。
为了避免节点之间数据传输的成本,KTransformers 团队在
两个节点上“复制”关键矩阵,这会消耗更多内存,但会加速预填充和解码过程。
但是这种方法占用大量内存,并且在加载权重时速度很慢,因此在加载时请耐心等待
并监控内存使用情况。KTransformers 团队将优化这种巨大的内存开销。敬请关注~ 这种“复制”矩阵的方法虽然能提速,但内存占用确实是个问题,期待 KTransformers 团队后续的优化方案。 - 命令参数
--cpu_infer 65
指定要使用的核心数 (超过物理核心数也可以,
但并非越多越好。将其调整到略低于实际核心数即可) - 为什么采用 CPU/GPU 混合推理?
DeepSeek 的 MLA 算子是计算密集型的。虽然完全在 CPU 上运行是可能的,但将繁重的计算卸载到 GPU 可以大幅提升性能。CPU 负责专家计算,GPU 负责 MLA/KVCache,这种混合推理的策略看起来很聪明,充分利用了 CPU 和 GPU 的优势。 - 速度提升来自哪里?
- 专家卸载 (Expert Offload): 与传统的基于层或 KVCache 的卸载 (如 llama.cpp 中所见) 不同,KTransformers 团队将专家计算卸载到 CPU,将 MLA/KVCache 卸载到 GPU,与 DeepSeek 的架构完美契合,以实现最佳效率。
- Intel AMX 优化 – KTransformers 团队基于 AMX 加速的内核经过精心调优,运行速度比现有的 llama.cpp 实现快数倍。KTransformers 团队计划在清理后开源此内核,并正在考虑向上游 llama.cpp 贡献代码。AMX 指令集的加持,看来是 KTransformers 提速的关键因素之一。
- 为什么选择 Intel CPU?
Intel 是目前唯一支持类似 AMX 指令的 CPU 供应商,与仅支持 AVX 的替代方案相比,AMX 指令可提供明显更好的性能。看来目前想体验 KTransformers 的最佳性能,Intel CPU 是不二之选。