返回首頁

GitHub Repo

Transformers 提出 Whisper 與 BART 編譯修補,移除關閉 LayerDrop 時的隨機分支

Transformers 社群於 11 月 8 日提出修補,處理 Whisper 與 BART 在 LayerDrop 為零時仍觸發動態分支、阻擋訓練全圖編譯的問題。提案已加入回歸測試但尚未合併,GPU 效能與完整訓練相容性仍待驗證。

Marcus Qwertyus · Public domain · Image source
zh-Hant

Transformers 社群於 11 月 8 日提出 PR #50475,針對 Whisper 與 BART 的編碼器、解碼器調整 LayerDrop 判斷。問題在於即使跳層機率設為零,訓練路徑仍抽取隨機張量並據此分支,使 torch.compile(fullgraph=True) 無法完成追蹤。截至查核時,提案仍開放中,CI 尚待維護者批准執行。修補提案

前一天的問題回報列出 Transformers 5.22.2、PyTorch 2.15.0 與 macOS ARM64 環境,使用小型 Whisper、隨機輸入及 backend="eager" 重現錯誤。這個設定主要隔離 Dynamo 前端追蹤問題,無法據此判斷 GPU 核心或編譯後的速度。回報者也在 BART 重現相同錯誤,並表示本機加入條件檢查後可通過重現程式。問題與重現程式

關鍵是 Python 分支條件依賴張量值。原本程式先呼叫 torch.rand([]),再比較結果是否小於跳層機率;即使機率為零,追蹤器仍遇到資料相依控制流程。提案改為先檢查 self.training and self.layerdrop > 0.0,只有真正啟用 LayerDrop 才抽樣,並為兩種模型新增訓練全圖編譯回歸測試。修改說明

對微調工作而言,這項修改可望移除預設設定下的一個編譯障礙。PyTorch 官方文件說明,一般編譯模式允許計算圖中斷;全圖模式則要求擷取單一 FX 圖,遇到中斷就報錯,也適合用來檢查函式庫的編譯相容性。因此,能否通過全圖追蹤具有工程意義,但仍不能直接推導出吞吐量提升。PyTorch 全圖模式文件

後續須注意兩項限制:跳層機率大於零時,隨機跳層造成的動態分支仍然存在;省略無效抽樣也會改變 CPU 隨機數產生器的前進位置,使固定種子的後續運算可能與舊版不同。工程團隊應追蹤合併與發布狀態,再以實際訓練配置驗證梯度、重現性及效能。限制與隨機數影響

來源

  1. Fix Whisper and BART torch.compile fullgraph training when layerdrop=0.0 — PR #50475
  2. Default Whisper training breaks torch.compile(fullgraph=True) — Issue #50459
  3. Use fullgraph=True to Identify and Eliminate Graph Breaks