为什么容器化 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 直通、缓存挂载与资源隔离三个工程细节。