今天小编分享的科学经验:4090单卡跑满血版DeepSeek-R1,清华团队开源项目再破大模型推理门槛,欢迎阅读。
DeepSeek-R1 火遍海内外,但推理伺服器频频宕机,专享版按 GPU 小时计费的天价成本更让中小团队望而却步。
而市面上所谓 " 本地部署 " 方案,多为参数量缩水 90% 的蒸馏版,背后原因是 671B 参数的 MoE 架构对显存要求极高——即便用 8 卡 A100 也难以负荷。因此,想在本地小规模硬體上跑真正的 DeepSeek-R1,被认为基本不可能。
但就在近期,清华大学 KVCache.AI 团队联合趋境科技发布的KTransformers开源项目公布更新:
支持 24G 显存在本地运行 DeepSeek-R1、V3 的 671B 满血版。预处理速度最高达到286 tokens/s,推理生成速度最高能达到14 tokens/s。
其实早在 DeepSeek-V2 时代,这个项目就因 " 专家解除安裝 " 技术而备受关注——它支持了 236B 的大模型在仅有 24GB 显存的消费级显卡上流畅运行,把显存需求砍到 10 分之一。
△HuggingFace 的开源负责人的点赞
随着 DeepSeek-R1 的发布,社区的需求迅速激增,在 GitHub 盖起上百楼的 issue,呼吁对其进行支持。
版本更新发布后,不少开发者也纷纷用自己的 3090 显卡和 200GB 内存进行实测,借助与 Unsloth 优化的组合,Q2_K_XL 模型的推理速度已达到 9.1 tokens/s,真正实现了千亿级模型的 " 家庭化 "。
此外,KTransformers 团队还公布了 v0.3 预览版的性能指标,将通过整合 Intel AMX 指令集,CPU 预填充速度最高至 286 tokens/s,相比 llama.cpp 快了近 28 倍。对于那些需要处理上万级 Token 上下文的长序列任务(比如大规模代码库分析)来说,相当于能够从 " 分钟级等待 " 瞬间迈入 " 秒级响应 ",彻底释放 CPU 的算力潜能。
另外,KTransformers 还提供了兼容 Hugginface Transformers 的 API 与 ChatGPT 式 Web 界面,极大降低了上手难度。同时,其基于 YAML 的 " 模板注入框架 " 能够灵活切换量化策略、内核替换等多种优化方式。
目前,KTransformers 在 localLLaMa 社区持续位居热榜第一,有上百条开发者的讨论。
项目背后的技术细节,团队也给出了详细介绍。
利用 MoE 架构的稀疏性
DeepSeek-R1/V3 均采用了 MoE(混合专家)架构,这种架构的核心是将模型中的任务分配给不同的专家模块,每个专家模块专注于处理特定类型的任务。MoE 结构的模型具有很强的稀疏性,在执行推理任务的时候,每次只会激活其中一部分的模型参数。
因此,MoE 架构需要大量的存储空间,但是并不需要很多的计算资源。
基于此,团队采用了 GPU/CPU 的异构计算划分策略:仅将非 Shared 部分的稀疏 MoE 矩阵放在 CPU/DRAM 上并使用 llamafile 提供的高速算子处理,剩余稠密部分放在 GPU 上使用 Marlin 算子处理。
在这样的情况下,同样使用 4bit 量化,GPU 上的参数只需要 24GB 的显存环境,这样的消耗只需要一张 4090 就能满足。
此外通过这样的组合,还能够大幅度提升整个推理的性能,达到 286 token/s 的预填充和 14 token/s 的生成速度,比 llama.cpp 快 28 倍。
具体到技术实现中,团队采用了基于计算强度的 offload 策略、高性能的 CPU 和 GPU 算子、CUDA Graph 加速的多种方式来加速推理速度。
基于计算强度的 offload 策略
在 Attention 的核心,DeepSeek 引入了一种新的 MLA 算子,它能够充分利用显卡算力,能够很大程度提升效率。然而,MLA 运算符在官方开源的 v2 版本中,是将 MLA 展开成 MHA 进行的计算,这个过程不仅扩大了 KV cache 大小,还降低了推理性能。
为了真正发挥 MLA 的性能,在 KTransformers 推理框架中,团队将矩阵直接吸收到 q_proj 和 out_proj 权重中。因此,压缩表示不需要解压缩来计算 Attention。
这种调整显著减少了 KV 缓存大小,并增加了该运算符的算术强度,这非常显著地优化了 GPU 计算能力的利用率。
在计算中,MLA 和 Expert 的计算强度相差数千倍。因此,团队通过计算强度来决定划分策略,优先将计算强度高的放入 GPU(MLA > Shared Expert > Routed Expert),直到 GPU 放不下为止。
引入 CPU 和 GPU 的高性能算子
在 CPU 算子中,团队使用 llamafile 作为 CPU 内核,使用 expert 并行和其他优化,组成高性能算子框架 CPUInfer。此外增加多线程、任务调度、负载均衡、NUMA 感知等优化。
在 GPU 算子的使用上,团队引入 Marlin 算子作为 GPU 计算的内核,它能够非常高效地进行量化后的矩阵计算,和 torch 这些计算量化后的矩阵乘法的库相比,使用 Marlin 算子完成在 GPU 上面的计算大概可以达到 3.87 倍的理想加速效果。
CUDA Graph 的改进和优化
为了平衡推理性能和框架本身的易用性 / 可扩展性,基于 Python 构建 KTransformers 框架,同时使用 CUDA Graph 降低 Python 调用开销是一个必然的选择。
KTransformers 中使用 CUDA Graph 过程中尽可能地减少了 CPU/GPU 通讯造成的断点,在 CUDA Graph 中掺杂和 CPU 异构算子通讯,最终实现一次 decode 仅有一个完整的 CUDA Graph 调用的结果。
灵活高效的推理实验平台
值得关注的是,KTransformers 不止是一个固定的推理框架,也不只能推理 DeepSeek 的模型,它可以兼容各式各样的 MoE 模型和算子,能够集成各种各样的算子,做各种组合的测试。
此外还同时提供了 Windows、Linux 的平台的支持,方便运行。
当大模型不断往上卷,KTransformers 用异构计算打开一条新的推理路径。基于此,科研工作者无需巨额预算也能够探索模型本质。
GitHub 地址:https://github.com/kvcache-ai/ktransformers
具体技术细节指路:https://zhuanlan.zhihu.com/p/714877271
* 本文系量子位获授权刊载,观点仅为原作者所有。