返回首頁

GitHub Repo

PyTorch 社群回報編譯器漏乘係數,2.14 CUDA 動量更新可能放大十倍

10 月 5 日的 PyTorch 社群重現指出,Inductor 在特定裁剪與縮放組合下,可能遺失加法的 alpha 係數。修補草稿已於 10 月 6 日提出,但尚未合併,完整訓練影響仍待驗證。

Pytorch Deepdream (https://github.com/gordicaleksa/pytorch-deepdream) by gordicaleksa (https://github.com/gordicaleksa/pytorch-deepdream/commits?author=gordicaleksa) · MIT · Image source
zh-Hant

PyTorch 的 CUDA 編譯路徑出現可能靜默改變優化器數值的回歸案例。使用者 rwightman 於 10 月 5 日回報,在處理 timm 的 Adafactor 動量更新時,發現 PyTorch 2.14 經 torch.compile 執行的結果偏大;所附最小重現顯示,編譯輸出為直接執行結果的十倍。同一案例在 2.13 CUDA 與 2.14 CPU 路徑均得到正確比例。問題回報

觸發序列包含先按均方根裁剪更新張量,再乘上縮放係數,最後執行 m.mul_(0.9).add_(u, alpha=0.1)。依官方 API 定義,alpha 必須乘在被加入的張量上,因此這一步應計算 0.9m + 0.1u。回報附上的 Triton 程式碼卻只保留前段縮放,漏掉最後的 0.1;當測試把動量初始化為零時,便產生十倍差距。這個倍數不能直接套用到所有非零動量或完整訓練結果。官方加法文件、原地加法文件

10 月 6 日提出的修補草稿,將處理方向指向 Inductor 的圖樣比對:當節點帶有圖樣未宣告、且不同於預設值的關鍵字參數時,拒絕套用替換,避免融合運算遺失參數語義。不過作者明示,提案說明由 AI 產生且尚未經本人審閱;後續機器人審查也指出測試與說明存在問題,不能把草稿視為已驗證修復。修補提案

對編譯優化器的工程團隊而言,這個案例說明,吞吐量之外還須核對更新張量與動量狀態。回報中的 lerp_ 改寫可得到正確結果,但僅屬該重現的觀察。下一步應追蹤修補審查、回歸測試與正式版本收錄情況,並以自身優化器比較編譯前後數值;目前公開證據仍不足以判定所有 GPU、資料型別或長時間訓練的受影響範圍。

來源

  1. PyTorch Issue #199839:Inductor 2.14 FMA lowering drops alpha
  2. PyTorch PR #199871:Don't pattern-match nodes that set undeclared non-default kwargs
  3. torch.add — PyTorch 2.14 documentation
  4. torch.Tensor.add_ — PyTorch 2.14 documentation