好意思团搜推团队 投稿量子位 | 公众号 QbitAI葡萄京娱乐网站app(中国)官方网站
满血版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上进行部署,何况普及了推理蒙胧。咱们但愿开源的代码和权重可以让更多用户和业务方受益,也宽容群众积极交流研究时刻,共同开发、回馈开源社区。
交流邮箱:search.platform@meituan.com
参考文件[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/