保姆级教程:用Python+OpenCV+Realsense D435录制并保存16位深度视频(附完整代码)
2026/4/12 16:54:18
vLLM 是一款高性能的大语言模型推理框架,以高吞吐量、低延迟和显存高效利用为核心优势。在生产环境部署 vLLM 需兼顾稳定性、可扩展性、监控运维和性能优化,以下是完整的部署方案。
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| 操作系统 | 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(多机) | 多机部署需高带宽低延迟网络 |
(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')"示例:下载 Llama 2 7B AWQ 量化模型
gitlfsinstallgitclone https://huggingface.co/TheBloke/Llama-2-7B-Chat-AWQvLLM 支持多种部署模式,生产环境推荐API 服务部署(最通用),可选多卡 / 多机扩展或K8s 容器化部署。
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)针对 70B + 模型,单节点显存不足时,可通过张量并行 + 多机通信部署:
(1)前提条件
(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生产环境推荐使用 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| 参数 | 调优建议 |
|---|---|
| –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(会增加延迟,仅应急使用) |
python -m vllm.entrypoints.openai.api_server...>/var/log/vllm/server.log2>&1# /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.log# 暴露监控端口python -m vllm.entrypoints.openai.api_server... --metrics-port8080| 问题现象 | 排查方向 |
|---|---|
| 显存溢出(OOM) | 降低gpu-memory-utilization、启用量化、减少批处理 token 数 |
| API 请求超时 | 检查 GPU 利用率是否 100%、增大max-num-batched-tokens、优化模型并行方式 |
| 多机通信失败 | 检查 NCCL 版本、防火墙端口(29500+)、SSH 免密登录 |
| 模型加载失败 | 验证模型格式(HF 格式)、CUDA 版本兼容性、权限问题 |
vLLM 生产部署的核心是:选对部署模式(单机 / 多机 / K8s)+ 调优显存 / 并行参数 + 完善监控运维 + 强化安全。优先使用量化模型和 K8s 容器化部署,兼顾性能和可维护性;大规模模型建议采用多机张量并行,并配置共享存储和高带宽网络。
根据业务量可进一步扩展:如添加负载均衡(如 NGINX)、缓存层(如 Redis)、请求队列(如 Celery),提升服务的高可用和并发能力。