vLLM 部署与性能调优

Ollama 适合个人使用,但当你要对外提供服务、支撑高并发时,vLLM 是业界主流选择。它通过 PagedAttention、Continuous Batching 等优化,吞吐量可达传统方案的 10~20 倍。

vLLM 部署

一、环境要求

  • GPU:NVIDIA 显卡(Ampere 架构以上最佳),显存 ≥ 16GB

  • 系统:Linux(推荐 Ubuntu 22.04+),CUDA 12.x

  • Python:3.10+

二、安装 vLLM

1
# 方式一:pip 安装pip install vllm# 方式二:Docker(推荐生产环境)docker pull vllm/vllm-openai:latest

三、启动服务

方式一:命令行

1
python -m vllm.entrypoints.openai.api_server \ --model Qwen/Qwen2.5-7B-Instruct \ --served-model-name qwen2.5 \ --port 8000 \ --max-model-len 8192 \ --gpu-memory-utilization 0.9

方式二:Docker

1
docker run --runtime nvidia --gpus all \ -v ~/.cache/huggingface:/root/.cache/huggingface \ -p 8000:8000 \ vllm/vllm-openai:latest \ --model Qwen/Qwen2.5-7B-Instruct \ --served-model-name qwen2.5

启动成功后访问 http://localhost:8000/v1/models 验证。

四、性能调优技巧

1. 连续批处理(默认开启)

vLLM 会自动将到达的请求动态组批,不要手动限制并发。压测时用多路并发验证吞吐:

1
# 简单压测脚本python - 'EOF'import asyncio, aiohttpasync def ask(session, i): async with session.post("http://localhost:8000/v1/chat/completions", json={"model":"qwen2.5","messages":[{"role":"user","content":"讲个故事"}]}) as r: return await r.json()async def main(): async with aiohttp.ClientSession() as s: results = await asyncio.gather(*[ask(s, i) for i in range(32)]) print(f"完成 {len(results)} 个请求")asyncio.run(main())EOF

2. 显存利用率

1
--gpu-memory-utilization 0.92 # 允许用到 92% 显存(默认 0.9)--max-model-len 8192 # 按实际需求设置,过大会浪费 KV cache--enforce-eager # 显存不足时关闭 CUDA graph

3. 量化提速

1
# AWQ 量化模型,显存占用降低约 50%--quantization awq \--model Qwen/Qwen2.5-7B-Instruct-AWQ

4. 多卡并行

1
# 单机多卡--tensor-parallel-size 2# 跨机(需要多机配置)--tensor-parallel-size 4 --distributed-executor-backend ray

五、效果对比

方案 7B 模型吞吐(tokens/s) 适用场景
CPU 推理 5~10 学习体验
Ollama (GPU) 50~100 个人/小团队
vLLM (GPU) 300~800 生产服务
vLLM + 量化 + 多卡 1000+ 高并发生产

六、常见问题

问题 解决
显存不足 OOM 降低 max-model-len、启用量化、减少并发
模型下载慢 设置 HF_ENDPOINT=https://hf-mirror.com 使用镜像
响应变慢 检查是否被大请求占满 KV cache,限制 max-model-len
需要多模型 启动多个 vLLM 实例,用 Nginx 做路由

小结

vLLM 是「从实验室走向生产」的必经之路。掌握它 = 掌握吞吐、并发、显存这三个生产关键词。先用 Ollama 验证效果,再用 vLLM 承接流量,是性价比最高的组合。

延伸阅读: