返回首頁

GitHub Repo

Transformers 被回報快取卸載改變 Qwen3.8 輸出,異常始於首次重用

一份附最小重現程式的回報顯示,混合注意力模型在預填充正常後,下一步輸出仍可能偏移。問題尚未獲維護者確認,凸顯顯存最佳化也需驗證多步數值一致性。

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

9 月 19 日,Hugging Face Transformers 收到一份混合模型快取異常回報:Qwen3.8-27B 啟用 CPU 卸載後,第一次重用快取便出現不同的下一個 token。回報附最小重現程式,環境為 Transformers 5.17.0、PyTorch 2.14.0、單張 RTX PRO 6000 Blackwell,使用 BF16 與 SDPA。[問題回報](https://github.com/huggingface/transformers/issues/48947)

快取卸載原本是以傳輸時間換取顯存:大部分層的歷史狀態放在 CPU,計算時預取下一層,用完再移回。官方文件將它列為顯存不足時的選項,並允許手動建立 `DynamicCache(offloading=True)`。工程上應檢查的除了吞吐量,還包括跨裝置搬移後的輸出一致性。[快取文件](https://huggingface.co/docs/transformers/v5.17.0/en/kv_cache)

回報中的兩組輸入各有 4,096 個隨機 token。首次預填充輸出完全相同,但下一次前向運算的 logits 最大絕對差達 2.117,最高分 token 也不同。這讓只檢查預填充的測試留下盲點:模型可正常啟動、顯存用量也下降,生成結果卻已改變。這些數字來自提交者,尚非獨立重測結果。[測試程式與輸出](https://github.com/huggingface/transformers/issues/48947)

混合架構增加了驗證範圍。模型設定列出 48 層線性注意力與 16 層完整注意力;對照該版原始碼,線性層保存卷積與循環狀態,完整注意力層則保存鍵值張量。因此,單獨驗證傳統 KV 張量的搬移,不足以涵蓋所有狀態;但目前仍不能據此認定哪一類狀態出了問題。[模型設定](https://huggingface.co/Qwen/Qwen3.8-27B/blob/main/config.json)、[快取實作](https://raw.githubusercontent.com/huggingface/transformers/v5.17.0/src/transformers/cache_utils.py)

重現程式後續採貪婪解碼,一旦首個 token 分歧,兩條路徑便會收到不同輸入,所以之後擴大的差值不能全歸因於卸載。依此設計,進一步定位宜固定每一步輸入,再逐層比較狀態及輸出,以分離快取誤差與生成路徑分歧。驗收也應固定模型修訂、精度、注意力後端與輸入長度,保留未卸載基線;只比較最終文字,容易混淆數值誤差與生成變化,保留每步分數較能縮小調查範圍。這是依重現程式提出的驗證建議。

截至查核,問題仍開啟,未見維護者確認或修補連結。部署者可先把多步輸出一致性加入卸載驗收,追蹤後續重現與修補測試;現有證據只涵蓋上述組合,不能推廣成所有模型或所有卸載模式都受影響。[追蹤狀態](https://github.com/huggingface/transformers/issues/48947)

來源

  1. Transformers Issue #48947:混合模型首次重用卸載快取後的 logits 異常
  2. Transformers 5.17.0:Cache strategies
  3. Qwen3.8-27B 模型設定
  4. Transformers v5.17.0 cache_utils.py