ホームへ戻る

GitHub Repo

Transformers 5.20.2 修復生成輸入容器型別遺失,納入 BF16 專家梯度修補

Hugging Face 於 10 月 19 日發布 Transformers 5.20.2,修復生成流程搬移輸入時遺失容器型別、影響多模態模型的問題。新版也正式納入特定專家平行配置的 BF16 梯度修補,為先前社群回報提供可部署版本。

Andrew Wippler from Lancaster, USA · CC BY 2.0 · Image source
zh-Hant

Hugging Face 於 10 月 19 日發布 Transformers 5.20.2,將生成流程的輸入型別修正,以及特定分散式訓練情境下的專家梯度修補納入正式版本。PyPI 同日提供原始碼與 wheel 套件,工程團隊可直接固定版本進行驗證。發布說明、PyPI 套件紀錄

生成問題出在新增的 move_to_device 路徑:搬移類字典輸入時,原有的容器型別可能遺失,連繼承自 OrderedDict 的 ModelOutput 也會受影響。若後續程式依賴原型別提供的屬性存取方式,就可能發生錯誤。維護者指出,這會影響 generate 中的 prepare_inputs_for_generation,多模態模型尤其需要留意;修補已合併,並補上測試。輸入型別修補

訓練端則修正 BF16、token dispatch 與特定專家平行拓樸交會時的問題。修補說明列出的條件是 tp_size < ep_size < fsdp_size * tp_size:專家梯度的除數與其 FSDP 群組大小不同,導致 FSDP2 使用 NCCL PREMUL_SUM;在回報中涉及的 PyTorch 版本裡,這項運算可能回傳零。新版改為先在專家模組中加總,再於本地進行除法。專家梯度修補

維護者使用四張 B300 與 PyTorch 2.13.0 重現問題時,BF16 專家梯度範數從零恢復至 0.0889,接近 FP32 的 0.0887,並新增四卡回歸測試。這項結果表明,修補在該配置下恢復了梯度;但不能據此推定所有拓樸與模型都已完成驗證。重現數據與測試

工程團隊升級後,應分別檢查多模態生成的輸入容器,以及各專家的梯度與權重更新。前者關乎資料搬移後的介面契約,後者則攸關訓練是否實際更新專家;建議使用既有工作負載比較升級前後的結果。此次發布提供了正式修復版本,完整的環境相容性仍需由部署端確認。

出典

  1. Transformers 5.20.2 發布說明
  2. Transformers 5.20.2 套件發布紀錄
  3. Fix inputs dict casting in generate
  4. Fix zero expert gradients in bfloat16 with expert parallelism