本文介紹如何在 Ubuntu Linux 中安裝、設定與使用 vLLM 大型語言模型推論框架,安裝各種本地端模型,進行正式環境的效能調校與布署。

vLLM 是一套開放原始碼的 LLM 推理服務引擎框架,使用方式簡單、速度快、吞吐量高、延遲低,適合用於大規模運算的的正式服務環境,可有效利用 GPU 的所有運算能力。

安裝 uv 套件管理程式

uv 是一種用 Rust 開發的 Python 套件管理工具,比傳統的 pip 還要快十倍至百倍。參考 uv 官方網站的說明進行安裝:

# 安裝 uv 套件管理工具
curl -LsSf https://astral.sh/uv/install.sh | sh

安裝好之後,測試 uv 指令可正常執行:

# 測試 uv 指令可正常執行
uv --version

安裝 vLLM 框架

參考 vLLM 官方的說明文件,安裝 vLLM 框架:

# 在目前目錄下建立 .venv 虛擬環境
uv venv --python 3.12 --seed

# 載入 .env 虛擬環境
source .venv/bin/activate

# 使用 uv 安裝 vLLM
uv pip install vllm --torch-backend=auto

安裝完成後,測試 vllm 指令可正常執行:

# 測試 vllm 指令可正常執行
vllm --version

vLLM 模型存放位置

vLLM 預設會把下載的模型放在 Hugging Face 預設的快取目錄 ~/.cache/huggingface/hub/,如果家目錄的磁碟空間不夠大,可以參考 vLLM 環境變數的文件,更改 vLLM 的模型存放位置:

# 大量儲存空間
export LARGE_STORAGE="/mnt/data/gtwang"

# 設定 Hugging Face 資料存放目錄
export HF_HOME="${LARGE_STORAGE}/hf_home"

# 設定 vLLM 的快取目錄
export VLLM_CACHE_ROOT="${LARGE_STORAGE}/vllm_cache"

另一種方式是自行下載模型,在執行 vLLM 的時候,直接指定模型的相對路徑或絕對路徑:

# 安裝 Hugging Face CLI 工具
uv tool install huggingface-hub

# 自行下載模型
hf download Qwen/Qwen3-8B --local-dir qwen3-8b

# 指定模型的路徑
vllm serve Qwen3-8B

布署 LLM 模型

若要使用 vLLM 布署常見的 LLM 模型,可以參考 vLLM Recipes 的資訊,上面有針對各種模型提供建議的 GPU 卡、模型變體與 vLLM 參數,但我發現它建議的參數不一定是正確的,詳細的參數配置還是要自己看過一次。

Qwen/Qwen3.8-27B 來說,使用一張 NVIDIA H100 的 GPU 卡,依它預設的 vLLM 參數下去跑會出現這樣的錯誤訊息:

ValueError: max_num_seqs (1024) exceeds available Mamba cache blocks (393). Each decode sequence requires one Mamba cache block, so CUDA graph capture cannot proceed. Please lower max_num_seqs to at most 393 or increase gpu_memory_utilization.

要把 max_num_seqs 降為 393 以下才能正常執行,例如降到 256

# 使用一張 NVIDIA H100 的 GPU 卡執行 Qwen/Qwen3.8-27B 的建議 vLLM 參數
vllm serve Qwen/Qwen3.8-27B \
  --tensor-parallel-size 1 \
  --reasoning-parser qwen3 \
  --mm-encoder-tp-mode data \
  --enable-auto-tool-choice \
  --tool-call-parser qwen3_coder \
  --max-num-seqs 256

執行之後 vLLM 預設會傾聽 8000 連接埠,提供相容於 OpenAI API 的介面,我們可以透過 curl 指令做一些簡單的測試,例如查詢目前 vLLM 提供的模型:

# 查詢目前 vLLM 提供的模型
curl http://localhost:8000/v1/models

{“object”:“list”,“data”:[{“id”:“Qwen/Qwen3.8-27B”,“object”:“model”,“created”:1788959822,“owned_by”:“vllm”,“root”:“Qwen/Qwen3.8-27B”,“parent”:null,“max_model_len”:262144,“permission”:[{“id”:“modelperm-9f290c253deb989c”,“object”:“model_permission”,“created”:1788959822,“allow_create_engine”:false,“allow_sampling”:true,“allow_logprobs”:true,“allow_search_indices”:false,“allow_view”:true,“allow_fine_tuning”:false,“organization”:"*",“group”:null,“is_blocking”:false}]}]}[0.008s]

運行多個模型

若要使用 vLLM 運行多個不同的模型,就要對每一個模型建立獨立的 vLLM 實體,如果希望使用兩張 GPU 卡,分別運行不同模型,可以使用以下指令:

# 第 1 張 GPU 卡運行 modelA
CUDA_VISIBLE_DEVICES=0 vllm serve --model modelA --gpu-memory-utilization=0.5 --port 8000

# 第 2 張 GPU 卡運行 modelB
CUDA_VISIBLE_DEVICES=1 vllm serve --model modelB --gpu-memory-utilization=0.5 --port 8001

這樣就會有兩個 vLLM 伺服器,分別傾聽 80008001 連接埠。

關於 vLLM 運行多個模型的議題,可以參考 vLLM 的論壇文章

待處理事項

  • vLLM 細部參數說明。
  • vLLM 最佳化與效能測試報告。
  • 常用 vLLM 模型布署方案與參數組合。
  • Docker 快速布署。