来源:微信公众号「CV技术笔记」
原文链接:https://mp.weixin.qq.com/s/U1qMgvgg97CE8mMdw6xIPg
代码仓库:https://gitee.com/genesisesNoun/llm-local-deploy-tutorial
整理:红龙 🐉
vLLM 高性能部署:打造生产级大模型推理服务完全指南
当并发用户从 1 个变成 100 个,你的模型服务还能扛住吗?vLLM 的 PagedAttention 技术让显存利用率从 30% 提升到 90%+,是生产环境部署大模型的首选方案。
一、为什么需要 vLLM?
传统推理的三大痛点
- 显存浪费:传统方式为每个请求预分配固定显存,实际利用率仅 30-50%
- 并发瓶颈:显存不够 → 请求排队 → 超时 → 体验差
- 吞吐量低:同样硬件下,vLLM 吞吐量是传统方案的 2-4 倍
vLLM 的解决方案
vLLM 由 UC Berkeley 开发,核心创新是 PagedAttention——像操作系统管理虚拟内存一样分页管理显存,按需分配。
效果:
- 显存利用率:30% → 90%+
- 并发能力:提升 2-4 倍
- 延迟稳定性:显著改善
二、PagedAttention 技术详解
KV Cache 问题
推理过程中,KV Cache 存储注意力计算的中间结果,随生成内容增加而增长,占用大量显存且大小不固定。
传统方案的缺陷
每个请求预分配最大 KV Cache(如 4096 tokens),即使只生成 100 tokens 也占满空间。24GB 显存的 GPU 只能同时处理 5-10 个请求。
PagedAttention 原理
借鉴操作系统虚拟内存管理:
- Block(类比内存页):固定大小的显存块(如 16 tokens)
- Block Table(类比页表):逻辑到物理 block 的映射
- KV Cache Manager(类比内存管理器):统一分配和回收
按需分配、无预分配浪费、显存碎片少、支持内存共享。
性能对比(A100 80GB,Llama 2 13B)
- 吞吐量:HuggingFace 10 req/s → Ollama 15 → vLLM 35 req/s
- 显存利用率:35% → 45% → 92%
- 延迟 P99:8s → 5s → 2s
三、安装
环境要求
- Python 3.8+、CUDA 11.8+、NVIDIA GPU(推荐 8GB+)、Linux
安装方式
bash
# pip 安装(推荐)
pip install vllm
# Docker
docker pull vllm/vllm-openai:latest
docker run --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-p 8000:8000 --ipc=host \
vllm/vllm-openai:latest \
--model meta-llama/Llama-3-8b-hf四、快速开始
命令行启动
bash
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3-8b-hf \
--host 0.0.0.0 --port 8000OpenAI SDK 调用
python
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="dummy"
)
response = client.chat.completions.create(
model="meta-llama/Llama-3-8b-hf",
messages=[{"role": "user", "content": "你好,请介绍一下自己"}]
)
print(response.choices[0].message.content)流式输出
python
stream = client.chat.completions.create(
model="meta-llama/Llama-3-8b-hf",
messages=[{"role": "user", "content": "写一首诗"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")五、Python API 详解
基础使用
python
from vllm import LLM, SamplingParams
llm = LLM(model="meta-llama/Llama-3-8b-hf")
sampling_params = SamplingParams(
temperature=0.7, top_p=0.9, max_tokens=256
)
prompts = ["你好", "请写一首诗", "解释一下量子计算"]
outputs = llm.generate(prompts, sampling_params)批量生成
vLLM 的强项——300 个提示词自动优化调度:
python
prompts = ["翻译成英文:人工智能正在改变世界"] * 100
outputs = llm.generate(prompts, sampling_params)自定义参数
python
llm = LLM(
model="meta-llama/Llama-3-8b-hf",
tensor_parallel_size=1, # GPU 数量
gpu_memory_utilization=0.9, # 显存利用率
max_model_len=4096, # 最大上下文
trust_remote_code=True,
)
sampling_params = SamplingParams(
temperature=0.7, top_p=0.9, top_k=50,
max_tokens=256,
repetition_penalty=1.1,
stop=["</s>", "\n\n"],
)六、生产部署配置
启动参数
bash
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3-8b-hf \
--host 0.0.0.0 --port 8000 \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.9 \
--max-model-len 4096 \
--max-num-seqs 256关键参数:
--gpu-memory-utilization:推荐 0.85-0.95--max-model-len:按需设置,越小越省显存--max-num-seqs:最大并发序列数,推荐 128-256
多 GPU 部署
bash
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3-70b-hf \
--tensor-parallel-size 2 \
--gpu-memory-utilization 0.9量化模型支持
python
# AWQ 量化
llm = LLM(model="TheBloke/Llama-3-8B-AWQ", quantization="awq")
# GPTQ 量化
llm = LLM(model="TheBloke/Llama-3-8B-GPTQ", quantization="gptq")七、性能调优
显存优化
python
llm = LLM(
model="meta-llama/Llama-3-8b-hf",
gpu_memory_utilization=0.85,
enforce_eager=True, # 禁用 CUDA graph,节省显存
max_model_len=2048, # 减少上下文长度
)吞吐量优化
python
llm = LLM(
model="meta-llama/Llama-3-8b-hf",
max_num_seqs=512,
max_num_batched_tokens=16384,
enforce_eager=False, # 启用 CUDA graph 加速
)八、Nginx 集成与负载均衡
单实例反向代理
nginx
upstream vllm_backend {
server 127.0.0.1:8000;
keepalive 64;
}
server {
listen 80;
location / {
proxy_pass http://vllm_backend;
proxy_http_version 1.1;
proxy_buffering off;
proxy_read_timeout 300s;
}
}多实例负载均衡
nginx
upstream vllm_backend {
least_conn;
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
keepalive 64;
}九、常见问题
- 显存不足:降低
gpu_memory_utilization到 0.8,减少max_model_len - 首次启动慢:正常现象(需编译),后续会快
- 模型下载失败:设置
HF_ENDPOINT=https://hf-mirror.com或用本地路径 - 端口被占用:换端口
--port 8001
十、总结
vLLM 是生产环境部署大模型的最优选择:
优点:PagedAttention 显存利用率 90%+、吞吐量 2-4 倍提升、OpenAI 兼容 API、支持多 GPU 和量化
适合场景:高并发 API 服务、企业生产环境、多租户模型服务
版权声明:本文内容整理自微信公众号「CV技术笔记」,仅做排版整理,主体内容未做篡改。