Docker 部署 vLLM 实战指南(NVIDIA CUDA / AMD ROCm 全流程)
本文详细讲解如何使用 Docker 部署 vLLM 推理服务,分别覆盖 NVIDIA CUDA 与 AMD ROCm 两种 GPU 环境。内容包括 NVIDIA Container Toolkit 安装说明、官方镜像启动方式、模型缓存挂载、ModelScope 下载配置,以及容器内部署 DeepSeek 模型的完整流程。同时提供常见报错排查与显存优化建议,帮助开发者快速构建可迁移、可扩展的容器化大
在生产环境中,直接使用宿主机安装 vLLM 虽操作简单,但在版本隔离、依赖管理、跨机器迁移等核心场景中存在明显短板。因此,生产级部署更推荐采用容器化方案,实现高效、可复用、易维护的 GPU 推理服务。
本文延续实战风格,全程提供可直接复制运行的命令,完整讲解如何通过 Docker 部署 vLLM,并成功运行 DeepSeek 模型服务,同时覆盖 NVIDIA CUDA 和 AMD ROCm 两大 GPU 环境,适配不同硬件场景。
✅ 使用 Docker 部署 vLLM,实现环境隔离与快速迁移
✅ 适配 NVIDIA CUDA / AMD ROCm 双 GPU 环境
✅ 部署 DeepSeek 模型,提供 OpenAI 兼容 API 服务
✅ 解决部署中的高频问题,适配生产环境需求
📌 系列文章
👉 大模型本地部署实践(总览):为什么要做本地部署及方案选型
👉 如何在本地部署 DeepSeek?Ollama 一步跑通全流程实战
👉 Docker 部署 Ollama 全流程指南:支持 CPU/GPU、生产环境可用的工程化实践
👉 vLLM 本地部署 DeepSeek 全流程实战(Linux + NVIDIA GPU + OpenAI API 兼容)
一、为什么推荐 Docker 部署 vLLM?
在真实项目落地中,Docker 容器化部署相比宿主机直装,优势尤为突出,尤其适配 GPU 推理的生产场景:
-
环境完全隔离:容器内依赖独立管理,不污染宿主机系统,避免版本冲突
-
跨机快速迁移:打包好的镜像可直接在其他服务器运行,无需重复配置依赖
-
支持自动化部署:可无缝对接 CI/CD 流程,实现部署、升级、回滚的标准化
-
版本可控:通过固定镜像版本,确保不同环境部署的一致性,降低运维成本
目前,容器化已成为 GPU 推理服务的行业标准方案,也是企业级私有化部署的首选方式。
二、Docker 部署 vLLM(NVIDIA CUDA 环境)
适用于搭载 NVIDIA 独立显卡的服务器,也是最主流、兼容性最好的部署方案,全程手把手实战,新手可直接跟随操作。
2.1 安装 NVIDIA Container Toolkit(必做步骤)
要让 Docker 容器能够调用宿主机的 NVIDIA GPU,必须先安装 NVIDIA Container Toolkit,它是 GPU 容器与宿主机显卡通信的核心组件。
执行以下命令,一步完成安装与配置(复制时确保命令完整,避免换行遗漏):
# 1. 添加 NVIDIA 官方 GPG 密钥(用于验证软件包合法性)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
# 2. 添加 NVIDIA Container Toolkit 软件源
curl -fsSL 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
# 3. 更新系统软件包列表
sudo apt-get update
# 4. 安装 NVIDIA Container Toolkit
sudo apt-get install -y nvidia-container-toolkit
# 5. 配置 Docker,让其支持 NVIDIA GPU 运行时
sudo nvidia-ctk runtime configure --runtime=docker
# 6. 重启 Docker 服务,使配置生效
sudo systemctl restart docker
安装完成后,执行以下命令验证是否成功(核心验证容器能否调用 GPU):
docker run --rm --gpus all nvidia/cuda:12.3.0-base nvidia-smi
若终端能正常显示宿主机显卡型号、CUDA 版本、显存占用等信息,说明 NVIDIA Container Toolkit 安装成功,可进入下一步部署。
2.2 运行 vLLM 容器(核心步骤)
推荐使用 vLLM 官方镜像,无需手动构建,直接拉取即可运行,镜像已集成 vLLM 及相关依赖,适配 CUDA 环境。
官方镜像(Docker Hub):vllm/vllm-openai:latest(openai 后缀表示默认支持 OpenAI API 兼容接口)
执行以下命令,启动 vLLM 容器并运行 DeepSeek 模型:
docker run --runtime nvidia --gpus all \
-v ~/.cache/modelscope:/root/.cache/modelscope \
--env VLLM_USE_MODELSCOPE=True \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
关键参数详解(实战重点,必看):
-
--gpus all:允许容器使用宿主机的所有 GPU,若需指定 GPU,可改为--gpus "device=0,1"(指定第 0、1 块 GPU) -
-p 8000:8000:将容器内的 8000 端口(vLLM 默认 API 端口)映射到宿主机 8000 端口,外部可通过宿主机 IP:8000 访问服务 -
--ipc=host:共享宿主机的进程间通信资源,避免容器内共享内存不足,导致模型启动失败 -
-v ~/.cache/modelscope:/root/.cache/modelscope:将宿主机的 ModelScope 模型缓存目录挂载到容器内,实现模型缓存持久化,避免每次重启容器重复下载模型(国内环境必加) -
--env VLLM_USE_MODELSCOPE=True:设置环境变量,让 vLLM 优先从 ModelScope 下载模型,解决国内访问 HuggingFace 速度慢的问题 -
--model:指定要运行的模型,本文使用轻量版 DeepSeek 模型(deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B),适合入门测试,可替换为其他支持的模型
启动成功后,终端会输出监听日志,此时可访问:http://localhost:8000,若能正常显示 vLLM 服务信息,说明容器启动成功。
2.3 容器内手动部署模型(可选,用于调试)
若需进入容器内部进行调试、手动管理模型或修改配置,可执行以下步骤:
# 1. 查看正在运行的 vLLM 容器 ID
docker ps
# 2. 进入容器内部(替换 <container_id> 为实际容器 ID)
docker exec -it <container_id> bash
# 3. (可选)安装 ModelScope(若容器内未预装)
pip install modelscope
# 4. 手动启动 vLLM 服务,运行 DeepSeek 模型
vllm serve "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"
这种方式适合开发调试、手动更换模型或修改 vLLM 启动参数,生产环境建议直接使用 2.2 节的一键启动命令。
三、Docker 部署 vLLM(AMD ROCm 环境)
适用于搭载 AMD 独立显卡的服务器,部署逻辑与 NVIDIA CUDA 环境类似,但镜像和启动参数略有差异,全程适配 ROCm 6.3+ 版本。
官方镜像:rocm/vllm-dev:nightly(ROCm 专属 vLLM 开发版镜像,已集成 ROCm 依赖)
3.1 运行 ROCm 容器(核心步骤)
执行以下命令,启动 ROCm 容器,映射 GPU 设备并挂载模型缓存:
docker run -it --rm \
--network=host \
--group-add=video \
--ipc=host \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
--device /dev/kfd \
--device /dev/dri \
-v ~/.cache/modelscope:/root/.cache/modelscope \
-e VLLM_USE_MODELSCOPE=True \
rocm/vllm-dev:nightly
ROCm 容器关键参数详解:
-
--device /dev/kfd、--device /dev/dri:将 AMD GPU 相关设备文件映射到容器内,是容器调用 AMD 显卡的核心 -
--group-add=video:添加 video 用户组,让容器拥有访问 AMD 显卡的权限 -
--network=host:使用宿主机网络,简化端口配置,无需手动映射端口(容器内端口直接暴露给宿主机) -
--cap-add=SYS_PTRACE、--security-opt seccomp=unconfined:提升容器权限,避免 ROCm 运行时权限不足 -
-v ~/.cache/modelscope、-e VLLM_USE_MODELSCOPE=True:与 CUDA 环境一致,实现模型缓存持久化和国内源加速
3.2 容器内部署模型(调试/手动操作)
容器启动后,默认进入交互终端,若未自动进入,可执行以下命令进入容器并启动模型:
# 1. 查看 ROCm 容器 ID
docker ps
# 2. 进入容器内部(替换 <container_id> 为实际容器 ID)
docker exec -it <container_id> bash
# 3. 安装 ModelScope(若容器内未预装)
pip install modelscope
# 4. 启动 vLLM 服务,运行 DeepSeek 模型
vllm serve "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"
启动成功后,同样可通过 http://localhost:8000 访问服务,与 NVIDIA 环境的访问方式一致。
四、API 接口测试(验证部署成功)
vLLM 容器启动后,默认提供 OpenAI API 兼容接口,可直接通过 curl 命令、Postman 或业务代码调用,快速验证服务可用性。
执行以下 curl 命令,向本地 vLLM 服务发送请求(复制即可运行):
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B",
"messages": [
{"role": "user", "content": "Docker 部署 vLLM 成功了吗?"}
]
}'
若返回如下标准 JSON 响应(包含模型回答、token 用量等信息),说明部署完全成功,服务可正常对外提供 API 调用:
{
"id": "chatcmpl-xxxx",
"object": "chat.completion",
"created": 1725122400,
"model": "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "恭喜你!Docker 部署 vLLM 已经成功,当前可正常调用 DeepSeek 模型进行推理。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 15,
"completion_tokens": 22,
"total_tokens": 37
}
}
五、常见问题及解决方案(高频踩坑汇总)
部署过程中,可能会遇到 GPU 调用失败、模型重复下载、显存不足等问题,以下是高频问题的解决方案,覆盖 90% 实战场景。
1️⃣ 容器启动报 GPU 相关错误
现象:启动容器时,提示 “no GPU found”、“CUDA error” 或 “ROCm device not found” 等错误。
常见原因及解决方式:
-
未安装对应 GPU 的容器工具(NVIDIA 未装 Container Toolkit,AMD 未配置 ROCm 环境):重新执行对应环境的前置安装步骤。
-
Docker 版本过旧:升级 Docker 到 20.10 及以上版本(旧版本不支持 GPU 容器),执行
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io。 -
显卡驱动与容器环境不匹配:NVIDIA 需确保驱动版本适配 CUDA 版本,AMD 需确保 ROCm 版本与驱动兼容。
2️⃣ 模型重复下载,每次重启容器都要重新下载
原因:未挂载模型缓存目录,容器重启后,内部缓存的模型文件会被删除。
解决方案:启动容器时,必须添加以下挂载参数(已在前面的命令中包含,重点检查是否遗漏):
-v ~/.cache/modelscope:/root/.cache/modelscope
挂载后,模型会缓存到宿主机的 ~/.cache/modelscope 目录,后续重启容器可直接复用,无需重复下载。
3️⃣ 启动模型时报显存不足(out of memory)
现象:启动模型时,终端提示显存不足,无法初始化模型。
解决方案:
-
限制 GPU 显存利用率,预留部分显存供系统使用,在启动命令中添加
--gpu-memory-utilization 0.8(表示使用 80% 的显存,可根据显卡容量调整为 0.7~0.9)。 -
调小模型最大上下文长度,减少显存占用,添加参数
--max-model-len 2048(默认上下文长度较长,可根据需求调整)。 -
更换更小参数量的模型(如本文使用的 1.5B 轻量版,替换为更大模型时需确保显卡显存足够)。
六、生产部署建议(企业级落地优化)
若将 Docker + vLLM 用于生产环境,仅完成基础部署远远不够,需做好以下优化,提升服务稳定性和可维护性:
-
使用 docker-compose 管理容器:将启动参数、环境变量、挂载目录等配置写入 docker-compose.yml,实现一键启动、停止、重启,简化运维。
-
固定镜像版本:不要使用
latest标签(镜像会自动更新,可能导致版本兼容问题),改为固定版本(如vllm/vllm-openai:v0.5.0)。 -
添加容器重启策略:在启动命令或 docker-compose 中配置
--restart=always,确保容器意外退出后自动重启,避免服务中断。 -
使用 Nginx 做反向代理:统一入口,实现负载均衡、HTTPS 加密、请求限流,提升服务安全性和并发能力。
-
配置监控告警:集成 Prometheus + Grafana,监控容器运行状态、GPU 显存/使用率、API 调用量,出现异常及时告警。
七、总结
本文完整覆盖了 Docker 部署 vLLM 的全流程,分别适配 NVIDIA CUDA 和 AMD ROCm 两大 GPU 环境,核心完成了以下内容:
-
NVIDIA CUDA 环境:安装 Container Toolkit、启动 vLLM 容器、运行 DeepSeek 模型
-
AMD ROCm 环境:启动 ROCm 容器、部署模型,实现与 CUDA 环境一致的 API 服务
-
API 接口测试:验证 OpenAI 兼容接口可用性,确保服务可正常调用
-
问题排查与生产优化:解决高频部署问题,给出企业级落地建议
当你面临企业私有化部署、GPU 服务器集群、高并发推理服务等场景时,Docker + vLLM 是兼顾效率、稳定性和可维护性的最优组合。
如果这篇文章对你的部署工作有帮助,欢迎点赞、收藏、关注,后续将持续更新 vLLM 生产级优化、多模型部署等实战内容~
更多推荐


所有评论(0)