今天小編分享的科學經驗:老顯卡福音!美團開源首發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/
— 完 —
學術投稿請于工作日發郵件到:
标題注明【投稿】,告訴我們:
你是誰,從哪來,投稿内容
附上論文 / 項目主頁鏈接,以及聯系方式哦
我們會(盡量)及時回復你
一鍵關注 點亮星标
科技前沿進展每日見
一鍵三連「點贊」「轉發」「小心心」
歡迎在評論區留下你的想法!