返回首頁

GitHub Repo

Transformers 回報 MoE 專家梯度歸零問題,BF16 搭配特定分散式配置可能停止更新

10 月 17 日的 Transformers 回報指出,BF16 搭配特定專家平行與 FSDP2 配置時,專家梯度可能全部歸零,即使訓練損失仍持續下降。維護者已提出修補並於 18 日補強測試,但提案仍未合併,正式修復版本尚待確認。

Daniel Voigt Godoy · CC BY 4.0 · Image source
zh-Hant

Transformers 的混合專家模型(MoE)訓練出現一項容易被損失曲線掩蓋的問題。10 月 17 日,專案成員回報,在 token dispatch 路徑搭配 BF16、且專家平行規模介於特定邊界之間時,所有專家梯度都可能歸零。重現環境包含 Transformers 5.20.1、PyTorch 2.13.0 與四張 NVIDIA B300;回報也附有小型 Qwen3 MoE 重現程式。問題回報

官方文件說明,token dispatch 會把各程序的 token 送往對應專家,再交換結果;專家權重還可透過 FSDP2 進一步分片。回報指出,當 tp_size < ep_size < fsdp_size * tp_size,專家梯度的除數與其 FSDP 群組大小不同,會觸發 NCCL 的 PREMUL_SUM 歸約路徑。依回報者分析,相關 BF16 縮放因子的型別處理有誤,導致特定係數被讀成零。平行機制文件、根因與重現

這項問題的工程風險在於,其他參數仍能學習,整體 loss 因而可能繼續下降,無法單靠訓練曲線判斷專家是否更新。回報者在 Qwen3-30B-A3B 全參數微調中觀察到,單次反向傳播後,96 個專家梯度張量全部為零。這是特定環境的觀察,不能直接推論所有 MoE 訓練都受影響;回報列出的例外包括 FP32、凍結專家,以及部分平行配置邊界。測試結果與範圍

修補提案讓專家梯度先求和,再於本地除算,避開上述路徑;提案作者表示,重現案例的 BF16 梯度範數恢復至接近 FP32。10 月 18 日新增的提交進一步比較損失與每個梯度。不過,查核時 PR 仍開啟,雖然原 issue 已被標記完成,仍不能視為正式版本已修復。工程師接下來應核對合併與發版狀態,並在相同配置下抽查專家梯度及權重更新,避免只用 loss 下降驗收訓練正確性。修補提案

來源

  1. Trainer checkpoint rotation can delete valid checkpoints when backup directories match the checkpoint prefix
  2. Fix Trainer checkpoint rotation matching backup directories
  3. Transformers Trainer 文件:Checkpointing & Saving
  4. Expert parallelism with ep_size < fsdp_size trains no experts in bfloat16
  5. Fix zero expert gradients in bfloat16 with expert parallelism and ep_size < fsdp_size
  6. Transformers 官方文件:Expert parallelism