螞蟻國產(chǎn)GPU訓練大模型細節(jié)曝光!Ling模型研發(fā)負責人回應
螞蟻開源大模型的低成本訓練細節(jié),疑似曝光!
這段時間,螞蟻一篇技術(shù)論文引發(fā)關(guān)注。論文中顯示,他們推出的兩款MoE大模型,能夠在國產(chǎn)GPU上完成與英偉達同效的訓練。一時間,該消息在技術(shù)圈發(fā)酵,登上了熱搜,甚至還傳出「計算成本低于DeepSeek」一些傳聞。

現(xiàn)在,螞蟻Ling模型研發(fā)負責人張志強在知乎上作出了回應。
他發(fā)布長文《關(guān)于我們摳 FLOPS 的一些點滴》,分享了他們一些大模型訓練的經(jīng)驗和教訓。

包括訓練正確性對齊、Router TP(Tensor Parallelism)bug 修復、訓練穩(wěn)定性等問題的解決。
最后還回應了外界對于他們成本計算的誤解,并表示不管是在 GPU 還是在國產(chǎn)加速卡上,LLM 的訓練成本優(yōu)化都是無止境的。
在不改變原意的基礎(chǔ)上,新火種做了如下整理在此分享給大家,希望能給大家?guī)硪欢ǖ膯l(fā)。
(新火種已獲原作者授權(quán))
關(guān)于我們摳 FLOPS 的一些點滴本周開始看到有媒體關(guān)注我們團隊的模型訓練成果,其實月初我們就在 GitHub 和 Hugging Face 上發(fā)布了 Ling 模型權(quán)重和技術(shù)報告(https://arxiv.org/abs/2503.05139),名字就叫「EVERY FLOP COUNTS」,關(guān)于使用非 NVIDIA 加速卡集群訓練 Ling 300B MoE 大模型的一些技術(shù)細節(jié)。我們的技術(shù)報告被外媒記者發(fā)現(xiàn)了,“出口轉(zhuǎn)內(nèi)銷”地被關(guān)注到。其實我們本來就準備在月底的小型技術(shù)沙龍上分享經(jīng)驗教訓的,既然被關(guān)注到了,就來提前說明一下吧。
從開源來,回社區(qū)去即使如最近大熱的 DeepSeek,也受限于算力問題進行了很多精彩的優(yōu)化,對于我們一線研發(fā)人員來說,克服環(huán)境的限制就是工作。眾所周知,和國外的大模型團隊相比,中國團隊面對了更多的異構(gòu)加速卡的挑戰(zhàn),我們并不是第一家面對異構(gòu)問題的公司,比如智源研究院就發(fā)起了 FlagScale 項目,研發(fā)面向異構(gòu)加速卡的訓練框架。有了開源社區(qū),我們可以利用同行們的前期探索作為工作的基礎(chǔ)。同樣,我們的實踐成果也回饋給社區(qū),希望可以幫助社區(qū)減少不必要的重復勞動。螞蟻在去年開源 DLRover 項目(https://github.com/intelligent-machine-learning/dlrover ),報告提到的輕量級選擇性跟蹤框架 XPUTimer 就集成在 DLRover 上,可以為不同算力平臺上的大規(guī)模訓練任務提供監(jiān)控診斷功能。希望這些對社區(qū)的回饋,可以給大家?guī)硪恍﹩l(fā)。
一些收獲和經(jīng)驗教訓在寫這份技術(shù)報告時,我們希望分享 Ling 研發(fā)過程的一些關(guān)鍵 insight。Insight 可以是 novelty story,也可以是 bitter lesson。這里和大家聊聊我們得到的一些教訓。作為較早吃螃蟹的人,分享這些教訓并不是想吐槽,只是希望可以幫助其他同行避開一些問題,當然也希望可以促進國產(chǎn)加速卡的更快成熟。下面展開聊一聊幾個我印象深刻的 bitter lesson。
訓練正確性對齊為了讓大規(guī)模 MoE LLM 可以在多個算力平臺上進行無縫切換訓練,訓練正確性對齊是必不可少又極其繁瑣的一個過程。對齊有不同的標準,比如在不同平臺訓練都可以正常收斂是一個標準,而算子精度、訓練框架、loss 完全對齊又是另外一個標準。“很傻很天真”的我們本著技術(shù)問題應該知其然又知其所以然的信念,定下了一個非常嚴格標準,基礎(chǔ)算子(除符合預期的精度誤差)完全對齊 + 分布式訓練框架前后向計算完全對齊 + 大規(guī)模訓練長跑 loss 差異低于 0.1%,當然這也換來了無數(shù)個通宵 debug 的難忘體驗。
有趣的是,在做正確性對齊的過程中,我們同步也在做關(guān)于 scaling law 的研究。我們發(fā)現(xiàn),通過設計一個合理的外推擬合方法,在不進行真實訓練的情況下,一個尺寸較大(比如 20B、80B)的模型在正式訓練較長時間(比如 2T token)后的 loss,可以被一系列 1B 以下的小尺寸模型的訓練外推預測,其預測誤差低于 0.5%。這樣看來,跨平臺訓練的 loss 差異低于 0.1% 其實是一個合理的要求。
在算子對齊上,我們將不同平臺的基礎(chǔ)算子進行了完全對齊實現(xiàn),比如 matmul、linear 等。
Router TP(Tensor Parallelism)bug 修復
在框架上,F(xiàn)SDP 向 MindSpeed(Megatron)對齊引入 tensor parallelism 特性會導致一系列模型收斂問題,尤其是在 MoE 相關(guān)的 router 部分非常嚴重。這里展開講一下我們的工作。
在 router 的前向計算上,由于 sp(sequence parallel)在 Megatron 中對 router 的輸入進行了切分,導致其輸入并不完整,因此在 router 相關(guān) loss 計算(包括 load_balance_loss 和 z_loss)時會額外使用 gather 操作將不同 sp rank 上的數(shù)據(jù)同步到一起,以進行完整 batch 計算。這個過程并沒有專門針對反向進行對應的 reduce 實現(xiàn),會導致回傳梯度重復,需要手動對 router 相關(guān)的 loss 系數(shù)進行放縮。值得注意的是該 bug 已經(jīng)在 Megatron 0.7.0 版本修復;當時 MindSpeed 支持到 0.6.0 版本,因此需要進行額外 patch 修復。
在 router 的反向計算上,Megatron 對 router 通過 gather 操作獲取了完整的 logits,而 MindSpeed 在后續(xù)的 permute/unpermute 操作中需要強制使用 local logits,因此額外進行一次 scatter 操作來進行切分,出現(xiàn)了 loss 不斂性問題。經(jīng)過排查,我們發(fā)現(xiàn)是 scatter_to_sequence_parallel_region在反向?qū)崿F(xiàn)中進行了一次 _gather_along_first_dim操作導致梯度比正常梯度更大。最終我們在每一次 scatter 操作之后添加了對應的 gradient_scale 實現(xiàn)以保證梯度的正確性,從而滿足 loss 收斂的需求。
NormHead 遷移參考百川的訓練經(jīng)驗,我們也采用了 NormHead 來保證訓練的穩(wěn)定(雖然初衷是為了保證訓練穩(wěn)定,但是后來通過 scaling law 分析,我們發(fā)現(xiàn) NormHead 在 loss 上也會帶來一些優(yōu)勢)。NormHead 從 FSDP 遷移到多 D 并行的 MindSpeed/Megatron 上也遇到了問題。FSDP 上的參數(shù)在邏輯上是沒有被切分的,因此 NormHead 的實現(xiàn)非常簡單高效,通過 Torch 原生自帶的 torch.nn.functional.normalize 即可完成對 lm_head.weight 標準化操作。在 MindSpeed/Megatron 中,由于涉及到了多 D 并行,因此需要修改 NormHead 的實現(xiàn)方法進行適配。最直接簡單的方案就是結(jié)合 torch.nn.functional.normalize 的實際計算過程,將本地設備上的 lm_head.weight 先進行標準化計算,最后使用 reduce 對標準化后的 lm_head.weight 值進行同步。遺憾的是我們發(fā)現(xiàn)這樣實現(xiàn)無法保證 loss 收斂,分析其原因主要是由于在不同機器上進行數(shù)據(jù)同步采用 Megatron.core.tensor_parallel.mappings._ReduceFromModelParallelRegion,而該方案沒有在反向傳播過程中實現(xiàn)對應的梯度同步,最終導致 loss 上升;于是我們重寫了一版_ReduceFromModelParallelRegionForNormHead并實現(xiàn)了對應的反向以保證loss收斂。另一方面,國產(chǎn)加速卡的某些算子可能不支持 BF16 計算,而 FP32 的算子計算效率遠低于 BF16 算子,為了防止在多 D 并行中阻塞住模型的整體計算,需要對 NormHead 性能進行優(yōu)化。我們設計了基于 all2all 通信的 NormHead 實現(xiàn)以及 HeadNormCache 等方案,以在國產(chǎn)加速卡上達到更優(yōu)的計算效率。
訓練穩(wěn)定性與 GPU 相比,國產(chǎn)加速卡在穩(wěn)定性上確實存在不少問題,時常會遇到由于機器不穩(wěn)定帶來的 loss 以及 grad 異常,從而引發(fā)尖刺,影響模型的收斂過程。為了緩解這些問題,我們設計了兩種不同的尖刺處理機制。
對于 loss 尖刺,我們會把歷史最近的一部分 loss 作為參考,如果當前 loss 與參考的歷史 loss 均值相比有明顯的上升,我們就會跳過這一步的訓練直接開始下一步,或直接降低這一步的學習率來減少影響。這種方法在大多數(shù)情況下是有效的,可以很好地緩解訓練不穩(wěn)定問題。
但我們在實驗觀察中發(fā)現(xiàn),loss 尖刺處理機制并不能解決所有的訓練不穩(wěn)定問題,因為 loss 是模型訓練過程的一個很宏觀的表現(xiàn),模型的狀態(tài)在 loss 產(chǎn)生尖刺之前可能已經(jīng)出現(xiàn)了不穩(wěn)定。Grad 會直接作用于模型參數(shù),對其監(jiān)控相比于 loss 更加迅速,因此我們也開發(fā)了 grad 尖刺處理機制。參考 loss 尖刺的實現(xiàn),我們在自研的 ATorch 框架中對所有的 _ParamAndGradBuffer 進行處理,從而實現(xiàn)對模型 grad 的監(jiān)控。如果 grad 出現(xiàn)異常就跳過這一步訓練。通過 grad+loss 尖刺處理機制,可以自動處理大部分的 loss 異常。
成本的計算這次大家的一些誤解也源于對成本計算的方式,其實我們在成本計算上使用了學術(shù)界比較通行的計算方法,這里也簡單介紹一下。
根據(jù)在不同平臺上對 Ling-Plus 的真實訓練記錄,我們可以觀察到某個平臺在 K 張加速卡上持續(xù)一段時間(比如一周)的 token 數(shù),再根據(jù)技術(shù)報告表 1 上提到的不同加速卡的單位時間成本,就可以很簡單地計算出對應平臺上訓練單位 token 量(報告里以 1 萬億 token 為單位)的成本。

事實上,不管是在 GPU 還是在國產(chǎn)加速卡上,LLM 的訓練成本優(yōu)化都是無止境的。Ling 的訓練過程一定程度地說明,在我們做的這些技術(shù)努力上,國產(chǎn)加速卡上的訓練成本與 GPU 相當甚至更低,同時可以保證 loss 收斂一模一樣。
未來的工作Ling 模型的發(fā)布只是我們工作的一個里程碑,后續(xù)我們還會進一步改進自己的工作。DeepSeek 為我們對訓練經(jīng)濟性的提升帶來了啟發(fā),DeepSeek 在訓練中使用了 FP8 證明了這樣的低精度浮點數(shù)是可以訓練出來優(yōu)秀的大模型的;同樣我們兄弟團隊基于強化學習的 AReaL(https://github.com/inclusionAI/AReaL)也開源了,強化學習也是通往 AGI 之路的重要一環(huán)。我們后續(xù)的更多工作也會陸續(xù)開源在 inclusionAI org(https://huggingface.co/inclusionAI)里。
每個 AI 研發(fā)工程師都相信 AGI 必將到來。我們相信 AGI 一定是普惠大眾的,感謝大家的關(guān)心,期待未來的工作也能受到持續(xù)關(guān)注。
知乎鏈接:https://zhuanlan.zhihu.com/p/1888526583813350974
- 免責聲明
- 本文所包含的觀點僅代表作者個人看法,不代表新火種的觀點。在新火種上獲取的所有信息均不應被視為投資建議。新火種對本文可能提及或鏈接的任何項目不表示認可。 交易和投資涉及高風險,讀者在采取與本文內(nèi)容相關(guān)的任何行動之前,請務必進行充分的盡職調(diào)查。最終的決策應該基于您自己的獨立判斷。新火種不對因依賴本文觀點而產(chǎn)生的任何金錢損失負任何責任。