大模型部署到生产环境,推理引擎的选择直接决定吞吐量和硬件成本。vLLM是目前使用最广泛的开源推理引擎之一,核心是PagedAttention显存管理机制,能让单张GPU塞进更多并发请求。这篇文章给出vLLM从安装到上线的完整流程,覆盖显存规划、性能参数和常见故障。
vLLM推理引擎的PagedAttention显存管理原理
传统推理框架为每个请求连续分配KV缓存,显存碎片化严重,长序列请求容易直接OOM。vLLM参考操作系统分页存储的思路,把KV缓存切成固定大小的页(block),按需分配,页面之间不必连续,同一请求的页面甚至可以跨请求共享。效果是显存利用率从传统方案的40%-60%提升到90%以上,同一块GPU能同时容纳更多并发请求,吞吐量显著提升。
官方基准测试中,vLLM相比HuggingFace Transformers原生实现,在相同显存下吞吐量提升数倍,实际数据取决于模型规模、并发数和序列长度。PagedAttention还支持Continuous Batching:上一个请求生成结束后,新请求可以立即插入batch,GPU不再空等。
部署前的环境选型与显存规划
先确认软硬件条件再动手,避免装完跑不起来:
- GPU:NVIDIA显卡,驱动版本与CUDA 11.6或12.x对应
- 显存估算:FP16权重的7B模型约14GB,13B约26GB,70B约140GB,KV缓存另算
- 系统:Linux(Ubuntu 20.04/22.04较常见),Python 3.8及以上
# 推荐用python虚拟环境隔离依赖
python3 -m venv vllm_env
source vllm_env/bin/activate
pip install vllm
CUDA Toolkit和驱动不匹配是安装失败的头号原因,装完先执行 nvidia-smi 确认驱动,再用 python -c “import torch;print(torch.cuda.is_available())” 确认PyTorch侧能识别GPU。
启动vLLM服务与OpenAI兼容API接口配置
vLLM内置OpenAI兼容的HTTP服务,启动即用,不需要额外写接口层:
python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2.5-14B-Instruct --gpu-memory-utilization 0.85 --max-model-len 8192 --port 8000
启动成功后,服务监听8000端口,/v1/chat/completions的请求格式与OpenAI一致,已有应用只需把base_url改成 http://localhost:8000/v1 即可切换,业务代码零改动。
吞吐量性能参数与量化推理配置
影响线上吞吐的核心参数:
| 参数 | 作用 | 建议 |
|---|---|---|
| –gpu-memory-utilization | KV缓存可用显存比例 | 0.80-0.92,留余量给权重和计算 |
| –max-num-seqs | 单batch最大并发序列数 | 64-256,过高增加排队延迟 |
| –max-model-len | 上下文最大长度 | 按业务需求设,过大浪费KV缓存 |
| –quantization | 量化方式 | awq / gptq / fp8 |
显存紧张的机器用AWQ或GPTQ量化模型,以小幅精度损失换约一半显存占用:
python -m vllm.entrypoints.openai.api_server --model path/to/model-awq --quantization awq --gpu-memory-utilization 0.85
高并发场景下的故障排查与调优
线上常见问题及处理方式:
- CUDA out of memory:降低 –gpu-memory-utilization 或 –max-model-len,换量化权重
- 请求超时:检查 batch内最长序列,调大 –max-num-seqs 配合并发客户端压测找平衡点
- 首token延迟高:确认是否走满了KV缓存,考虑开启 –enable-prefix-caching 缓存共享前缀
- 单请求OOM但批量正常:请求序列超长,限制输入长度或调大KV块大小
上线前用wrk或Locust按真实请求分布压测,记录P50/P95首token延迟和吞吐,再决定扩卡还是调参,比上线后救火靠谱。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/vllm-da-mo-xing-tui-li-bu-shu-shi-zhan-pagedattention-xian/