返回首頁

模型訓練與最佳化

TRL 1.13 將分塊損失移回 Tensor Core,長上下文後訓練吞吐量最高增至 1.69 倍

Hugging Face 修正 `chunked_nll` 不必要的 FP32 轉型,並示範用八張 H100 對百萬 token 序列完成單步訓練。新版同時徹底移除舊 PPO 介面並提高多項相依套件版本,升級前須重新檢查訓練程式與數值表現。

Ken Fielding · CC BY-SA 3.0 · Image source
zh-Hant

Hugging Face 於 9 月 10 日發布 [TRL 1.13.0](https://github.com/huggingface/trl/releases),核心改善不是新演算法,而是修正預設 `chunked_nll` 損失路徑中的昂貴資料型別轉換。舊實作會在每個分塊把原本已是 BF16 的 hidden states 與 `lm_head` 權重轉成 FP32,令矩陣乘法離開 Tensor Core、改走 FP32 SIMT,並反覆建立大型輸出層副本。以詞彙量 248,320、hidden size 2,048、256 token 分塊在單張 H100 測試,前向加反向時間由 23.37 毫秒降至 3.86 毫秒,峰值記憶體由 5.99 GB 降至 3.03 GB。

這個六倍數字只描述單一核心操作;較具部署意義的端到端結果,是每張 GPU 吞吐量依模型與訓練方式提高約 1.20 至 1.69 倍。修正亦套用到每個分塊都要計算學生與教師輸出的蒸餾訓練。官方表示,在 Accelerate 混合精度下,新舊結果可逐位元一致,但其他精度設定、GPU 或自訂 autocast 範圍仍應自行回歸測試。

新版另提供可執行的百萬 token 訓練範例:Qwen3-8B 在八張 H100 上以 BF16、`chunked_nll`、每卡批次一筆處理 1,048,576 token,每步約 380 秒、每卡使用 56.2 GB。這證明單節點可以跑完整步驟,不代表一般模型可免費取得百萬上下文;範例仍限完整注意力、不能 packing,並依賴 gradient-checkpointing offload 與 YaRN RoPE。

相容性方面,`PPOTrainer`、`PPOConfig` 和 value-head 包裝器已從程式碼移除;`peft` 最低版本升至 0.13、DeepSpeed 升至 0.18.6,vLLM 0.19.0 也不再支援。工程團隊應把效能改善與遷移成本一起評估,尤其是仍釘選舊 PPO 工作流或自訂損失函式的專案。

來源

  1. TRL v1.13.0 release notes
  2. TRL 1.13.0 release summary