本文介紹如何在 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 vllmenv --python 3.12 --seed
# 載入 .env 虛擬環境
source vllmenv/bin/activate
# 使用 uv 安裝 vLLM
uv pip install vllm --torch-backend=auto
安裝完成後,測試 vllm 指令可正常執行:
# 測試 vllm 指令可正常執行
vllm --version
安裝 Hugging Face CLI 工具
若要使用一些需要特別授權的模型(例如 Llama),就會需要用到 Hugging Face CLI 工具,所以順便一起安裝:
# 安裝 Hugging Face CLI 工具
uv tool install huggingface-hub
安裝完成後,測試 hf 指令可正常執行:
# 測試 hf 指令可正常執行
hf --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 的時候,直接指定模型的相對路徑或絕對路徑:
# 自行下載模型
hf download Qwen/Qwen3-8B --local-dir qwen3-8b
# 指定模型的路徑
vllm serve Qwen3-8B
使用 vLLM 布署 LLM 模型
各種 LLM 模型的 vLLM 基本布署方式可以從 Hugging Face 的模型頁面上查看,但是它只提供最基礎的指令,沒有比較詳細的參數組合。
若要查詢更進階的 vLLM 布署方式,可以參考 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]
模型授權與 Access Token
有一些模型會需要特別的授權才能下載,像 Meta 的 Llama 系列模型,都會需要登入 Hugging Face 之後,先在模型頁面填寫申請表,提出申請並獲得授權後,才能下載,若沒有獲得授權,運行 vLLM 時就會出現類似這樣的錯誤訊息:
Access to model meta-llama/Llama-3.2-1B-Instruct is restricted. You must have access to it and be authenticated to access it. Please log in.
在命令列中我們可以使用 Hugging Face CLI 工具登入並取得權杖(token),再下載已獲得授權的模型:
# 登入 Hugging Face 並取得權杖
hf auth login
# 下載並運行已獲得授權的模型
vllm serve meta-llama/Llama-3.2-1B-Instruct
vLLM 運行多個模型
若要使用 vLLM 運行多個不同的模型,就要對每一個模型建立獨立的 vLLM 實體,如果希望使用兩張 GPU 卡,分別運行不同模型,可以使用以下指令:
# 第 1 張 GPU 卡運行 modelA
CUDA_VISIBLE_DEVICES=0 vllm serve --model modelA --gpu-memory-utilization=0.9 --port 8000
# 第 2 張 GPU 卡運行 modelB
CUDA_VISIBLE_DEVICES=1 vllm serve --model modelB --gpu-memory-utilization=0.9 --port 8001
這樣就會有兩個 vLLM 伺服器,分別傾聽 8000 與 8001 連接埠。
關於 vLLM 運行多個模型的議題,可以參考 vLLM 的論壇文章。
Docker 執行 vLLM
vLLM 也可以用 Docker 來執行,以下是一個用 Docker 執行 vLLM 的範例,採用 meta-llama/Llama-3.2-1B-Instruct 模型,而需要的權杖可以在 Hugging Face 網頁上產生後再貼過來:
# Hugging Face 權杖(token)
HF_TOKEN="YOUR_HF_TOKEN"
# 使用 Docker 執行 vLLM
docker run --runtime nvidia --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--env "HF_TOKEN=$HF_TOKEN" \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model meta-llama/Llama-3.2-1B-Instruct
關於 vLLM 更詳盡的 Docker 使用方式,可以參考 vLLM 官方文件。
常用模型與參數
🚧 施工中,請減速慢行。
以下是我個人常用的模型與參數。
使用一張 NVIDIA H100 的 GPU 卡執行 Qwen/Qwen3.8-27B 模型:
# 使用一張 NVIDIA H100 的 GPU 卡執行 Qwen/Qwen3.8-27B
vllm serve Qwen/Qwen3.8-27B \
--reasoning-parser qwen3 \
--enable-auto-tool-choice \
--tool-call-parser qwen3_xml \
--max-num-seqs 16
使用一張 NVIDIA H100 的 GPU 卡執行 Llama-3.3-70B-Instruct-AWQ 模型:
# 使用一張 NVIDIA H100 的 GPU 卡執行 Llama-3.3-70B-Instruct-AWQ
vllm serve kosbu/Llama-3.3-70B-Instruct-AWQ \
--max-num-seqs 16 \
--gpu-memory-utilization=0.98 \
--max-model-len 120000 \
--enable-auto-tool-choice \
--tool-call-parser llama3_json \
--quantization awq
待處理事項
- vLLM 細部參數說明。
- vLLM 最佳化與效能測試報告。
- 常用 vLLM 模型布署方案與參數組合。
