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,
)

日誌輸出會顯示載入了哪些核心,例如 LigerRMSNormMegaBlocksMoeMLP。原文中的基準測試顯示這些核心在較大 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)

只要環境具備 acceleratekernelstriton>=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)

結論: 新增的 DynamicSlidingWindowLayerDynamicCache 在達到注意力視窗上限後停止 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 連結與範例腳本。


主要資源


快速上手

  1. 安裝最新的 transformers(≥ 4.40)並包含可選套件:
    pip install "transformers[torch,accelerate,triton,kernels]"
    
  2. 選擇模型(例如 openai/gpt-oss-20b)。
  3. 啟用所需功能(use_kernels=Truetp_plan="auto"DistributedConfig(enable_expert_parallel=True))。
  4. 執行提供的基準腳本,驗證硬體上的速度與記憶體效益。

依照上述步驟,即可立即體驗 2025 年 9 月 Hugging Face 部落格文章中宣告的效能提升。


未來方向 部落格指出,這些整合僅是當前快照;套件將持續隨社群貢獻演進,加入更新的量化格式、更多核心後端,以及與服務堆疊(如 vLLM)更緊密的結合。

Sources

相關