vLLM Ascend 外掛:把 vLLM 接到昇騰 NPU 的那一層
Community maintained hardware plugin for vLLM on Ascend
秒懂
- 它是什麼?
- vllm-ascend 是 vLLM 社群認可的硬體外掛,用硬體可插拔介面把 Ascend NPU 接進 vLLM。本文談它解決什麼問題、外掛機制怎麼運作、安裝路徑與版本對齊的實際成本,以及什麼情況下它不該是首選。
- 適合誰用?
- 已經有昇騰 NPU 且要跑 vLLM 的團隊,vllm-ascend 是社群推薦的接入方式,值得直接採用;若你手上只有 GPU、或需要外掛尚未列入支援矩陣的模型與量化格式,先不要把它排進時程。動手前先確認三件事:你的 NPU 型號與 CANN 版本是否落在目標版本的支援矩陣內、目標 vLLM 版本與 vllm-ascend 版本是否對齊、以及你要跑的模型屬於 Transformer-like、MoE、Embedding 還是多模態哪一類。
- 可以商用嗎?
- 可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫在最近一天內有新的提交。
- 用什麼語言寫的?
- 主要是 C++(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
它填補的是 vLLM 與昇騰之間的空白層
vLLM 本身是為 GPU 生態長出來的推理引擎,它的排程器、PagedAttention 與算子實作都預設了 CUDA 這一側的假設。要在昇騰 NPU 上跑同一套引擎,缺的不是模型程式碼,而是把裝置抽象、算子與記憶體管理接上去的那一層。vllm-ascend 就是這一層,README 對它的定位寫得很直白:社群維護的硬體外掛,用來在 Ascend NPU 上執行 vLLM。
它的目標讀者不是想研究 NPU 驅動的工程師,而是已經有昇騰機器、想沿用 vLLM 既有 API 與部署流程的人。README 提到可涵蓋的模型類型包括 Transformer-like、Mixture-of-Experts、Embedding 與多模態 LLM,但同時把細節推給支援矩陣頁面,這點很重要:這份 README 只承諾類別,不承諾個別模型。
值得注意的是這個專案掛在 vllm-project 組織底下,而不是某家廠商自己的 repo。README 說明它遵循 [RFC]: Hardware pluggable 的原則,把 Ascend 與 vLLM 的整合解耦成可插拔介面。這對採用者的實際意義是:升級路徑跟著 vLLM 的硬體外掛機制走,而不是跟著某個廠商的私有分支走。
硬體可插拔:外掛如何掛進 vLLM
README 引用的 [RFC]: Hardware pluggable 是理解這個專案架構的關鍵。vLLM 把硬體後端抽成外掛介面之後,特定硬體的實作就不必進主線程式碼,而是以獨立套件的形式在執行時被載入。vllm-ascend 走的就是這條路:它不 fork vLLM,而是作為外掛疊加上去。
這個設計的直接後果是版本耦合的方向變了。傳統 fork 模式下,你鎖的是 fork 的分支;外掛模式下,你鎖的是 vLLM 版本與外掛版本的配對。從釋出紀錄可以看出這個節奏:v0.23.0、v0.26.0rc1 這類版本號與 vLLM 的版本線是對應的,官方文件也按版本分頁發布,例如 docs.vllm.ai/projects/ascend/en/v0.23.0/。
另一個可從 repo 佈局確認的事實是主要語言標為 C++。這合理,因為外掛要接的是算子與裝置層,不是 Python 層的模型定義。對使用者的意涵是:遇到問題時,能改的通常是 Python 側的配置與呼叫方式,算子層的除錯則要回到 CANN 與 NPU 驅動那一側,兩者的排查路徑不重疊。
安裝與啟動:從官方指南進場
README 沒有把安裝步驟攤在首頁,而是每一版釋出都指向對應的官方指南。以最新一版為例,v0.26.0rc1 的公告寫的是「Please follow the official guide」,連結指向 docs.vllm.ai/projects/ascend/en/v0.26.0rc1/;v0.23.0 同理指向 .../en/v0.23.0/。這個安排本身就是使用說明:不要混用不同版本的安裝指令。
可從 README 確認的入口有幾個。支援矩陣在 docs.vllm.ai/projects/ascend/en/latest/user_guide/support_matrix/,這是決定「我的模型能不能跑」的第一站。社群支援走 Slack 的 #SIG-Ascend 頻道與 discuss.vllm.ai 的 vllm-ascend-support 版塊,另外有每週會議的報名連結。若你要在導入前評估社群活躍度,這三個入口比任何數字都直接。
README 也提到大型 Expert Parallelism 部署有獨立教學,在 v0.9.1 的文件路徑 tutorials/large_scale_ep.html 底下。這表示 EP 這條路線被當成獨立主題處理,而不是預設安裝流程的一部分。真要跑大規模 EP,就從那份教學進,不要從通用安裝頁推測。
版本對齊是這個外掛最硬的一道門檻
外掛模式的代價集中在版本管理上。從釋出節奏看,vllm-ascend 大致每月到每季推一個正式版,中間夾 release candidate:2026 年 9 月的 v0.26.0rc1、8 月的 v0.23.0、7 月的 v0.23.0rc1,再往前是 5 月的 v0.18.0、2 月的 v0.13.0,2025 年 12 月 v0.11.0、9 月 v0.9.1、5 月 v0.7.3。
這個節奏對採用者的意思是:你不能只鎖 vLLM 版本,還要鎖對應的 vllm-ascend 版本,並且確認兩者與 CANN、NPU 驅動的組合在支援矩陣內。三者只要有一項落後,就可能出現外掛載入失敗或算子缺失。這不是文件寫得不清楚,而是硬體外掛架構的固有成本。
選 rc 還是正式版也是一個要明說的取捨。v0.26.0rc1 是最新釋出,但標記為 release candidate;v0.23.0 是最近的正式版。README 對兩者都給了指標性的官方指南連結,沒有暗示 rc 不該用。生產環境該選哪個,取決於你能承受多少回歸風險,這點文件不會替你決定。
支援矩陣之外,README 沒有承諾的事
這份 README 在功能描述上相當克制。它說熱門開源模型可以跑,包括 Transformer-like、MoE、Embedding 與多模態 LLM,但把「詳細的支援模型與功能」全部指向支援矩陣。也就是說,首頁列的是類別,不是清單。任何「vllm-ascend 支援某某模型」的說法,都必須回到支援矩陣逐項核對,不能從 README 推論。
同樣需要保留的是效能相關的敘述。README 沒有給出吞吐、延遲或加速比的數字,也沒有與其他後端的對比。這不代表它慢,而是這份材料不足以支撐任何效能判斷。若你的導入決策取決於特定併發下的 token 吞吐,那份數字只能自己壓測得到,不能引用這裡的任何一句話。
還有一個容易被忽略的訊號:README 提到 2025 年 6 月上線的 User stories 頁面,首波涵蓋 LLaMA-Factory、verl、TRL、GPUStack,場景橫跨微調、評估、強化學習與部署。這說明整合面已經延伸到訓練後流程,而不只是單純的線上推理。但這些是使用案例的記錄,不是相容性保證,兩者不該混為一談。
什麼時候不該用這個外掛
最明顯的反例是硬體不對。這個外掛的存在前提就是 Ascend NPU,README 開頭即寫明要在 Ascend NPU 上執行 vLLM。如果你的機器是 GPU,這個專案對你沒有任何作用,直接使用 vLLM 主線即可,不需要經過任何外掛層。
第二種情況是模型或功能落在支援矩陣之外。README 只承諾類別層級的覆蓋,個別模型、量化格式或排程特性的支援狀態要看矩陣。當你要跑的模型不在矩陣內,外掛不會因為「它也是 Transformer」就自動可用,這條路當下就是不通的。
第三種情況是團隊無法承擔版本對齊的維護成本。外掛模式要求 vLLM 版本、外掛版本、CANN 與驅動四者同步,且專案約每季推正式版。如果你的環境凍結在舊版且短期不打算動,就得先確認那個舊版本組合是否仍有對應的文件與釋出可循,而不是假設舊版會持續被照顧。
與直接 fork vLLM 後端相比,差在哪裡
在硬體外掛機制出現之前,硬體廠商支援新裝置的常見做法是維護一份 vLLM 的 fork,把自己的後端直接改進程式碼裡。這條路的問題是同步成本:上游每次重構排程器或注意力實作,fork 都要重新合併,而且合併衝突往往落在最難驗證的裝置層。
vllm-ascend 選擇的是另一條路。README 明確說它遵循 Hardware pluggable 的 RFC,以硬體可插拔介面把 Ascend 與 vLLM 解耦。差別在於:fork 模式把差異藏在分支裡,外掛模式把差異放在一個獨立套件裡,由 vLLM 在執行時載入。前者你繼承整個引擎的歷史,後者你只繼承介面契約。
這個差異也反映在專案歸屬上。vllm-ascend 由 vLLM 社群在 2025 年 2 月建立 repo,README 稱它是社群推薦的 Ascend 後端支援方式。相較於廠商自建分支,社群 repo 意味著升級節奏與 vLLM 主線的發布更貼近,但同時也意味著功能優先級由社群與貢獻者決定,不是由單一廠商的排程決定。
維護成本、授權與導入前該驗的三件事
授權是 Apache-2.0,與 vLLM 生態的慣例一致,對商業部署與二次修改相對寬鬆。這裡只描述授權條款本身,不構成法律意見;若你要把外掛與自有的算子或函式庫一起散布,授權相容性仍應由法務確認。
維護成本主要來自版本對齊。外掛約每季推正式版,中間有 rc,而每個版本都對應一份獨立的官方文件路徑。這意味著升級不是改一個版本號,而是一次 vLLM、外掛、CANN 與驅動的聯合驗證。把它當成一般 Python 套件的升級來排程,通常會低估工作量。
導入前建議依序驗證三件事。第一,到支援矩陣頁面確認你的 NPU 型號、CANN 版本與目標 vllm-ascend 版本是否在同一組支援範圍內。第二,確認你要用的 vLLM 版本與外掛版本是否配對,並決定走正式版還是 rc。第三,確認你的模型落在哪一類,MoE 或多模態的部署路徑與一般 Transformer 不同,README 也把大型 Expert Parallelism 另立教學。這三項確認完,再進對應版本的官方安裝指南。
編輯結論
已經有昇騰 NPU 且要跑 vLLM 的團隊,vllm-ascend 是社群推薦的接入方式,值得直接採用;若你手上只有 GPU、或需要外掛尚未列入支援矩陣的模型與量化格式,先不要把它排進時程。動手前先確認三件事:你的 NPU 型號與 CANN 版本是否落在目標版本的支援矩陣內、目標 vLLM 版本與 vllm-ascend 版本是否對齊、以及你要跑的模型屬於 Transformer-like、MoE、Embedding 還是多模態哪一類。這三項沒對上,後面的安裝步驟再正確也跑不起來。
社群筆記