Transformers 4.40 性能升級:OpenAI GPT‑OSS 零建構核心、MXFP4 量化、平行化與更快載入
TL;DR
OpenAI 的 GPT‑OSS 模型現在在 Hugging Face 的 transformers 套件中得到完整支援,並加入一系列效能升級——包括可自動下載的零建構可執行核心、MXFP4 4 位元量化、張量與專家平行化、動態滑動視窗快取、持續批次處理以及更快的模型載入——讓開發者能在單一 GPU 或多 GPU 上更有效率地載入、執行與微調這些模型。
零建構核心(Zero‑Build Kernels)從 Hub 取得
結論: 可預先編譯的自訂核心可自動下載,省去建構時間的相依性,並為常見的 LLM 操作帶來最高 10 倍的加速。
transformers 現在整合了 kernels 套件,會在首次使用時從 Hugging Face Hub 取得二進位核心(例如 Liger RMSNorm、MegaBlocks MoE、FlashAttention 3)。使用者只要在載入模型時傳入 use_kernels=True 即可啟用:
from transformers import AutoTokenizer, AutoModelForCausalLM
import logging
logging.basicConfig(level=logging.INFO)
model_id = "openai/gpt-oss-20b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
dtype="auto",
device_map="auto",
use_kernels=True,
)
日誌輸出會顯示載入了哪些核心,例如 LigerRMSNorm 與 MegaBlocksMoeMLP。原文中的基準測試顯示這些核心在較大 batch size 時表現尤佳,但使用者仍應自行針對工作負載進行測試。
FlashAttention 3 搭配 Attention Sinks
結論: 啟用支援 attention sinks 的 FlashAttention 3 核心,可在 Hopper 系列 GPU 上降低延遲。
model = AutoModelForCausalLM.from_pretrained(
model_id,
dtype="auto",
device_map="auto",
attn_implementation="kernels-community/vllm-flash-attn3",
)
此核心相容於 NVIDIA Hopper GPU,並利用 GPT‑OSS 引入的 attention‑sink 功能。
MXFP4 4‑位元量化
結論: MXFP4 可將 120‑B 參數 GPT‑OSS 模型的 VRAM 使用量降低最多 80 GB,使其能在單一消費級 GPU 上執行,同時透過專用的 Triton 核心保持推論速度。
MXFP4 是什麼
MXFP4 採用 E2M1 4 位元浮點格式(1 位符號、2 位指數、1 位尾數),並結合 區塊式縮放(每 32 個元素共用一個比例因子)。此設計即使在尾數粗糙的情況下,也能保留動態範圍。
transformers 原生支援
套件內提供量化器 (quantizer_mxfp4.py) 與整合掛鉤 (integrations/mxfp4.py)。當模型的設定檔包含 "quant_method": "mxfp4" 時,會自動選擇 MXFP4 路徑。
from transformers import GptOssConfig
cfg = GptOssConfig.from_pretrained("openai/gpt-oss-120b")
print(cfg.quantization_config)
只要環境具備 accelerate、kernels、triton>=3.4,且 GPU 計算能力 ≥ 7.5,模型即會以 MXFP4 模式執行;否則會回退至 bfloat16,記憶體需求約為前者的四倍。
記憶體節省
原文圖 3 顯示 VRAM 使用情況:量化後的 20 B 模型佔約 16 GB,而未量化時約 64 GB。120 B 模型亦呈相同比例(≈80 GB vs. >300 GB)。
張量平行化(Tensor Parallelism, TP)
結論: TP 將張量切分至多個 GPU,讓超出單卡記憶體上限的模型在多卡節點上獲得更高吞吐量。
transformers 現在接受 tp_plan="auto" 參數於 from_pretrained,會自動選擇內建的切分策略。範例:
from transformers import PreTrainedTokenizerFast, GptOssForCausalLM
model_id = "openai/gpt-oss-120b"
tokenizer = PreTrainedTokenizerFast.from_pretrained(model_id)
model = GptOssForCausalLM.from_pretrained(
model_id,
tp_plan="auto",
dtype="auto",
).eval()
TP 在單節點且具備高速內部連結時表現最佳,且與僅負責記憶體放置的 device_map="auto" 不同。
專家平行化(Expert Parallelism, EP)
結論: EP 將 MoE(Mixture‑of‑Experts)中的專家分散至不同 GPU,與 TP 互補,進一步降低每張卡的計算負載。
透過 DistributedConfig 啟用 EP:
from transformers import DistributedConfig
model = GptOssForCausalLM.from_pretrained(
model_id,
distributed_config=DistributedConfig(enable_expert_parallel=True),
dtype="auto",
).eval()
啟用 EP 時會自動開啟 TP,兩者效益相加。
動態滑動視窗層與快取(Dynamic Sliding‑Window Layer & Cache)
結論: 新增的 DynamicSlidingWindowLayer 與 DynamicCache 在達到注意力視窗上限後停止 KV‑cache 成長,將混合注意力模型(如 GPT‑OSS)的快取記憶體減半。
此功能預設啟用;開發者亦可自行建立快取:
from transformers import AutoModelForCausalLM, AutoTokenizer, DynamicCache
model = AutoModelForCausalLM.from_pretrained(
"openai/gpt-oss-20b",
dtype="auto",
device_map="auto",
).eval()
cache = DynamicCache(config=model.config)
基準(圖 6)顯示長序列生成時記憶體與延遲皆有顯著改善。
持續批次處理與分頁注意力(Continuous Batching & Paged Attention)
結論: generate_batch 實作動態(持續)批次,透過在完成的槽位中補入新請求,使 GPU 持續忙碌,較靜態批次可提升每秒產生的 token 數。
此 API 為實驗性功能,主要供研究與評估使用,而非正式服務(正式服務可考慮 vLLM 或 SGLang)。原文提供參考腳本與基準,顯示相較於靜態批次可提升約 2 倍速度。
更快的模型載入
結論: transformers 現在會在每張 GPU 上預先分配一大塊記憶體,再一次性複製權重,省去先前成千上萬次的小型分配呼叫,顯著加速多十億參數模型的載入。
只要使用 device_map="auto" 或任何明確的 device map,此行為即自動生效,亦同樣惠及啟用 TP 的情況。
整體影響
結論: 透過將社群驅動的核心、MXFP4 量化與先進平行化策略直接整合進 transformers,Hugging Face 大幅降低了執行最先進 LLM 的硬體門檻,提升推論與微調速度,並提供一套統一的參考實作供其他工具套件(MLX、llama.cpp、vLLM)借鏡。
開發者現在可以:
- 使用 MXFP4 在免費等級的 Colab GPU 上載入 GPT‑OSS 20 B。
- 以單一
torchrun指令在 4 張 GPU 上擴展 GPT‑OSS 120 B。 - 無需手動編譯,即可自動下載核心。
- 為長上下文應用減少 KV‑cache 記憶體需求。
上述所有進展皆以開源程式碼形式發布於 transformers 倉庫,並在全文中提供詳細的 PR 連結與範例腳本。
主要資源
- GPT‑OSS 模型中心:https://huggingface.co/collections/openai/gpt-oss-68911959590a1634ba11c7a4
- Kernels 套件文件:https://huggingface.co/blog/hello-hf-kernels
- MXFP4 量化器:https://github.com/huggingface/transformers/blob/main/src/transformers/quantizers/quantizer_mxfp4.py
- 張量平行化指南:https://huggingface.co/docs/transformers/en/perf_infer_gpu_multi
- 持續批次範例:https://github.com/huggingface/transformers/blob/main/examples/pytorch/continuous_batching_simple.py
- 更快載入 PR:https://github.com/huggingface/transformers/pull/36380
快速上手
- 安裝最新的
transformers(≥ 4.40)並包含可選套件:pip install "transformers[torch,accelerate,triton,kernels]" - 選擇模型(例如
openai/gpt-oss-20b)。 - 啟用所需功能(
use_kernels=True、tp_plan="auto"、DistributedConfig(enable_expert_parallel=True))。 - 執行提供的基準腳本,驗證硬體上的速度與記憶體效益。
依照上述步驟,即可立即體驗 2025 年 9 月 Hugging Face 部落格文章中宣告的效能提升。
未來方向 部落格指出,這些整合僅是當前快照;套件將持續隨社群貢獻演進,加入更新的量化格式、更多核心後端,以及與服務堆疊(如 vLLM)更緊密的結合。
Sources
相關
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch