企業(yè)級模型推理部署工具vllm使用指南 - 部署最新deepseek-v3-0324模型
vLLM(Virtual Large Language Model)是由加州大學(xué)伯克利分校團隊開發(fā)的高性能大模型推理框架,其核心特點圍繞顯存優(yōu)化、高吞吐量、靈活性和易用性展開。
對比 ollama 作為個人開發(fā)者部署模型工具而言,vLLM 專注于高并發(fā)請求和大規(guī)模生產(chǎn)環(huán)境,適用于企業(yè)級應(yīng)用和需要高效推理的場景。vLLM 通過優(yōu)化內(nèi)存管理和并發(fā)處理,適合處理高負載的生產(chǎn)環(huán)境 。
一、vLLM 核心優(yōu)勢
高性能相關(guān)
1. PagedAttention 技術(shù)(分頁注意力機制)
核心創(chuàng)新:借鑒操作系統(tǒng)虛擬內(nèi)存分頁機制,將注意力計算中的Key/Value 緩存(KV Cache)劃分為固定大小的“頁”,動態(tài)分配顯存,顯著減少內(nèi)存碎片化。
- 傳統(tǒng)問題:傳統(tǒng)框架需為每個請求預(yù)分配連續(xù)顯存空間,導(dǎo)致利用率低(僅 20%-40%)。
- vLLM 解決方案:按需分配顯存頁,支持動態(tài)擴展,顯存利用率提升至接近 100%。
例如,LLaMA-7B 模型顯存占用可從 14GB 壓縮至 4GB(使用 INT4 量化)。 支持長上下文(如 128K 或 10M token)的高效處理,減少顯存浪費。
2. 連續(xù)批處理(Continuous Batching)
動態(tài)合并請求:實時合并多個推理請求,避免靜態(tài)批處理的等待延遲,最大化 GPU 利用率。
吞吐量提升:
- 相比 Hugging Face Transformers,吞吐量提升 24 倍(如 LLaMA-7B 模型)。
- 在高并發(fā)場景下,吞吐量可達傳統(tǒng)框架的 5-10 倍。
3. 量化支持(模型壓縮與加速)
兼容主流量化方法:支持 GPTQ、AWQ、SqueezeLLM、FP8 KV Cache 等,顯著降低顯存占用和計算開銷。
量化效果:
- INT4 量化:將 7B 模型顯存需求從 14GB 壓縮至 4GB,同時保持精度損失<1%。
- 適用于消費級顯卡(如 RTX 4090)部署 7B-13B 模型。
4. 高性能與分布式推理
多 GPU 張量并行:支持分布式部署,例如在 4 塊 A100 GPU 上運行 70B 參數(shù)模型。
CUDA 優(yōu)化:使用 CUDA/HIP 圖(CUDA Graphs)加速模型執(zhí)行。 -高性能 CUDA 內(nèi)核優(yōu)化,減少計算延遲。
易用性相關(guān)
5. 易用性與兼容性
與 Hugging Face 無縫集成:支持 50+主流模型(如 LLaMA、Qwen、Mistral、XVERSE 等)。
OpenAI API 兼容:可直接替換 OpenAI 接口,提供標(biāo)準(zhǔn) API 服務(wù)(如/v1/completions)。
靈活的部署選項:支持流式輸出、前綴緩存、多 LoRA 適配及離線批量推理。
6. 解碼算法多樣性
并行采樣(Parallel Sampling):單次前向傳播生成多個輸出(如多種回答),降低計算成本。
波束搜索(Beam Search):提升生成文本的準(zhǔn)確性和多樣性。
自定義解碼策略:支持根據(jù)場景選擇最優(yōu)解碼算法。
二、部署環(huán)境準(zhǔn)備
vLLM 是一個 Python 庫,包含預(yù)編譯的 C++ 和 CUDA (12.1) 二進制文件。
依賴環(huán)境
- 操作系統(tǒng):Linux
- Python:3.8 - 3.12
- GPU:計算能力 7.0 或更高(例如 V100、T4、RTX20xx、A100、L4、H100 等)
ps: vLLM 只能在 Linux 系統(tǒng)上才能完全運行。
使用 pip 安裝
可以使用 python 的 pip 工具安裝 vLLM:
# (Recommended) Create a new conda environment.
#(推薦)創(chuàng)建一個新的 conda 環(huán)境。
conda create -n myenv python=3.10 -y
conda activate myenv
# Install vLLM with CUDA 12.1.
# 安裝帶有 CUDA 12.1 的 vLLM。
pip install vllm
使用 docker 安裝
vLLM 提供了一個官方 Docker 鏡像用于部署。該鏡像可用于運行與 OpenAI 兼容服務(wù)器,并且可在 Docker Hub 上以 vllm/vllm-openai 的形式獲取。
docker run --runtime nvidia --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--env "HUGGING_FACE_HUB_TOKEN=<secret>" \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model mistralai/Mistral-7B-v0.1
使用 ipc=host 標(biāo)志或 --shm-size 標(biāo)志來允許容器訪問主機的共享內(nèi)存。 vLLM 使用 PyTorch,而 PyTorch 在底層使用共享內(nèi)存在進程之間共享數(shù)據(jù),特別是在張量并行推理中。
默認(rèn)情況下,為實現(xiàn)最廣泛分發(fā),vLLM 將為所有 GPU 類型進行構(gòu)建。如果您只是針對機器運行的當(dāng)前 GPU 類型進行構(gòu)建,則可以為 vLLM 添加參數(shù) --build-arg torch_cuda_arch_list= "" 來查找當(dāng)前 GPU 類型并為其構(gòu)建。
三、模型下載啟動
這里用 DeepSeek 最新模型 V3-0324 模型下載來給大家作為參考。
圖片
在 huggingface 搜索 deepseek-ai/DeepSeek-V3-0324 即可找到 deepseek v3 的最新模型,
點擊 Use this model 即可找到下載模型命令,
圖片
在 vllm 種,我們要下載模型并使用其中一個模型來啟動服務(wù)器,請使用 vllm serve 命令,例如:
vllm serve "deepseek-ai/DeepSeek-V3-0324"
安裝并啟動后,服務(wù)啟動在 http://localhost:8000/。
分布式推理和服務(wù)
vLLM 支持分布式張量并行推理和服務(wù)。目前,我們支持 Megatron-LM 的張量并行算法。我們還支持將管道并行作為在線服務(wù)的測試版功能。我們使用 Ray 或 python 的原生多進程來管理分布式運行時。在單節(jié)點部署時可以使用多進程,多節(jié)點推理目前需要 Ray。
這也是 vllm 對比 ollama 的核心優(yōu)勢。能有效地利用多核 CPU 和 GPU 資源,顯著提升 LLM 的推理速度
單節(jié)點多 GPU 部署
要運行多 GPU 服務(wù),在啟動服務(wù)器時傳入張量并行 --tensor-parallel-size 參數(shù)。例如要在 4 個 GPU 上運行 API 服務(wù)器:
# 設(shè)置張量并行(需多GPU)
vllm serve "deepseek-ai/DeepSeek-V3-0324" \
--tensor-parallel-size 4 \ # 根據(jù)GPU數(shù)量調(diào)整
多節(jié)點多 GPU 部署
可以將張量并行與管道并行結(jié)合使用。張量并行大小是每個節(jié)點要使用的 GPU 數(shù)量,管道并行大小是要使用的節(jié)點數(shù)量.例如,如果 2 個節(jié)點中有 8 個 GPU(每個節(jié)點 4 個 GPU),則可以將張量并行大小設(shè)置為 4,將管道并行大小設(shè)置為 2。
vllm serve "deepseek-ai/DeepSeek-V3-0324" \
--tensor-parallel-size 4 \ # 根據(jù)GPU數(shù)量調(diào)整
--pipeline-parallel-size 2 # 根據(jù)節(jié)點數(shù)量調(diào)整
關(guān)鍵參數(shù)說明
參數(shù) | 說明 |
| GPU 張量并行度,需與 GPU 數(shù)量匹配(如 4 卡設(shè)為 4)。 |
| 最大批量請求大小,默認(rèn) 16,可調(diào)高以提升吞吐。 |
| 磁盤交換空間,避免顯存溢出(如設(shè)為 20GiB)。 |
| 啟用異步執(zhí)行,減少等待時間。 |
更多關(guān)于多節(jié)點多 GPU 部署的信息可以參考官方文檔:https://docs.vllm.ai/en/stable/serving/distributed_serving.html
四、跟 vLLM 推理服務(wù)交互
通過 python 代碼交互
服務(wù)器運行后,可以通過 python 代碼調(diào)用其 API:
from openai import OpenAI
client = OpenAI(base_url='http://localhost:3000/v1', api_key='na')
# Use the following func to get the available models
# model_list = client.models.list()
# print(model_list)
chat_completion = client.chat.completions.create(
model="deepseek-ai/DeepSeek-V3-0324",
messages=[
{
"role": "user",
"content": "Tell me something about large language models."
}
],
stream=True,
)
for chunk in chat_completion:
print(chunk.choices[0].delta.content or"", end="")
通過 cli 交互
curl -X POST "http://localhost:8000/v1/chat/completions" \
-H "Content-Type: application/json" \
--data '{
"model": "deepseek-ai/DeepSeek-V3-0324",
"messages": [
{
"role": "user",
"content": "What is the capital of France?"
}
]
}
五、總結(jié)
通過本文,你已掌握 vLLM 從環(huán)境配置到高性能推理服務(wù)部署的全流程。vLLM 憑借其靈活性和高效性,成為大模型落地的首選工具。無論是本地開發(fā)還是云服務(wù)器部署,只需根據(jù)硬件資源調(diào)整參數(shù),即可快速實現(xiàn)高并發(fā)、低延遲的推理服務(wù)。