vLLM 是一款高性能的大语言模型推理框架,以高吞吐量、低延迟和显存高效利用为核心优势。在生产环境部署 vLLM 需兼顾稳定性、可扩展性、监控运维和性能优化,以下是完整的部署方案。
一、部署前准备
1. 环境要求
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| 操作系统 | Ubuntu 20.04+/CentOS 8+ | 推荐 Linux,需支持 CUDA(GPU 部署) |
| Python | 3.8~3.11 | 3.12 + 可能存在依赖兼容问题 |
| CUDA | 11.8+/12.1+ | GPU 部署核心依赖,需匹配显卡驱动(驱动版本≥CUDA 要求的最低版本) |
| 显卡 | NVIDIA A10/A100/V100/T4 | 显存≥16GB(7B 模型),≥32GB(13B),≥80GB(70B);支持多卡 / 多机扩展 |
| 内存 | ≥64GB | CPU 推理 / 数据预处理需更大内存 |
| 网络 | 千兆网卡(单机)/InfiniBand(多机) | 多机部署需高带宽低延迟网络 |
2. 依赖安装
(1)基础依赖
# 更新系统依赖sudoaptupdate&&sudoaptinstall-y build-essentialgitlibaio-dev# 安装Python依赖pipinstall--upgrade pip pipinstallvllm# 核心包(自动适配CUDA,也可指定版本:vllm==0.4.0)# 可选:如需量化/自定义算子pipinstallvllm[quantization]# 支持AWQ/GPTQ量化(2)CUDA 环境验证
# 验证CUDA是否可用python -c"import torch; print(torch.cuda.is_available())"# 输出True则正常# 验证vLLM CUDA编译python -c"from vllm import LLM; print('vLLM installed successfully')"3. 模型准备
- 模型来源:Hugging Face Hub(如 Llama 2、Qwen、Baichuan)、本地模型文件;
- 量化优化:生产环境优先使用量化模型(如 AWQ/GPTQ 4bit/8bit),降低显存占用;
- 模型转换:若模型格式不兼容,需先转换为 HF 格式(vLLM 原生支持 HF 格式)。
示例:下载 Llama 2 7B AWQ 量化模型
gitlfsinstallgitclone https://huggingface.co/TheBloke/Llama-2-7B-Chat-AWQ二、核心部署方式
vLLM 支持多种部署模式,生产环境推荐API 服务部署(最通用),可选多卡 / 多机扩展或K8s 容器化部署。
方式 1:单机 API 服务部署(基础版)
vLLM 内置 OpenAI 兼容的 API 服务器,可直接启动,适配多数生产场景。
(1)启动命令
# 基础启动(7B模型,单卡)python -m vllm.entrypoints.openai.api_server\--model /path/to/your/model\# 模型本地路径/HF Hub名称--host0.0.0.0\# 监听所有网卡--port8000\# API端口--gpu-memory-utilization0.9\# 显存利用率(0~1,建议0.8~0.9)--max-num-batched-tokens4096\# 批处理最大token数(根据显存调整) --quantization awq\# 可选:awq/gptq/none(量化方式)--enforce-eager\# 可选:禁用torch.compile,提升稳定性--served-model-name my-llm# 自定义模型名称(API调用时使用)# 进阶:多卡部署(70B模型,4卡)python -m vllm.entrypoints.openai.api_server\--model /path/to/70B-model\--tensor-parallel-size4\# 张量并行数(等于显卡数)--gpu-memory-utilization0.85\--max-num-batched-tokens8192\--host0.0.0.0\--port8000(2)API 调用示例
兼容 OpenAI 接口,支持chat/completions和completions:
importopenai# 配置客户端client=openai.OpenAI(base_url="http://localhost:8000/v1",api_key="dummy-key"# vLLM无需真实API Key,填任意值)# 调用聊天接口response=client.chat.completions.create(model="my-llm",# 对应启动时的--served-model-namemessages=[{"role":"system","content":"你是一个智能助手"},{"role":"user","content":"介绍一下vLLM的优势"}],max_tokens=512,temperature=0.7)print(response.choices[0].message.content)方式 2:多机分布式部署(大规模模型)
针对 70B + 模型,单节点显存不足时,可通过张量并行 + 多机通信部署:
(1)前提条件
- 多机之间配置 SSH 免密登录;
- 安装 NCCL(v2.18+),确保多机 GPU 通信正常;
- 所有节点的 vLLM、CUDA、模型文件版本一致(模型文件建议放在共享存储如 NFS)。
(2)启动命令(以 2 机 4 卡为例)
# 在主节点执行(节点1:192.168.1.10,节点2:192.168.1.11)python -m vllm.entrypoints.openai.api_server\--model /nfs/shared-model/70B-model\--tensor-parallel-size4\# 总显卡数(2机×2卡)--distributed-init-method tcp://192.168.1.10:29500\# 主节点通信地址--distributed-world-size2\# 节点数--distributed-rank0\# 主节点rank(从0开始)--host0.0.0.0\--port8000\--gpu-memory-utilization0.8# 在从节点执行(节点2)python -m vllm.entrypoints.openai.api_server\--model /nfs/shared-model/70B-model\--tensor-parallel-size4\--distributed-init-method tcp://192.168.1.10:29500\--distributed-world-size2\--distributed-rank1\# 从节点rank--host0.0.0.0方式 3:K8s 容器化部署(生产级)
生产环境推荐使用 K8s 部署,便于扩缩容、故障恢复和资源管理。
(1)制作 vLLM 镜像
# Dockerfile FROM nvidia/cuda:11.8.0-devel-ubuntu20.04 # 配置基础环境 RUN apt update && apt install -y python3 python3-pip git && \ ln -s /usr/bin/python3 /usr/bin/python # 安装vLLM RUN pip install --no-cache-dir vllm==0.4.0 torch==2.1.2 # 暴露端口 EXPOSE 8000 # 启动命令 CMD ["python", "-m", "vllm.entrypoints.openai.api_server", \ "--model", "/model", \ "--host", "0.0.0.0", \ "--port", "8000", \ "--tensor-parallel-size", "${TP_SIZE}"](2)构建镜像
docker build -t vllm-server:v0.4.0.(3)K8s 部署清单(示例)
# vllm-deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:vllm-servernamespace:llmspec:replicas:1selector:matchLabels:app:vllm-servertemplate:metadata:labels:app:vllm-serverspec:containers:-name:vllm-serverimage:vllm-server:v0.4.0env:-name:TP_SIZEvalue:"2"# 张量并行数ports:-containerPort:8000resources:limits:nvidia.com/gpu:2# 申请2张GPUmemory:64Gicpu:16requests:nvidia.com/gpu:2memory:32Gicpu:8volumeMounts:-name:model-volumemountPath:/model# 模型挂载路径volumes:-name:model-volumepersistentVolumeClaim:claimName:llm-model-pvc# 模型存储PVC(NFS/CSI)---# 服务暴露apiVersion:v1kind:Servicemetadata:name:vllm-server-servicenamespace:llmspec:type:ClusterIP# 生产环境建议用Ingress+HTTPSselector:app:vllm-serverports:-port:8000targetPort:8000三、生产环境优化
1. 性能调优
| 参数 | 调优建议 |
|---|---|
| –gpu-memory-utilization | 7B 模型设 0.9,70B 模型设 0.8~0.85,避免显存溢出 |
| –max-num-batched-tokens | 越大吞吐量越高,但需匹配显存(7B:4096,13B:8192,70B:16384) |
| –tensor-parallel-size | 等于显卡数(如 4 卡设 4),避免跨卡通信开销 |
| –pipeline-parallel-size | 多机部署时使用,与张量并行配合(如 8 卡:TP=4,PP=2) |
| –enable-cpu-offloading | 显存不足时启用,将部分权重卸载到 CPU(会增加延迟,仅应急使用) |
2. 稳定性优化
- 禁用 torch.compile:添加–enforce-eager,避免部分模型编译失败;
- 设置超时机制:API 服务添加–timeout 60(请求超时时间);
- 日志持久化:将 vLLM 日志输出到文件,便于故障排查:
python -m vllm.entrypoints.openai.api_server...>/var/log/vllm/server.log2>&1- 进程守护:使用systemd或supervisor管理 vLLM 进程,崩溃自动重启:
# /etc/supervisor/conf.d/vllm.conf [program:vllm-server] command=python -m vllm.entrypoints.openai.api_server --model /model --host 0.0.0.0 --port 8000 directory=/opt/vllm user=root autostart=true autorestart=true stderr_logfile=/var/log/vllm/error.log stdout_logfile=/var/log/vllm/out.log3. 显存优化
- 使用量化模型(AWQ/GPTQ 4bit):显存占用降低 75%,性能损失 < 10%;
- 启用–swap-space:设置磁盘交换空间(如–swap-space 16),应对突发显存需求;
- 清理无用缓存:启动前执行nvidia-smi --gpu-reset,释放显卡缓存。
四、监控与运维
1. 基础监控
- GPU 监控:使用nvidia-dcgm-exporter采集 GPU 使用率、显存、温度等指标;
- vLLM 指标:vLLM 内置 Prometheus 指标(默认端口 8080),可采集吞吐量、延迟、队列长度等:
# 暴露监控端口python -m vllm.entrypoints.openai.api_server... --metrics-port8080- API 监控:通过 Grafana+Prometheus 可视化指标(如vllm_requests_total、vllm_request_latency_seconds)。
2. 故障排查
| 问题现象 | 排查方向 |
|---|---|
| 显存溢出(OOM) | 降低gpu-memory-utilization、启用量化、减少批处理 token 数 |
| API 请求超时 | 检查 GPU 利用率是否 100%、增大max-num-batched-tokens、优化模型并行方式 |
| 多机通信失败 | 检查 NCCL 版本、防火墙端口(29500+)、SSH 免密登录 |
| 模型加载失败 | 验证模型格式(HF 格式)、CUDA 版本兼容性、权限问题 |
3. 版本更新
- 先在测试环境验证新版本 vLLM 兼容性;
- 滚动更新 K8s 部署(避免服务中断);
- 备份模型文件和配置,更新后验证 API 功能。
五、安全最佳实践
- 网络隔离:API 服务仅暴露给内网,通过 Ingress / 反向代理(Nginx/Envoy)对外提供服务;
- 鉴权:vLLM 默认无鉴权,需在反向代理层添加 API Key/Token 验证;
- HTTPS 加密:通过 Nginx/Traefik 配置 HTTPS,避免明文传输;
- 资源限制:K8s 中严格限制 GPU/CPU/ 内存资源,防止单个请求耗尽资源;
- 日志审计:记录所有 API 调用日志(用户、请求内容、响应状态),满足合规要求。
六、总结
vLLM 生产部署的核心是:选对部署模式(单机 / 多机 / K8s)+ 调优显存 / 并行参数 + 完善监控运维 + 强化安全。优先使用量化模型和 K8s 容器化部署,兼顾性能和可维护性;大规模模型建议采用多机张量并行,并配置共享存储和高带宽网络。
根据业务量可进一步扩展:如添加负载均衡(如 NGINX)、缓存层(如 Redis)、请求队列(如 Celery),提升服务的高可用和并发能力。