transformers 函式庫已成為機器學習領域參考性的模型函式庫。它透過一致的 API 支援超過 450 種架構,其主要設計目標是讓模型實作能夠自給自足且易於理解。透過 transformers 的程式碼,貢獻者可以輕鬆學習架構的運作方式,然後將其移植到 vLLM、SGLang、MLX、llama.cpp 等其他框架。

我們已完全擁抱這個在生態系統中的角色,並投入大量精力使其變得更容易。去年,將 transformers 整合為 vLLM 的模型後端是朝這個方向邁出的一大步。這使得模型開發者能夠在 vLLM 內部執行 transformers 模型(包括 LLM 和 VLM),而無需進行任何移植。transformers 提供模型程式碼,vLLM 則提供極度優化的推論技術,例如連續批次處理和客製化注意力核心。

現在,這項整合變得更好了!我們將 vLLM 的 transformers 模型後端與 vLLM 的手寫原生實作進行了比較,測試了三種截然不同的 Qwen3 模型。這些模型包括單一 GPU 上的 4B 密集模型、張量平行化下的 32B 密集模型,以及在相同 8xH100 節點上進行資料與專家平行化的 235B 參數 FP8 專家混合模型。

結果顯示,transformers 模型後端現在在所有這些測試中都達到或超越了原生吞吐量。透過 transformers 模型後端執行任何 Hugging Face 模型,只需一個簡單的旗標 --model-impl transformers。它與常見的平行化選項相容,因此您的服務設定無需任何改變。

例如,您可以這樣執行 Qwen3-4B 密集模型在單一 GPU 上:vllm serve Qwen/Qwen3-4B --model-impl transformers。若要在 2 個 GPU 上進行張量平行化執行 Qwen3-32B 密集模型,則使用:vllm serve Qwen/Qwen3-32B --model-impl transformers --tensor-parallel-size 2。

對於 8 個 GPU 上的 Qwen3-235B-A22B-FP8 MoE 模型,則使用:vllm serve Qwen/Qwen3-235B-A22B-FP8 --model-impl transformers --data-parallel-size 8 --enable-expert-parallel。

目前不支援使用線性注意力的模型,但很快就會支援。程式碼位於 Hub 儲存庫中的客製化模型可能無法運作,因為它們可能未依規範編寫。

我們在三種條件下比較了每個模型,除了程式碼路徑外,所有條件都相同。這些條件包括:native(--model-impl vllm,vLLM 的手寫模型,作為基準)、after(帶有 PR 的 --model-impl transformers),以及 before(不帶 PR 的 --model-impl transformers)。完整的、可重現的執行器可在 gist 中取得:benchmark.sh。

vLLM 的 transformers 模型後端過去主要關注注意力機制作為推論的瓶頸。透過在執行時插入 vLLM 的注意力實作,我們可以讓 transformers 模型在 vLLM 引擎內部高效運行。然而,部署還有許多面向,只有客製化移植才能針對這些面向提取最大的推論效能。

跨 GPU 的平行化、編譯、融合核心等許多因素,都促成了利用硬體實現超高速推論。過去,一個新模型通常需要為 transformers 整合一次,然後再為 vLLM 進行客製化優化整合一次。當模型開發者追求絕對最佳效能時,他們仍然需要編寫客製化的 vLLM 實作。

現在,一旦新模型整合到 transformers 中,就可以立即在 vLLM 中使用,並達到原生 vLLM 實作的速度。vLLM 的 transformers 模型後端的最新迭代,會針對相容的架構,在執行時動態應用推論專用的層融合,以匹配客製化程式碼實作的速度。

vLLM 的 transformers 模型後端現在使用 torch.fx 對模型的圖進行靜態分析。這個過程會搜尋已知的可優化模式。識別出任何模式後,它會使用 ast(抽象語法樹)來操作原始碼,並就地重寫一些操作。

我們能透過這種方式實現什麼?首先是融合操作,這些操作是多對一映射到(超)優化的 vLLM 核心,例如用於專家混合模型 (MoE) 中專家平行化 (EP) 的核心。主要的融合操作還有 vLLM 的 MergedColumnParallelLinear 和 QKVParallelLinear。

這些區塊使我們能夠推斷張量平行化 (TP) 的平行計畫。如果解碼器區塊列表易於識別,也可以推斷管線平行化 (PP) 計畫。

經過操作的模型仍然可以完全(torch)編譯,並像專用的 vLLM 模型實作一樣,透過 torch.compile 和 CUDA Graphs 處理。與 vLLM 模型實作不同的是,Transformers 模型實作可以用於訓練。因此,您可以將相同的模型程式碼用於訓練、評估和強化學習的推演。

如上所示,這使得相容模型能夠達到原生 vLLM 推論速度,而無需編寫任何程式碼來優化模型以進行推論。我們正在撰寫一篇詳細的部落格文章,深入探討這些優化的推論方法,並詳細解釋我們如何操作模型以適應它們。