返回首頁

GitHub Repo

Transformers 社群提出訓練正規化修補,有效 token 計數截斷可能放大梯度

11 月 1 日的 Transformers 社群回報指出,Trainer 在模型平行設定下可能截斷有效 token 計數,使損失與梯度縮放失準。作者提供雙卡對照並提交修補,但截至查核時尚未合併,也未見維護者確認。

Marcus Qwertyus · Public domain · Image source
zh-Hant

Transformers 社群於 11 月 1 日提出一項涉及訓練數值正確性的回報:Trainer 計算損失正規化分母時,若有效目標 token 數無法被模型平行係數整除,可能因向下取整而放大梯度。回報環境為開發版 5.23.0.dev0、兩張 Tesla T4,以及 FSDP2 搭配 cp_size=2 的上下文平行設定。問題回報

疑點位於 _get_num_items_in_batch():有效 token 數除以張量、上下文與序列平行係數的乘積時,使用 //。例如三個有效目標除以二,分母會從應保留的 1.5 變成 1;作者的最小檢查也顯示,一個有效目標可能被截成零。重現程式與計數結果

這項計數會進入損失計算,而非只供日誌顯示。Trainer 官方文件說明,自訂損失介面會接收整個梯度累積批次的項目數,並以 num_items_in_batch 參與正規化。因此,工程上應核對的是實際分母與更新幅度,不能只確認訓練程序能否完成。Trainer 文件

作者提交的修補將整數除法改為一般除法,並加入可整除、不可整除及零分母案例的回歸測試。依其雙卡驗證,三個有效目標時,原版的損失、梯度範數與單步 SGD 更新範數均為參考版本的 1.5 倍;四個目標的對照則一致。這些結果仍屬提交者自報,PR 尚開啟且未見審查。修補提案

上下文平行會沿序列維度切分輸入,讓多張 GPU 分擔長序列注意力計算;Accelerate 文件也提醒,標籤位移與切分方式會影響損失正確性。此次回報讓正規化分母成為另一個值得檢查的環節,但不能據此推定所有平行模式或正式版本均受影響。後續應關注維護者確認、其他平行模式的實機測試,以及修補最終納入的版本。上下文平行文件

來源

  1. Trainer floor-divides valid-token counts under model parallelism
  2. Fix/trainer parallel token count 50212 — PR #50214
  3. Transformers Trainer 文件
  4. Context Parallel in Accelerate