返回首頁

GitHub Repo

Transformers 提出 torchao 延遲匯入修補,避免提前初始化 CUDA 導致子程序失敗

Transformers 社群於 11 月 10 日提出修補,處理安裝 torchao 後,僅匯入模型工具模組就可能初始化 CUDA 的問題。提案尚未合併,作者已回報測試結果,但尚未驗證回報者使用的 PyTorch 2.15 環境。

prayitno from Los Angeles, USA · CC BY 2.0 · Image source
zh-Hant

Transformers 社群於 11 月 9 日回報一項依賴套件的匯入副作用:環境只要安裝 torchao,匯入 transformers.modeling_utils 就可能提前初始化 CUDA,使後續以 fork 建立、再使用 CUDA 的子程序失敗。回報者表示,問題出現在 vLLM 的持續整合測試,共用映像中的 torchao 讓未使用該量化功能的工作也受影響。問題回報

回報環境為 Transformers 5.22.0、torchao 0.18.0、PyTorch 2.15 與 Linux GPU。觸發鏈始於量化器自動載入模組:它匯入 torchao 量化器後,後者立即載入實驗性 safetensors 支援,間接觸發 GPU 檢查。回報附有最小重現,可比較匯入前後的 CUDA 初始化狀態;目前仍應將這項影響限定於已回報的版本組合。重現與原因說明

11 月 10 日提出的修補,將 flatten_tensor_state_dict 的匯入移到實際序列化使用的 get_state_dict_and_metadata() 方法,並加入獨立程序回歸測試,檢查匯入模型工具時不會載入 torchao 或初始化 CUDA。作者回報 30 項相關測試通過,INT8 safetensors 儲存與重載後輸出相同;驗證使用 PyTorch 2.14.1,尚未涵蓋 2.15,完整型別檢查也仍有未修改檔案的診斷。修補提案

技術上的關鍵是 GPU 執行環境的初始化時機。PyTorch 官方文件將父程序先初始化加速器、再 fork 引起的錯誤稱為 poison fork,並要求 CUDA 子程序採用 spawn 或 forkserver。延遲匯入可消除這條意外初始化路徑,部署端仍須檢查工作程序的啟動方式。對共用推論映像的團隊而言,這也顯示可選套件可能改變程序行為;接下來應追蹤提案審查、合併版本與原始環境的驗證結果。PyTorch 多程序文件

來源

  1. Transformers issue #50540:torchao 匯入導致 CUDA 初始化
  2. Transformers PR #50542:Fix eager torchao import initializing CUDA
  3. Multiprocessing best practices — PyTorch 2.15 documentation