Transformer 中的專家混合(MoEs)
Hugging Face 已徹底改造 transformers 函式庫,以提供對混合專家(MoE)架構的一等支援。此重新設計解決了 MoE 模型在檢查點儲存方式與硬體執行方式之間的根本不匹配,從而實現了顯著更快的權重載入、透過可插拔後端的更高效推論,以及透過專家平行化的可擴展分配。
MoE 基礎:容量 vs. 活躍參數
混合專家模型以一組稱為專家的可學習子網路取代密集前饋層。路由器會為每個 token 選擇少量的專家進行處理,將模型的總容量與推論成本解耦。
- Total Parameters: 決定模型的整體容量與品質。
- Active Parameters: 決定每個 token 的推論速度與計算成本。
例如,gpt-oss-20b 模型擁有 21B 總參數,但每個 token 只啟用約 3.6B 參數(使用 32 個專家中的 4 個)。這使得模型在保持 21B 參數系統品質的同時,能以 3.6B 參數模型的速度運行,在 M3 Ultra Mac 上達到約每秒 115 個 token。
權重載入重構與 WeightConverter
傳統的 transformers 權重載入假設檢查點張量與執行時參數之間是一對一的映射。MoE 檢查點通常會獨立序列化各個專家(例如,256 個獨立張量),但最佳化的執行時核心需要將專家打包成單一連續張量,以進行分組 GEMM 操作。
為了解決此問題,Hugging Face 透過 WeightConverter 抽象引入了 轉換管線。此舉將載入流程從簡單的逐鍵複製轉變為動態轉換:
MergeModulelist:將多個專家張量堆疊成單一連續張量。SplitModulelist:將打包的張量拆分回各個獨立的專家。- Lazy Materialization:載入器僅掃描一次鍵,並在依賴就緒時透過執行緒池實例化張量,降低記憶體峰值並避免重複掃描。
權重載入基準測試
使用單張 A100(80GB)上的 Qwen/Qwen1.5-110B-Chat 進行的基準測試顯示,v5 管線相較於 v4 有顯著的加速:
| 版本 | 策略 | 載入模式 | 時間 |
| :--- | :--- | :--- |
| v4.57.6 | device_map="auto" | Threadpool | 66.24s |
| v5 | device_map="auto" | Async (default) | 20.71s |
| v5 | TP | Async | 10.1s |
可插拔的專家後端
為了將專家計算與模型實作解耦,Hugging Face 引入了使用 @use_experts_implementation 裝飾器的專家後端系統。這使得模型能在執行時切換三種執行策略:
eager:對選取的專家進行迴圈;主要用於除錯與正確性驗證。batched_mm:使用torch.bmm為每個 token 複製專家權重;針對小批次與 GPU 密集工作負載進行最佳化。grouped_mm:使用torch._grouped_mm依專家 ID 排序 token,並執行單一分組 GEMM;針對大批次與記憶體受限環境進行最佳化。
專家平行化(EP)
專家平行化允許擁有數千億參數的模型透過在多個 GPU 之間分配專家來擴展。與標準張量平行化不同,每個裝置僅載入其分配到的專家子集(num_experts / num_devices)。
此功能透過 DistributedConfig(enable_expert_parallel=True) 實作,並依賴兩個核心元件:
GroupedGemmParallel:處理沿專家維度(dim=0)的權重分片。RouterParallel:將全域專家索引重新映射為本地索引,並使用 all-reduce 操作合併跨裝置的部分輸出。
使用 Unsloth 優化的 MoE 訓練
透過與 Unsloth 的合作,Hugging Face 利用專家後端抽象與 PyTorch 的 torch._grouped_mm API,結合自訂的 Triton 分組 GEMM 與 LoRA 核心,實現更快速的 MoE 訓練。這些最佳化提供了:
- MoE 訓練速度提升最高可達 12 倍。
- VRAM 使用量降低超過 35%。
- 上下文視窗長度約延長 6 倍。
- 整體速度提升 12 至 30 倍,相較於 v4
transformers實作。