核心是“环境固化+接口暴露+资源可控”:需选用预装驱动栈的官方gpu镜像,模型外挂解耦,显式配置gpu与端口,添加健康检查、日志挂载及资源限制以保障7×24稳定运行。

直接用 Docker 做在线推理服务,核心是“环境固化 + 接口暴露 + 资源可控”。和离线部署不同,在线服务必须稳定响应请求、支持并发、可监控可扩缩,不能只跑通单次 curl 就算完。
选对带 GPU 支持的运行时镜像
别从 python:3.10 或 ubuntu:22.04 自己装 CUDA——版本错配是线上故障主因。优先拉取官方维护、预装好驱动栈的镜像:
- vLLM 官方镜像:
vllm/vllm-openai:latest(自动适配 CUDA 12.x,含 OpenAI 兼容 API) - Triton 推理服务器:
nvcr.io/nvidia/tritonserver:24.07-py3(企业级多模型管理能力) - 轻量 GGUF 模型服务:
ghcr.io/ggml-org/llama.cpp:server-cuda(适合 Qwen、Phi 等中小模型) - OpenVINO CPU/GPU 一体镜像:
openvino/ubuntu22_runtime:2023.3(英特尔平台首选)
模型与服务解耦:挂载而非打包
模型文件体积大、更新频繁,硬塞进镜像会导致镜像臃肿、每次更新都要重构建。正确做法是外挂:
- 把模型目录(含
config.json、tokenizer.model、权重文件等)统一放在宿主机固定路径,例如/data/models/qwen2-7b - 启动容器时用
-v /data/models:/models映射进去 - 服务启动命令中明确指定模型路径,如
--model /models/qwen2-7b - 多个模型共存?建子目录区分,Triton 还支持按
model_repository结构自动加载
GPU 与网络配置必须一步到位
线上服务一旦启动就期望 7×24 运行,GPU 不可用或端口不通等于服务不可用:
- 确认宿主机已安装匹配的 NVIDIA 驱动(≥535),并运行
nvidia-container-toolkit configure && systemctl restart docker - 启动命令必须显式声明 GPU,推荐写法:
--gpus '"device=0,1"'(指定卡号)或--gpus all(全卡) - HTTP 服务务必映射端口并绑定到
0.0.0.0,例如:-p 8000:8000 --host 0.0.0.0 --port 8000 - 加
--restart=unless-stopped,避免 Docker 重启后服务掉线
加一层健康检查与可观测性
纯裸跑容器不便于运维。建议在 docker run 中加入基础可观测支撑:
- 用
curl http://localhost:8000/health或/readyz做存活探针(多数推理镜像已内置) - 挂载日志目录:
-v /var/log/qwen-infer:/var/log,方便排查超时、OOM 等问题 - 限制资源防雪崩:
--memory=16g --cpus=6 --oom-kill-disable=false - 后续可接入 Prometheus:部分镜像(如 vLLM)已暴露
/metrics端点,直接配 scrape 即可











