在大型語言模型(LLM)的部署實務中,開發者經常面臨一個兩難的選擇:是要選擇開發門檻低、通用性強的 Hugging Face Transformers 庫,還是選擇為了極致效能而設計、但開發成本較高的 vLLM 原生實作。
vLLM 是一個高性能的推理引擎,它之所以快,是因為針對特定的模型架構手寫了高度優化的 CUDA 核心(Kernels)以及連續批處理(Continuous Batching)等技術。然而,這種做法的缺點是,每當有新模型推出時,工程師必須將該模型的架構重新在 vLLM 中實作一遍,才能發揮最大效能。
為了打破這個僵局,vLLM 引入了 Transformers Modeling Backend。簡單來說,這讓 vLLM 可以直接運行 Transformers 庫中的模型定義,而不需要手寫專屬的 vLLM 版本。
過去,這種通用後端的效能通常不如原生實作,因為它僅能優化最耗時的注意力機制(Attention)。但最新的更新改變了這一點,現在透過自動化的圖分析與代碼重寫,Transformers 後端的推理速度已經能與 vLLM 的原生實作持平,甚至在某些場景下更快。
實現原生速度的技術核心:動態圖分析與層融合
要讓通用代碼達到原生速度,關鍵在於層融合(Layer Fusion)。在深度學習中,將多個小的運算操作合併成一個大的 GPU 核心運算,可以大幅減少記憶體讀寫次數(Memory I/O),這是提升推理速度最有效的方法。
vLLM 現在利用 Torch FX 對模型進行靜態分析。Torch FX 是一個能將 PyTorch 模型轉換為圖結構(Graph)的工具,讓系統可以像分析流程圖一樣,搜尋模型中是否存在可以優化的特定模式。
一旦發現可優化模式,系統會利用 AST(Abstract Syntax Tree,抽象語法樹)來直接操縱源代碼。AST 是程式語言在編譯過程中的中間表示形式,透過它,vLLM 可以在運行時將原有的標準 PyTorch 操作,直接替換為 vLLM 專有的超高性能核心。
具體優化了哪些部分?
首先是專家並行(Expert Parallelism, EP)。對於 Mixture-of-Experts (MoE) 這種巨型模型,vLLM 能將多個分散的專家運算融合為單一的高效核心,大幅提升吞吐量。
其次是張量並行(Tensor Parallelism, TP)的優化。透過將多個線性層合併為 MergedColumnParallelLinear 或 QKVParallelLinear,vLLM 能更有效地在多張 GPU 之間分配運算壓力。
最重要的是,經過這種動態重寫的模型依然完全相容於 torch.compile 和 CUDA Graphs。這意味著模型不僅能享受層融合的快感,還能利用 PyTorch 的編譯優化來進一步降低延遲。
對工程實務的影響
對於 AI 工程師而言,這項更新帶來了三個核心好處。
第一,開發週期極大縮短。模型作者只需要在 Transformers 中定義好模型,就可以立即在 vLLM 中以最高速度運行,不再需要為了部署而重新寫一遍推理代碼。
第二,維持單一真相來源(Single Source of Truth)。以往訓練用一套代碼,推理用另一套 vLLM 代碼,這容易導致訓練與推理之間出現行為不一致的 Bug。現在,同一份 Transformers 代碼可以用於訓練、評估、強化學習採樣以及高效能推理。
第三,部署靈活性增加。只要在啟動 vLLM 時加上 --model-impl transformers 參數,就能在保持原生速度的前提下,嘗試各種不同的 Hugging Face 模型。
限制與注意事項
雖然這項技術非常強大,但目前仍有部分限制。首先,使用線性注意力機制(Linear Attention)的模型暫時不支援。其次,如果模型代碼是直接放在 Hugging Face Hub 上的自定義腳本,且未遵循標準的 Transformers 實作規範,則可能無法被正確分析與優化。
總結來說,vLLM 透過 Torch FX 與 AST 的結合,將通用性與高性能這兩個互斥的目標統一了起來,讓 LLM 的部署流程從手動移植轉向自動優化。
來源:huggingface.co
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。