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

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 下降驗收訓練正確性。修補提案
來源
- Trainer checkpoint rotation can delete valid checkpoints when backup directories match the checkpoint prefix
- Fix Trainer checkpoint rotation matching backup directories
- Transformers Trainer 文件:Checkpointing & Saving
- Expert parallelism with ep_size < fsdp_size trains no experts in bfloat16
- Fix zero expert gradients in bfloat16 with expert parallelism and ep_size < fsdp_size
- Transformers 官方文件:Expert parallelism