返回首頁

GitHub Repo

Transformers 提出 RoPE 精度修補,處理 ZeRO-3 載入時的降精度問題

11 月 2 日提交的 Transformers 修補提案,處理 DeepSpeed ZeRO-3 初始化時將 RoPE 頻率緩衝區降為 bf16 的問題。回報者已驗證多種模型的初步修正效果,但提案尚未合併,舊版 DeepSpeed 相容性仍須確認。

Internet Archive Book Images · No restrictions · Image source
zh-Hant

Transformers 成員 Cyrilvallez 於 11 月 2 日提出修補,避免 DeepSpeed 在模型初始化時降低旋轉位置編碼(RoPE)頻率緩衝區的精度。這是針對 10 月 29 日回報的後續處理;截至查核時,PR #50275 仍開放,尚未合併。修補提案

問題出在 ZeRO-3 的初始化路徑。回報者指出,deepspeed.zero.Init 會包裝 torch.arange 等張量建構函式,將浮點結果轉成訓練使用的資料型別。Transformers 先前重整 RoPE 模組後,部分頻率初始化改用浮點序列,使原應保留 float32 的 inv_freq 變成 bf16;後續即使重新計算數值,再複製進既有緩衝區,仍會留下低精度結果。重現程式與版本對照

這類誤差對長序列尤其值得注意:位置索引乘上頻率後,頻率的小幅偏差可能形成較大的旋轉角度差。作者在指定 Llama 設定、位置 65,536 的測試中,回報 ZeRO-3 路徑最大角度誤差約 117.7 弧度,對照路徑約為 0.003 弧度。這是特定組態的數值測試,不能直接換算成模型品質下降幅度。測試條件

新提案介入 DeepSpeed 對張量建構函式的包裝。回報者以 DeepSpeed 0.19.9 在 CPU 上測試 Llama、Qwen3、Gemma3 等六種模型,表示兩種載入入口得到的頻率均保持 float32,且與未使用 DeepSpeed 的結果一致。他同時指出舊版呼叫介面不同;作者隨後加入相容性提交,但頁面尚未見對最新版本的完整複驗。測試與相容性討論

官方文件說明,ZeRO-3 在初始化階段便切分模型參數,因此載入流程也是工程團隊需要核對的環節。對長上下文微調工作,接下來應追蹤修補是否合併、舊版 DeepSpeed 是否通過驗證,以及修正前後的實際訓練結果;目前證據仍以數值重現與載入測試為主。DeepSpeed 整合文件

來源

  1. Prevent deepspeed from downcasting rope Buffers — PR #50275
  2. RoPE inv_freq is initialized in bf16 under DeepSpeed ZeRO-3 again — Issue #50135
  3. Transformers documentation: DeepSpeed ZeRO