【LLM】VLLM:容器运行 ModelScope 模型

发布于:2025-09-13 ⋅ 阅读:(19) ⋅ 点赞:(0)

本文介绍如何通过 Docker 快速运行 VLLM 并加载 ModelScope 模型,适合需要 GPU 加速推理和大模型部署的场景。

一、环境准备

1. 安装 Docker

建议使用官方安装方式:

一键安装脚本(不推荐,需自行判断风险):

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

2. 安装 NVIDIA Container Toolkit

本文使用的 VLLM 需要使用 NVIDIA GPU 推理,需要配置 NVIDIA Container Toolkit

  • 官方安装指南:
    https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html

验证 GPU 是否可见:

docker run --gpus all nvidia/cuda:11.0-base nvidia-smi

3. 拉取 VLLM Docker 镜像

如果拉取速度慢,建议开启科学上网或使用国内镜像源。

sudo docker pull vllm/vllm-openai:v0.10.1.1
  • 当前版本:v0.10.1.1(截至 2025-09-12 最新官方版本)
  • 显卡驱动要求:CUDA 12.8 或以上

请确保宿主机 NVIDIA 驱动版本满足要求,否则容器内无法识别 GPU。


二、测试与运行

使用以下命令启动 vLLM 推理服务

sudo docker run --gpus all \
  --env "VLLM_USE_MODELSCOPE=true" \
  -v ~/.cache/modelscope:/root/.cache/modelscope \
  -p 8000:8000 \
  --ipc=host \
  vllm/vllm-openai:latest \
  --model Qwen/Qwen3-0.6B \
  --gpu-memory-utilization 0.7 \
  --max-model-len 2048
参数 说明
--gpus all 启用宿主机所有 GPU 设备
--env "VLLM_USE_MODELSCOPE=true" 使用 ModelScope 下载模型,国内网络更稳定
-v ~/.cache/modelscope:/root/.cache/modelscope 挂载本地缓存目录,避免重复下载模型文件
-p 8000:8000 将容器 8000 端口映射到宿主机 8000 端口
--ipc=host 共享宿主机的 IPC 空间,减少显存碎片问题
vllm/vllm-openai:latest vLLM 官方最新镜像
--model Qwen/Qwen3-0.6B 指定要加载的模型
--gpu-memory-utilization 0.7 限制单 GPU 最大显存占用比例,避免 OOM
--max-model-len 2048 设置最大上下文长度(tokens)

启动成功后,服务将监听在 http://127.0.0.1:8000,并且完全兼容 OpenAI API 规范。


2. 测试 API

使用 curl 发送测试请求,确认服务是否正常工作。

curl http://127.0.0.1:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
        "model": "Qwen/Qwen3-0.6B",
        "prompt": "请用一句话解释人工智能。",
        "max_tokens": 100
      }'

示例返回结果:

{
    "id": "cmpl-8328abddc08f4c7c8500a407d92b793a",
    "object": "text_completion",
    "created": 1757669109,
    "model": "Qwen/Qwen3-0.6B",
    "choices": [
        {
            "index": 0,
            "text": " 人工智能是通过计算机系统模拟人类智能的理论、方法、应用技术或其组合体。\n\n人工智能是通过计算机系统模拟人类智能的理论、方法、应用技术或其组合体。这句话是否正确?如果正确,那么这句话中的“计算机系统”是否正确?\n\n这句话是否正确?如果正确,那么这句话中的“计算机系统”是否正确?\n\n这句话是否正确?如果正确,那么这句话中的“计算机系统”是否正确?\n\n这句话是否正确?如果正确,那么",
            "logprobs": null,
            "finish_reason": "length",
            "stop_reason": null,
            "prompt_logprobs": null
        }
    ],
    "service_tier": null,
    "system_fingerprint": null,
    "usage": {
        "prompt_tokens": 6,
        "total_tokens": 106,
        "completion_tokens": 100,
        "prompt_tokens_details": null
    },
    "kv_transfer_params": null
}

三、VLLM 的常用参数

参考文档:VLLM Engine Arguments

下面介绍 VLLM 在日常部署和使用中最常用、最关键的参数。

参数 作用 示例
--model 指定模型名称或本地路径 --model Qwen/Qwen2-7B-Instruct
--gpu-memory-utilization 控制 GPU 显存利用率(0.0-1.0) --gpu-memory-utilization 0.7
--max-model-len 最大上下文长度,支持 k/K/m/M 格式 --max-model-len 256K
--api-key 设置 API 访问密钥,提升安全性 --api-key sk-123456
--served-model-name 为 API 调用定义自定义模型名 --served-model-name my-qwen

四、使用 Docker Compose 组织

在实际部署中,手动输入长命令启动容器既麻烦又不利于维护,建议使用 Docker Compose 来管理 vLLM 服务。

通过 docker-compose.yml 文件,可以更直观地定义模型服务、端口映射、本地缓存挂载等配置。


1. 创建目录结构

建议创建一个独立目录,用于存放配置文件和缓存:

mkdir -p ~/vllm
cd ~/vllm
mkdir -p modelscope_cache

目录结构示例:

~/vllm/
│
├── docker-compose.yml      # vLLM 服务配置文件
└── modelscope_cache/       # 本地缓存目录

2. 编写 docker-compose.yml

~/vllm-compose 目录下新建 docker-compose.yml 文件:

services:
  vllm:
    image: vllm/vllm-openai:latest # vLLM 官方提供的 OpenAI 接口兼容镜像
    container_name: vllm_service # 容器名称
    restart: unless-stopped # 自动重启策略:除非手动停止,否则容器会自动重启
    ports:
      - "8000:8000" # 将容器的 8000 端口映射到宿主机 8000 端口
    environment:
      - VLLM_USE_MODELSCOPE=true # 使用 ModelScope 作为模型下载源
      - VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 # 模型文件缓存挂载到宿主机,避免重复下载
    volumes:
      - ./modelscope_cache:/root/.cache/modelscope  # 模型缓存目录
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ["0"]  # 精确指定第 0 号 GPU
              capabilities: [gpu]
    command:
      - "--model"
      - "Qwen/Qwen3-0.6B"            # 模型名称或路径
      - "--gpu-memory-utilization"
      - "0.7"                         # 每张 GPU 允许使用 70% 显存
      - "--max-model-len"
      - "2048"                        # 最大上下文长度(token 数)

3. 启动与管理服务

操作 命令 说明
启动服务 docker compose up -d 后台启动并创建容器(-d 表示 detached 模式)
停止服务 docker compose down 停止并移除容器、网络,但保留卷(Volume)
查看特定服务日志 docker compose logs -f <service_name> 跟踪指定服务的日志
查看服务状态 docker compose ps 列出所有服务的容器运行状态
重启特定服务 docker compose restart <service_name> 重启指定服务

五、总结

  • 通过 VLLM 配合 ModelScope,可以快速拉取并部署国内外大模型。
  • 使用 Docker Compose 可以方便管理服务、缓存和端口映射。
  • 生产环境建议设置 --api-key 保护接口安全,并明确 GPU 资源分配。
  • 建议挂载模型缓存目录,避免重复下载,节省带宽和启动时间。

网站公告

今日签到

点亮在社区的每一天
去签到