使用 vLLM 提供 LLM 服務
利用 vLLM 的 PagedAttention 和連續批處理技術,以高吞吐量提供大型語言模型(LLM)服務。適用於部署生產級 LLM API、優化推理延遲/吞吐量,或在 GPU 顯存有限的情況下提供服務。支持兼容 OpenAI 的端點、量化(GPTQ/AWQ/FP8)以及張量並行。
技能元數據
| 來源 | 捆綁包(默認安裝) |
| 路徑 | skills/mlops/inference/vllm |
| 版本 | 1.0.0 |
| 作者 | Orchestra Research |
| 許可證 | MIT |
| 依賴項 | vllm, torch, transformers |
| 標籤 | vLLM, Inference Serving, PagedAttention, Continuous Batching, High Throughput, Production, OpenAI API, Quantization, Tensor Parallelism |
參考:完整 SKILL.md
以下是 Hermes 在觸發此技能時加載的完整技能定義。這是技能激活時代理所看到的指令。
vLLM - 高性能 LLM 服務
快速開始
vLLM 通過 PagedAttention(基於塊的 KV 緩存)和連續批處理(混合預填充/解碼請求),實現了比標準 transformers 庫高出 24 倍的吞吐量。
安裝:
pip install vllm
基本離線推理:
from vllm import LLM, SamplingParams
llm = LLM(model="meta-llama/Llama-3-8B-Instruct")
sampling = SamplingParams(temperature=0.7, max_tokens=256)
outputs = llm.generate(["Explain quantum computing"], sampling)
print(outputs[0].outputs[0].text)
兼容 OpenAI 的服務器:
vllm serve meta-llama/Llama-3-8B-Instruct
# Query with OpenAI SDK
python -c "
from openai import OpenAI
client = OpenAI(base_url='http://localhost:8000/v1', api_key='EMPTY')
print(client.chat.completions.create(
model='meta-llama/Llama-3-8B-Instruct',
messages=[{'role': 'user', 'content': 'Hello!'}]
).choices[0].message.content)
"
常見工作流
工作流 1:生產 API 部署
複製此清單並跟蹤進度:
Deployment Progress:
- [ ] Step 1: Configure server settings
- [ ] Step 2: Test with limited traffic
- [ ] Step 3: Enable monitoring
- [ ] Step 4: Deploy to production
- [ ] Step 5: Verify performance metrics
步驟 1:配置服務器設置
根據模型大小選擇配置:
# For 7B-13B models on single GPU
vllm serve meta-llama/Llama-3-8B-Instruct \
--gpu-memory-utilization 0.9 \
--max-model-len 8192 \
--port 8000
# For 30B-70B models with tensor parallelism
vllm serve meta-llama/Llama-2-70b-hf \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.9 \
--quantization awq \
--port 8000
# For production with caching and metrics
vllm serve meta-llama/Llama-3-8B-Instruct \
--gpu-memory-utilization 0.9 \
--enable-prefix-caching \
--enable-metrics \
--metrics-port 9090 \
--port 8000 \
--host 0.0.0.0
步驟 2:使用有限流量進行測試
在生產環境運行之前進行負載測試:
# Install load testing tool
pip install locust
# Create test_load.py with sample requests
# Run: locust -f test_load.py --host http://localhost:8000
驗證首令牌時間(TTFT)< 500ms 且吞吐量 > 100 req/sec。
步驟 3:啟用監控
vLLM 在端口 9090 上暴露 Prometheus 指標:
curl http://localhost:9090/metrics | grep vllm
需要監控的關鍵指標:
vllm:time_to_first_token_seconds- 延遲vllm:num_requests_running- 活躍請求數vllm:gpu_cache_usage_perc- KV 緩存利用率
步驟 4:部署到生產環境
使用 Docker 進行一致性的部署:
# Run vLLM in Docker
docker run --gpus all -p 8000:8000 \
vllm/vllm-openai:latest \
--model meta-llama/Llama-3-8B-Instruct \
--gpu-memory-utilization 0.9 \
--enable-prefix-caching
步驟 5:驗證性能指標
檢查部署是否達到目標:
- TTFT < 500ms(針對短提示詞)
- 吞吐量 > 目標 req/sec
- GPU 利用率 > 80%
- 日誌中無 OOM(內存溢出)錯誤
工作流 2:離線批量推理
適用於無需服務器開銷的大數據集處理。
複製此清單:
Batch Processing:
- [ ] Step 1: Prepare input data
- [ ] Step 2: Configure LLM engine
- [ ] Step 3: Run batch inference
- [ ] Step 4: Process results
步驟 1:準備輸入數據
# Load prompts from file
prompts = []
with open("prompts.txt") as f:
prompts = [line.strip() for line in f]
print(f"Loaded {len(prompts)} prompts")
步驟 2:配置 LLM 引擎
from vllm import LLM, SamplingParams
llm = LLM(
model="meta-llama/Llama-3-8B-Instruct",
tensor_parallel_size=2, # Use 2 GPUs
gpu_memory_utilization=0.9,
max_model_len=4096
)
sampling = SamplingParams(
temperature=0.7,
top_p=0.95,
max_tokens=512,
stop=["</s>", "\n\n"]
)
步驟 3:運行批量推理
vLLM 會自動對請求進行批處理以提高效率:
# Process all prompts in one call
outputs = llm.generate(prompts, sampling)
# vLLM handles batching internally
# No need to manually chunk prompts
步驟 4:處理結果
# Extract generated text
results = []
for output in outputs:
prompt = output.prompt
generated = output.outputs[0].text
results.append({
"prompt": prompt,
"generated": generated,
"tokens": len(output.outputs[0].token_ids)
})
# Save to file
import json
with open("results.jsonl", "w") as f:
for result in results:
f.write(json.dumps(result) + "\n")
print(f"Processed {len(results)} prompts")
工作流 3:量化模型服務
在有限的 GPU 顯存中容納大型模型。
Quantization Setup:
- [ ] Step 1: Choose quantization method
- [ ] Step 2: Find or create quantized model
- [ ] Step 3: Launch with quantization flag
- [ ] Step 4: Verify accuracy
步驟 1:選擇量化方法
- AWQ:最適合 70B 模型,精度損失最小
- GPTQ:支持模型廣泛,壓縮效果好
- FP8:在 H100 GPU 上速度最快
步驟 2:查找或創建量化模型
使用來自 HuggingFace 的預量化模型:
# Search for AWQ models
# Example: TheBloke/Llama-2-70B-AWQ
步驟 3:使用量化標誌啟動
# Using pre-quantized model
vllm serve TheBloke/Llama-2-70B-AWQ \
--quantization awq \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.95
# Results: 70B model in ~40GB VRAM
步驟 4:驗證準確性
測試輸出是否符合預期質量:
# Compare quantized vs non-quantized responses
# Verify task-specific performance unchanged
何時使用及替代方案對比
在以下情況使用 vLLM:
- 部署生產級 LLM API(100+ req/sec)
- 提供兼容 OpenAI 的端點
- GPU 顯存有限但需要使用大型模型
- 多用戶應用(聊天機器人、助手)
- 需要在高吞吐量下保持低延遲
在以下情況使用替代方案:
- llama.cpp:CPU/邊緣推理,單用戶場景
- HuggingFace transformers:研究、原型設計、一次性生成
- TensorRT-LLM:僅限 NVIDIA,需要絕對最高性能
- Text-Generation-Inference:已處於 HuggingFace 生態系統中
常見問題
問題:加載模型時內存不足
減少內存使用:
vllm serve MODEL \
--gpu-memory-utilization 0.7 \
--max-model-len 4096
或使用量化:
vllm serve MODEL --quantization awq
問題:首令牌生成緩慢(TTFT > 1 秒)
為重複提示詞啟用前綴緩存:
vllm serve MODEL --enable-prefix-caching
對於長提示詞,啟用分塊預填充:
vllm serve MODEL --enable-chunked-prefill
問題:未找到模型錯誤
對於自定義模型,使用 --trust-remote-code:
vllm serve MODEL --trust-remote-code
問題:吞吐量低(<50 req/sec)
增加併發序列數:
vllm serve MODEL --max-num-seqs 512
使用 nvidia-smi 檢查 GPU 利用率 - 應大於 80%。
問題:推理速度慢於預期
驗證張量並行是否使用了 2 的冪次方數量的 GPU:
vllm serve MODEL --tensor-parallel-size 4 # Not 3
啟用推測解碼以加快生成速度:
vllm serve MODEL --speculative-model DRAFT_MODEL
高級主題
服務器部署模式:請參閱 references/server-deployment.md 瞭解 Docker、Kubernetes 和負載均衡配置。
性能優化:請參閱 references/optimization.md 以瞭解 PagedAttention 調優、連續批處理(continuous batching)詳情以及基準測試結果。
量化指南:請參閱 references/quantization.md 以瞭解 AWQ/GPTQ/FP8 設置、模型準備和精度對比。
故障排除:請參閱 references/troubleshooting.md 以獲取詳細的錯誤信息、調試步驟和性能診斷。
硬件要求
- 小型模型(7B-13B):1x A10 (24GB) 或 A100 (40GB)
- 中型模型(30B-40B):2x A100 (40GB),使用張量並行(tensor parallelism)
- 大型模型(70B+):4x A100 (40GB) 或 2x A100 (80GB),建議使用 AWQ/GPTQ
支持的平臺:NVIDIA(主要)、AMD ROCm、Intel GPU、TPU
資源
- 官方文檔:https://docs.vllm.ai
- GitHub:https://github.com/vllm-project/vllm
- 論文:"Efficient Memory Management for Large Language Model Serving with PagedAttention" (SOSP 2023)
- 社區:https://discuss.vllm.ai