返回首頁

GitHub Repo

Transformers 社群回報 ZeRO-3 載入重複工作,各程序可能讀取並轉換完整檢查點

10 月 11 日的 Transformers 開發版回報指出,啟用 ZeRO-3 後,各程序仍可能重複載入完整檢查點,增加啟動階段的資源壓力。案例附有雙裝置最小重現與局部修補結果,但尚無正式修補或完整記憶體量測。

Andrew Wippler from Lancaster, USA · CC BY 2.0 · Image source
zh-Hant

Transformers 社群於 10 月 11 日提出一則分散式模型載入回報:即使 DeepSpeed ZeRO-3 已將模型參數分片,from_pretrained() 仍可能讓每個程序讀取完整檢查點,並重複執行權重轉換。案例使用 Transformers 5.19.0.dev0 的指定提交、PyTorch 2.10.0 與 DeepSpeed 0.18.4,目前議題仍開放,未列出關聯修補 PR。原始回報

這涉及兩種不同的記憶體生命週期。ZeRO-3 分割的是訓練中的參數、梯度及最佳化器狀態;官方文件說明,參數會在前向與反向運算時自動聚合及重新分片。因此,不能直接把訓練狀態的分片效果,當成檢查點載入階段的記憶體保證。DeepSpeed 文件

回報者以隨機初始化的雙層 Qwen3 MoE 建立三個 safetensors 分片,再用兩個程序載入,不需下載預訓練模型或執行訓練。函式計數顯示,兩個 rank 各自讀取三個權重檔並執行一次轉換;只有後續參數寫入限於 rank 0。回報將問題指向非量化 ZeRO-3 載入分支,並提出由 rank 0 集中讀取、轉換,再分發必要資訊的方向。重現與程式路徑分析

對大型模型微調而言,這項回報提示工程師應另行監測啟動時的主機記憶體與載入時間。這是依載入機制推導的實務影響,尚不能據此宣稱記憶體按程序數倍增:最小案例正常完成,計數也不等於實體磁碟流量,記憶體映射與頁面快取都會影響結果。

回報者表示局部修補可讓非零 rank 的讀取與轉換計數歸零,並檢查參數及持久緩衝區的一致性;仍需維護者審查與更廣泛驗證。後續應關注多節點同步、緩衝區分發,以及正式版本是否受影響。排查時也應確認檔案格式:Hugging Face 文件指出,DeepSpeed 原生分片檢查點不能直接交給 from_pretrained(),避免把格式問題與此次重複載入混為一談。檢查點文件

來源

  1. ZeRO-3: from_pretrained reads and converts the full checkpoint on every rank
  2. DeepSpeed ZeRO — Transformers documentation
  3. ZeRO — DeepSpeed documentation