KTransformers 混合推理实战:在 24GB 显存台式机上运行 671B 的 DeepSeek-R1/V3

发布时间:2026/9/13 16:43:27
KTransformers 混合推理实战:在 24GB 显存台式机上运行 671B 的 DeepSeek-R1/V3 KTransformers 混合推理实战在 24GB 显存台式机上运行 671B 的 DeepSeek-R1/V3【免费下载链接】ktransformersA Flexible Framework for Experiencing Heterogeneous LLM Inference/Fine-tune Optimizations项目地址: https://gitcode.com/GitHub_Trending/ktr/ktransformers本篇基于仓库中的 DeepSeek-R1/V3 中文教程完整还原 KTransformers 如何在单张 24GB 显存4090D 382GB~1TB 内存的台式机上通过 CPU/GPU 异构卸载运行 671B 参数的 DeepSeek-R1/V3 量化模型。读完你将掌握local_chat.py单并发与server/main.py多并发两类运行方式、balance_serve后端与注入规则optimize_rules的配置方法以及 AMX 内核与选择性专家激活两大加速手段的落地细节。一、方案前提为什么 24GB 显存能跑 671B 模型DeepSeek-V3/R1 有 671B 参数、256 个路由专家单卡显然放不下。KTransformers 的核心思路是按 DeepSeek 的 MoE 架构做职责切分把计算密集、但参数庞大的专家experts矩阵乘法卸载到 CPU 内存把MLA 注意力与 KVCache 卸载到 GPU。文档在一些解释一节把这一点归纳为与传统的基于层或 KVCache 卸载如 llama.cpp 中的不同我们将专家计算卸载到 CPU将 MLA/KVCache 卸载到 GPU与 DeepSeek 的架构完美对齐实现最佳效率。这套切分之所以成立是因为 DeepSeek 的 MLA 算子本身是计算密集型——虽然全部在 CPU 上运行是可行的但将繁重的计算任务卸载到 GPU 上能带来巨大的性能提升。而 CPU 侧选择 Intel 平台文档给出的理由是英特尔目前是唯一支持 AMX 类似指令的 CPU 供应商与仅支持 AVX 的替代方案相比性能显著更好。先决条件硬件基准文档声明的最佳性能测试配置为CPUIntel(R) Xeon(R) Gold 6454S1T 内存2 个 NUMA 节点每插槽 32 核心共 2 插槽 / 2 NUMA 节点GPU4090D 24GB 显存内存标准 DDR5-4800 服务器内存1TB说明不同量化与版本对内存/显存下限不同见下文基准章节。单插槽 32 核心 382GB 内存是 V0.2 的最低门槛V0.3-PreviewBF16 在线量化则上升到 644GB 内存。二、基准测试结果以下数据与命令均来自原文档用于横向对比 KTransformers 与 llama.cpp 在同一台双插槽 64 核心机器上的表现。V0.2Q4_K_M 量化382GB 内存设置ModelDeepseekV3-q4kmint4CPUXeon Gold 6454S每插槽 32 核心2 插槽2 NUMA 节点GPU4090D 24GB 显存测试在充分预热后进行内存占用单插槽382GB 内存至少 14GB 显存双插槽1T 内存至少 14GB 显存基准测试结果6 个专家情形属于 V0.3 预览版内容Prompt500 tokens双插槽 Ktrans6 个专家双插槽 Ktrans8 个专家单插槽 Ktrans6 个专家单插槽 Ktrans8 个专家llama.cpp8 个专家预填充Prefilltoken/s97.3282.9465.1454.2110.31解码Decodetoken/s13.6912.20810.3038.734.51最高加速比解码 3.03 倍预填充 9.44 倍。V0.3-PreviewBF16 在线量化AMX 选择性专家设置ModelDeepseekV3-BF16在线量化为 CPU 的 int8 和 GPU 的 int4CPUXeon Gold 6454S每插槽 32 核心2 插槽2 NUMA 节点GPU(1~4)× 4090D 24GB 显存更长的 prompt 需要更多显存内存占用644GB 内存至少 14GB 显存。基准测试结果Prompt 长度1K2K4K8KKTrans8 个专家Prefill token/s185.96255.26252.58195.62KTrans6 个专家Prefill token/s203.70286.55271.08207.20KTrans V0.3 的预填充比 V0.2 快 3.45 倍比 llama.cpp 快 27.79 倍解码速度与 V0.26 个专家版相同故省略。文档将主要加速来源归结为两点英特尔 AMX 指令集 专门设计的缓存友好内存布局专家选择策略根据离线配置文件结果选择更少的专家。对减少激活专家数量而质量不变的判断文档原文是从我们对 DeepSeekV2、DeepSeekV3 和 DeepSeekR1 的研究中当我们略微减少推理中的激活专家数量时输出质量没有变化。但解码和预填充的速度加快了这令人鼓舞。三、运行方式仓库现状说明本文教程对应的是 v0.2 / v0.3 时期的仓库布局。当前仓库已重构——旧版ktransformersPython 包整体移入archive/ktransformers/高性能 CPU 内核独立为kt-kernel/顶层 install.sh 也改写为 sglang kt-kernel 一键安装脚本。因此下文命令中的路径以当前仓库实际位置为准local_chat.py、server/main.py、注入规则与旧版安装脚本都位于archive/下AMX 专家内核位于 kt-kernel/operators/amx/。1. 多并发展示balance_serve 后端多并发需要额外编译调度器 C 代码。依赖与启动流程如下依赖安装与git submodule update --init --recursive为文档原始步骤sudo apt install libtbb-dev libssl-dev libcurl4-openssl-dev libaio1 libaio-dev libfmt-dev sudo apt-get install libgflags-dev zlib1g-dev patchelf git submodule update --init --recursive # 如果使用双 numa 版本 USE_BALANCE_SERVE1 USE_NUMA1 bash ./install.sh # 如果使用单 numa 版本 USE_BALANCE_SERVE1 bash ./install.sh # 启动命令 python ktransformers/server/main.py \ --model_path your model path \ --gguf_path your gguf path \ --cpu_infer 62 \ --optimize_config_path inject rule path \ --port 10002 \ --chunk_size 256 \ --max_new_tokens 1024 \ --max_batch_size 4 \ --cache_lens 32768 \ --backend_type balance_serve对应实现入口为 server/main.py。路径参数说明your model path本地路径或在线模型名如deepseek-ai/DeepSeek-V3。在线连接有问题时可尝试镜像。your gguf path也支持在线路径但体量大建议下载并量化后使用目录路径。inject rule path注入规则 yaml 文件地址。仓库在 optimize_rules 目录 提供了 DeepSeek-V3-Chat-serve.yaml 与 DeepSeek-V3-Chat-fp8-linear-ggml-experts-serve.yaml分别对应 Q4_K_M 与 hybrid 两类权重。关键命令行参数对应 local_chat.py 的入参签名可交叉印证参数含义--max_new_tokens 1024最大输出 token 长度。若答案被截断可增大但会增加显存压力并降低生成速度--chunk_size 256引擎单次运行最大 token 数--cache_lens 32768调度器申请的 KVCache 总长度所有请求共享 32768 token 对应的 KVCache请求完成后释放占用空间--backend_type balance_servev0.2.4 新增的多并发后端引擎原单并发引擎为ktransformers--max_batch_size 4引擎单次运行最多处理的请求数prefill decode仅用于balance_serve--cpu_infer 62使用的 CPU 核心数详见下文一些解释多并发场景额外有numactl -N 1 -m 1的目的避免 NUMA 节点之间的数据传输。测试 R1 时若跳过思考可加--force_think见文末 FAQ。2. V0.2 展示单插槽版本32 核心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 # 看到聊天提示后按回车键加载文本提示文件双插槽版本64 核心双插槽需在安装前设置环境变量USE_NUMA1export USE_NUMA1若已安装需重新安装并带上该环境变量git submodule init git submodule update export USE_NUMA1 make dev_install # 或 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。3. V0.3 展示双插槽 64 核心wheel 包V0.3 预览版当时提供二进制 wheel 分发从本仓库对应 Release 页面下载ktransformers-0.3.0rc0cu126torch26fancy-cp311-cp311-linux_x86_64.whl后安装即可# 从 Release 下载对应 wheel 后 pip install ./ktransformers-0.3.0rc0cu126torch26fancy-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。四、参数与实现的源码印证local_chat.py的入参签名能直接印证上述命令参数真实存在。在 archive/ktransformers/local_chat.py 中可看到max_new_tokens: int 1000, cpu_infer: int Config().cpu_infer, prompt_file: str | None None, force_think: bool False, ... Config().cpu_infer cpu_infercpu_infer通过Config().cpu_infer注入全局配置文档强调超过物理核心数量是可以的但并不是越多越好应根据实际核心数量适当降低。prompt_file在交互中被读取后作为输入content open(prompt_file, r).read()并拼入max_new_tokens一并下发到model.generate。force_think默认False用于控制 R1 是否强制进入思考模式。五、混合推理架构从注入规则看专家到 CPU、MLA 到 GPU文档描述的卸载策略在注入规则 yaml 中有逐算子的落地。以 DeepSeek-V3-Chat-serve.yaml 为例其中把每层self_attn的mlp.experts替换为自定义 MoE 内核并显式声明设备路由- match: name: ^model\\.layers\\..*\\.mlp\\.experts$ replace: class: ktransformers.operators.experts.KTransformersExpertsV2 # custom MoE Kernel with expert paralleism kwargs: prefill_device: cuda prefill_op: KExpertsTorch generate_device: cpu generate_op: KExpertsCPU out_device: cuda recursive: False这段规则正是专家解码走 CPUKExpertsCPU、预填充走 GPUKExpertsTorch、输出回到 CUDA的声明式表达同时self_attn被替换为优化过的 MLA 实现balance_serve_attention.flashinfer_attnlm_head与linear使用 Marlin/Torch 量化算子。换言之注入规则文件就是文档所述架构对齐的可执行配置inject rule path直接决定哪些算子落在哪块设备。AMX 加速内核的当前源码位于 kt-kernel/operators/amx/含moe.hpp、fp8-moe.hpp、fp8-perchannel-moe.hpp、k2-moe.hpp等专家算子配套基准脚本如 bench_k2_moe_amx.py、bench_moe_amx.py 可用于在 Intel 平台上复现 AMX 专家内核的性能。文档同时说明 NUMA 复制的取舍为了避免节点之间的数据传输成本我们在两个节点上 copy 了关键矩阵这会增加内存占用但会加速预填充和解码过程……加载权重时速度较慢因此加载时请耐心等待并监控内存使用情况。六、常见问题FAQR1 不返回思考过程测试 R1 时可能跳过思考。解决方法是追加参数--force_think true该参数在 local_chat.py 中以force_think: bool False定义。更多问题见 FAQ。七、适用前提与限制小结本文数据与命令基于 v0.2 / v0.3 时期的 DeepSeek-V3/R1 量化方案Q4_K_M 或 BF16 在线量化。V0.3 的 AMX 加速强依赖 Intel AMX 指令集非 AMX 平台仅能获得 AVX 级别性能。显存下限约 14GB单卡 24GB 足够内存占用随版本/量化在 382GB~1TB 之间波动。当前仓库已把旧版推理包移入archive/并把内核收敛到kt-kernel/最新的推理/微调入口以 kt-kernel 及其 README 为准本文保留 v0.2/v0.3 的复现命令以便历史对照。文档问题一节列出的当时遗留项服务器集成、local_chat多行输入支持属于历史状态是否修复请以当前仓库代码为准。【免费下载链接】ktransformersA Flexible Framework for Experiencing Heterogeneous LLM Inference/Fine-tune Optimizations项目地址: https://gitcode.com/GitHub_Trending/ktr/ktransformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考