为什么容器化 AI 服务
- 环境隔离,避免 CUDA / Python 依赖版本冲突
- 便于在多台机器间快速复制部署
- 结合编排工具(Compose / K8s)实现弹性伸缩
前提:安装 NVIDIA Container Toolkit
distribution=$(. /etc/os-release; echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
使用官方 vLLM 镜像启动服务
docker run -d \
--name vllm-server \
--gpus all \
-p 8000:8000 \
--ipc=host \
-v ~/.cache/huggingface:/root/.cache/huggingface \
vllm/vllm-openai:latest \
--model Qwen/Qwen2.5-7B-Instruct-AWQ \
--quantization awq
要点说明:
--ipc=host:避免多进程间共享内存不足导致的报错-v挂载 HuggingFace 缓存目录,避免每次重建容器都重新下载模型--gpus all也可指定具体卡号,如--gpus '"device=0,1"'
使用 docker compose 管理
# docker-compose.yml
services:
vllm:
image: vllm/vllm-openai:latest
command: ["--model", "Qwen/Qwen2.5-7B-Instruct-AWQ", "--quantization", "awq"]
ports:
- "8000:8000"
volumes:
- ~/.cache/huggingface:/root/.cache/huggingface
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
restart: unless-stopped
docker compose up -d
docker compose logs -f vllm
资源与安全注意事项
- 容器内进程默认以 root 运行,生产环境建议通过
--user指定非特权用户 - 使用
--memory与--cpus限制资源,避免单容器耗尽宿主机资源 - 定期更新基础镜像,关注 CVE 公告
小结
容器化并不改变 vLLM 本身的调优逻辑,重点在于处理好 GPU 直通、缓存挂载与资源隔离三个工程细节。