返回首頁

GitHub Repo

Transformers 社群回報分散式評估偏差,尾批次重複樣本可能影響驗證損失

10 月 26 日的 Transformers 社群回報指出,驗證集無法整除全域批次大小時,分散式評估的 eval_loss 可能與單程序結果不同。回報附有小型模型對照,但截至查核時尚待維護者確認,也未有正式修補。

Marcus Qwertyus · Public domain · Image source
zh-Hant

Transformers 社群於 10 月 26 日提出一項評估正確性回報:使用 Trainer.evaluate 執行多程序評估時,若驗證集尾端需要補入重複樣本,最終 eval_loss 可能偏離單程序處理相同全域批次的結果。作者表示在 5.20.2 與 4.57.6 觀察到差異;截至查核時,問題仍開放,未有維護者確認或關聯修補。回報與重現程式

關鍵在於損失彙總與去重的順序。依回報分析,各程序先產生整批損失純量,再依批次大小複製並交給 gather_for_metrics。Accelerate 官方文件說明,這個介面可在分散式環境移除最後一批的重複項目;然而,若重複樣本已混入批次損失或正規化分母,刪掉輸出項目便無法還原原始貢獻。這是作者提出的根因解釋,仍待專案驗證。Accelerate 介面文件

回報以隨機初始化的小型 Qwen3 模型測試:三筆序列分別含四、二、一個有效預測目標,雙程序得到約 1.687,單程序則約 2.103。作者也測試了能整除全域批次的資料集,結果一致或僅差浮點精度,顯示尾批次與目標數量是值得追查的條件。不過,測試採獨立 CPU 程序與 FileStore 程序群組,並非一般以 Gloo 或 NCCL 啟動的多 GPU 工作,不能直接推定所有部署均受影響。測試條件

對工程團隊而言,這提醒驗證損失的跨配置比較也需要檢查資料分片方式。若團隊依細微損失差距挑選檢查點,可用固定模型、相同全域批次,對照單程序及多程序結果,並記錄尾批次樣本與有效 token 數。作者提出先收集每筆樣本的損失總和及目標數、去重後再彙總的方向;後續須觀察它能否保留既有指標定義,以及正式後端的回歸測試。作者亦揭露曾使用 AI 協助撰寫與審閱回報。提案與揭露

來源

  1. Trainer.evaluate eval_loss under DDP includes repeated samples in the last batch
  2. Accelerator.gather_for_metrics 官方文件