纯技术分享,记录踩坑全过程。本文汇总了 2026 年 4 月实测有效的 vLLM + Docker 部署方案。
🔥 起因:一个 AI 团队的"血泪"部署经历
上个月帮朋友团队搭大模型推理服务,需求很明确——把开源大模型部署成 OpenAI 兼容 API。但一周下来,人快麻了:
- 😫 Docker Hub 国内直连?超时是常态
- 😫 vLLM 镜像 15GB+,拉了三次,三次断连
- 😫 CUDA 版本、GPU 驱动、容器权限,环环踩坑
- 😫 72B 模型要双卡,显存管理头大
这篇文章把踩过的坑和实测方案整理出来,直接复制就能跑。
📋 先看结论:5 种部署方案 PK
| 方案 | 适合场景 | 镜像拉取方式 | 难度 |
|---|---|---|---|
| A. Docker Run 单容器 | 快速验证、本地开发 | 直连 / 加速服务 | ⭐⭐ |
| B. Docker Compose 编排 | 生产单模型 | 直连 / 加速服务 | ⭐⭐⭐ |
| C. Docker Compose 多模型 | 多模型 / 多 GPU | 直连 / 加速服务 | ⭐⭐⭐ |
| D. ModelScope + 本地构建 | 网络受限环境 | 离线构建 | ⭐⭐⭐⭐ |
| E. 自建 Registry 缓存 | 团队批量部署 | 私有仓库 | ⭐⭐⭐⭐⭐ |
本篇重点覆盖 A / B / C 三种方案,D / E 在文末简要说明。
🖥️ 硬件 & 软件准备
最低配置
| 模型规模 | 最低显存 | 推荐 GPU | 内存 |
|---|---|---|---|
| 7B | 16GB | RTX 4090 / A10 | 32GB |
| 14B | 24GB | A10 / A100-40G | 64GB |
| 32B | 48GB | A100-80G | 64GB |
| 72B | 80GB+ | 2×A100-80G | 128GB |
一键安装 NVIDIA Container Toolkit
# 安装 GPU 容器支持(必须)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker && sudo systemctl restart docker
# 验证 ✅
docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi
🐳 核心问题:镜像拉不下来怎么办?
vLLM 官方镜像 vllm/vllm-openai:latest 约 15GB,国内直连 Docker Hub 基本不可用。
镜像加速方案实测对比
| 方案 | 速度 | 稳定性 | 配置难度 | 适用场景 |
|---|---|---|---|---|
| 国内加速服务(如毫秒镜像等) | 10-20 MB/s ⚡ | ✅ 稳定 | ⭐ | 个人/企业日常 |
| Docker Hub 国内代理 | 3-8 MB/s | ⚠️ 经常失效 | ⭐ | 临时使用 |
| 阿里云容器镜像加速 | 5-10 MB/s | ✅ 稳定 | ⭐⭐ | 阿里云用户 |
| 自建 Registry 缓存 | 50+ MB/s | ✅ | ⭐⭐⭐⭐ | 大团队/CI |
| ModelScope 离线下载 | N/A | ✅ | ⭐⭐ | 完全离线 |
配置示例
# 方案一:国内加速服务(推荐,简单高效)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": ["https://你的加速源地址"]
}
EOF
sudo systemctl daemon-reload && sudo systemctl restart docker
# 拉取镜像
docker pull vllm/vllm-openai:latest
# 方案二:阿里云加速(阿里云用户专属)
sudo tee /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": ["https://你的阿里云加速地址.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload && sudo systemctl restart docker
💡 实测结果:配置加速服务后,15GB 镜像 10-20 分钟拉取完成,直连的话基本 2 小时以上还可能断连。
🚀 方案 A:Docker Run 快速启动(30 秒上手)
docker run --rm \
--gpus all \
-v ./models:/app/models \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model /app/models/Qwen2-7B-Instruct \
--host 0.0.0.0 \
--port 8000 \
--dtype auto \
--max-model-len 4096
关键参数速查:
| 参数 | 作用 |
|---|---|
--gpus all | 容器使用全部 GPU |
-v ./models:/app/models | 挂载本地模型目录 |
--ipc=host | 共享 IPC 命名空间,减少内存开销 |
--dtype auto | 自动选择精度(GPU 自动 FP16) |
--max-model-len | 最大上下文长度 |
验证部署:
# 查看可用模型
curl http://localhost:8000/v1/models
# 聊天测试
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "/app/models/Qwen2-7B-Instruct",
"messages": [{"role": "user", "content": "用Python写一个快速排序"}],
"temperature": 0.7
}'
📦 方案 B:Docker Compose 生产部署(推荐)
适合生产环境,带健康检查和自动重启。
version: '3.8'
services:
vllm-qwen:
container_name: vllm-qwen7b
image: vllm/vllm-openai:latest
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
volumes:
- ./models:/app/models
ports:
- "8001:8000"
ipc: host
command: >
--model /app/models/Qwen2-7B-Instruct
--host 0.0.0.0 --port 8000
--dtype auto --max-model-len 4096
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
# 启动
docker compose up -d
# 查看日志
docker compose logs -f vllm-qwen
# 查看健康状态
docker compose ps
🎛️ 方案 C:多模型 + 多 GPU
两块 GPU,各跑一个模型,通过不同端口访问。
version: '3.8'
services:
vllm-qwen:
container_name: vllm-qwen7b
image: vllm/vllm-openai:latest
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['0']
capabilities: [gpu]
volumes:
- ./models:/app/models
ports:
- "8001:8000"
ipc: host
command: >
--model /app/models/Qwen2-7B-Instruct
--host 0.0.0.0 --port 8000
--dtype auto --max-model-len 4096
restart: unless-stopped
vllm-deepseek:
container_name: vllm-deepseek
image: vllm/vllm-openai:latest
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['1']
capabilities: [gpu]
volumes:
- ./models:/app/models
ports:
- "8002:8000"
ipc: host
command: >
--model /app/models/DeepSeek-V2-Lite
--host 0.0.0.0 --port 8000
--dtype auto --max-model-len 4096
restart: unless-stopped
⚡ 显存优化:小显存也能跑大模型
# 核心优化参数组合
--gpu-memory-utilization 0.90 # GPU 显存使用比例
--max-model-len 2048 # 上下文长度减半
--enforce-eager # 禁用 CUDA Graph,降低峰值显存
--enable-prefix-caching # KV Cache 复用
--quantization awq # AWQ 4-bit 量化(需量化版模型)
| 优化手段 | 显存节省 | 性能影响 |
|---|---|---|
减小 max-model-len 4096→2048 | ~30% | 长文本截断 |
| AWQ 4-bit 量化 | ~70% | 略微下降 |
--enforce-eager | ~10-15% 峰值 | 5-10% 吞吐下降 |
| KV Cache 复用 | 不节省显存 | 提升重复前缀速度 |
📊 实测性能数据(NVIDIA A10 24GB)
| 模型 | 量化 | 首 Token 延迟 | 生成速度 | 显存占用 |
|---|---|---|---|---|
| Qwen2-7B | FP16 | 0.8s | 42 tok/s | 15GB |
| Qwen2-7B | AWQ 4-bit | 0.5s | 38 tok/s | 6GB |
| DeepSeek-V2-Lite | FP16 | 1.2s | 28 tok/s | 20GB |
| Llama3-8B | FP16 | 0.9s | 40 tok/s | 16GB |
10 并发测试(Qwen2-7B): 平均 3.2s,P95 8.1s,GPU 利用率 92%。
💥 5 个经典踩坑 + 解决方案
1️⃣ CUDA 版本不匹配
nvidia-smi # 驱动支持的 CUDA 版本(需要 >= 12.1)
sudo apt-get install nvidia-driver-550 # 升级驱动
2️⃣ 镜像拉不下来
👉 配置国内加速服务(见上文),实测 10-20 分钟搞定 15GB 镜像。
3️⃣ OOM 显存不够
# 减小上下文 + 量化
--max-model-len 2048 --quantization awq
4️⃣ 容器内无 GPU
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi
5️⃣ 模型加载太慢
用 --mount type=bind 挂载本地模型目录,避免容器重启重新下载。
📝 总结
| 你的场景 | 选哪个方案 |
|---|---|
| 本地试试 | 方案 A(Docker Run) |
| 生产部署 | 方案 B(Docker Compose) |
| 多模型多卡 | 方案 C(Compose 多服务) |
| 网络受限 | 方案 D(ModelScope 离线) |
| 大团队 CI | 方案 E(自建 Registry) |
vLLM + Docker 是开源大模型部署的高效组合,兼容 OpenAI API 格式,接入成本极低。核心解决三个问题:GPU 驱动、镜像拉取、显存优化。
有问题评论区交流 👇