今天小编分享的科学经验:老显卡福音!美团开源首发INT8无损满血版DeepSeek R1,欢迎阅读。
满血版 DeepSeek R1 部署A100,基于 INT8 量化,相比 BF16 实现50% 吞吐提升!
美团搜推机器学习团队最新开源,实现对 DeepSeek R1 模型基本无损的 INT8 精度量化。
要知道,DeepSeek R1 原生版本的模型权重为 FP8 数据格式,对 GPU 芯片类型有严格限制,仅能被英伟达新型 GPU 支持(如 Ada、Hopper 架构芯片),其他型号 GPU(如 A100)无法直接部署。
目前,量化代码已经合入到了开源 LLM 推理框架 SGLang,量化模型已经发布到了 Hugging Face 社区,方便用户使用。
INT8: 友好的 " 平替 "
根据 DeepSeek 最新发布的技术报告,V3/R1 突破性的训练成本控制主要依托 FP8 精度训练方案。FP8 是一种典型的模型量化技术,相较于业界常用的 BF16 精度,FP8 精度通过将数据位宽减半显著降低了单次计算开销,但也会带来一定的精度损失。
在实践中,DeepSeek R1 采用了混合精度训练机制有效缓解了精度损失问题。
为了继续保持高吞吐性能,美团技术团队选择了和 FP8 精度等位宽的 INT8 精度。同时,INT8 精度被广泛硬體原生支持,基于 INT8 精度可以极大拓展 DeepSeek 模型的硬體部署范围。以硬體友好的 INT8 精度为中心,美团技术团队开始探索 FP8" 平替 " 的落地方案。
量化技术的探索
具体来说,分块量化(Block-wise Quantization)是 DeepSeek V3/R1 降低量化损失的关键技术之一。分块量化通过对权重矩阵的细粒度切分,将量化操作的范围控制在 [ 128, 128 ] 的矩阵内,减少了分布分散的出现概率,从而很好地控制了每次量化过程中的损失。
美团技术团队延续了 DeepSeek 训练的量化策略,同样在 [ 128, 128 ] 的矩阵内进行分块量化操作,保证训练和推理的一致性。在量化目标的选型上,INT8 的优势在于其与 FP8 享有相同的位宽,且大部分硬體都对 INT8 的数据计算原生支持。
在实践中,由于 DeepSeek 官方并没有提供半精度浮点型(BF16)的权重,因此首先需要将原生的 FP8 模型权重反量化成 BF16,再分块量化成 INT8 类型。另外在推理过程中,为了匹配权重的分块量化,激活值采用在线逐 token-group 的量化方式,即每个 token 的嵌入向量分为多个组,逐组进行量化。分块量化的激活值和权重的乘法过程如下左图所示。
除了上述的分块量化外,美团技术团队还探索了更高效的通道量化(Channel-wise Quantization),即权重的每列为一组进行量化。
通道量化在执行完 INT8 的矩阵乘法后,只需进行一次反量化计算,计算开销更低。在具体实践中,同样地先将原生 FP8 的模型权重反量化成 BF16,之后逐通道量化成 INT8 类型。同时,对激活值采用在线逐 token 量化,最大程度地减少 activation 的量化损失。通道量化的激活值和权重的乘法过程如下右图所示。
目前,两种 INT8 量化权重均已开源到 Hugging Face。
INT8 量化模型精度
分别应用上述的两种量化方法,对开源的 DeepSeek R1 模型进行了 INT8 量化处理,并在 GSM8K 和 MMLU 两个数据集上对量化后的模型进行了精度评估。评估结果如下表所示,相比基线的 BF16 和 FP8 模型,两种 INT8 量化模型的精度基本无损。
注:表中的精度结果是多次测试的均值。
INT8 量化模型推理吞吐
在知名开源推理框架 SGLang 上,对上述两种 INT8 量化方法进行了推理支持,并进行了推理吞吐评估。SGLang 是当前 SOTA 的开源 LLM 推理框架,在 DeepSeek 系列模型上有着最优的推理性能,被业界广泛使用。
在 A100 GPU 上对两种 INT8 模型和 BF16 模型进行推理吞吐评估。得益于更低的显存要求,INT8 量化模型仅需要 16 张 A100 GPU 即可推理,但是 BF16 模型需要 32 张 A100 GPU。为了比较的公平性,统一在 32 张 A100 GPU 上进行吞吐测试。结果如下表所示,分块量化的 INT8 推理相比 BF16 可以提升 33% 的吞吐;通道量化的 INT8 推理可以进一步达到 50% 的吞吐提升。
INT8 量化模型部署
以双节点各 8 张 A100 GPU 为例,开发者需要在双部署节点安装最新版本的 SGLang,然后分别执行下面命令:
# 分块量化 INT8 推理 # 主节点 python3 -m sglang.launch_server --model meituan/DeepSeek-R1-Block-INT8 --tp 16 --dist-init-addr HEAD_IP:5000 --nnodes 2 --node-rank 0 --trust-remote --enable-torch-compile --torch-compile-max-bs 8# 副节点 python3 -m sglang.launch_server --model meituan/DeepSeek-R1-Block-INT8 --tp 16 --dist-init-addr HEAD_IP:5000 --nnodes 2 --node-rank 1 --trust-remote --enable-torch-compile --torch-compile-max-bs 8
# 通道量化 INT8 推理 # 主节点 python3 -m sglang.launch_server --model meituan/DeepSeek-R1-Channel-INT8 --tp 16 --dist-init-addr HEAD_IP:5000 --nnodes 2 --node-rank 0 --trust-remote --enable-torch-compile --torch-compile-max-bs 8 --quantization w8a8_int8# 副节点 python3 -m sglang.launch_server --model meituan/DeepSeek-R1-Channel-INT8 --tp 16 --dist-init-addr HEAD_IP:5000 --nnodes 2 --node-rank 1 --trust-remote --enable-torch-compile --torch-compile-max-bs 8 --quantization w8a8_int8
下面是一些有趣的 case:
深度思考能力展示
这里以 curl 为例发送一条请求:
curl -X POST 'http://HEAD_IP:5000/v1/chat/completions' --header 'Content-Type: application/json' -d '{ "model": "deepseek-r1", "messages": [ {"role": "user","content": " 下列选项中,找出与众不同的一个:1. 铝 2. 锡 3. 钢 4. 铁 5. 铜 " } ] }'
在 INT8 R1 的回答中(由于篇幅限制省略部分内容),能看到其风格独特的反思:
不过,我需要确认这一点是否正确。比如,有没有可能其他选项中也有合金?比如,锡有时候会和其他金属混合使用,但锡本身是纯金属。同样,铝、铁、铜都是纯金属。所以钢作为合金,应该是一个关键的不同点。另外,可以考虑其他属性,比如它们的用途、物理性质或化学性质。例如,导电性:银是最好的导体,但这里没有银,而铜的导电性也很好,铝也不错,铁和钢的导电性相对差一些。但这样分类的话,可能难以确定哪一个不同。……不过回到最初的分类,钢是唯一的合金,而其他都是纯金属,这一点可能更为基础。因此答案应该是 3. 钢。不过需要再验证一下这个结论是否正确。
最终答案也是正确的:
答案:3. 钢
模拟海量小球运动
参考其他 LLM 测试的 prompts 作为输入,对比 INT8(上)和 FP8(下)输出代码的运行效果,INT8 完全不逊于 FP8。
write a script for 100 bouncing balls within a sphere, make sure to handle collision detection properly. make the sphere slowly rotate. make sure balls stays within the sphere. implement it in p5.js
总结与展望
综上,研究团队在 DeepSeek R1 上进行了 INT8 量化技术的探索,并基于 SGLang 框架进行了推理能力的支持,在保证量化后模型精度的前提下,让 DeepSeek R1 可以在如 A100 等老型号 GPU 上进行部署,并且提升了推理吞吐。我们希望开源的代码和权重可以让更多用户和业务方受益,也欢迎大家积极交流相关技术,共同建设、回馈开源社区。
交流邮箱:[email protected]
参考文献
[ 1 ] 技术报告:Liu A, Feng B, Xue B, et al. Deepseek-v3 technical report [ J ] . arXiv preprint arXiv:2412.19437, 2024.
[ 2 ] Hugging Face:https://huggingface.co/meituan/DeepSeek-R1-Block-INT8,https://huggingface.co/meituan/DeepSeek-R1-Channel-INT8
[ 3 ] 推理支持:Block-wise INT8 DeepSeek R1 支持(https://github.com/sgl-project/sglang/pull/3730)、Channel-wise INT8 DeepSeek R1 支持(https://github.com/sgl-project/sglang/pull/3888)
[ 4 ] 其他 LLM 测试:https://qwenlm.github.io/blog/qwq-max-preview/
— 完 —
学术投稿请于工作日发邮件到:
标题注明【投稿】,告诉我们:
你是谁,从哪来,投稿内容
附上论文 / 项目主页链接,以及联系方式哦
我们会(尽量)及时回复你
一键关注 点亮星标
科技前沿进展每日见
一键三连「点赞」「转发」「小心心」
欢迎在评论区留下你的想法!