docker + vllm 从零开始快速上手, 以部署DeepSeek-R1-Distill-Qwen-7B为例

在开始之前,请确认已准备好以下环境

  • Linux操作系统

  • Nvidia 显卡, 在shell中执行nvidia-smi以确认驱动正确安装, 并且cuda的版本 >= 12.4
    在这里插入图片描述

  • docker 以及 nvidia-docker (点击此处查看安装教程)

注意:本文不包含任何vllm原理解析,请放心阅读 😎

vllm

目前关于DeepSeek-R1部署的教程大多数都是使用ollama进行部署,其方便程度确实是不可否认的,但是对于专业用户如后端开发、运维来说,我们希望获得更高的并发,更高的吞吐,那vllm就是最合适的选择了,特别是v0.7之后vllm迎来了重大的更新, 获得了更高的吞吐速度。

当然sglang也是个不错的选择

首先,拉取vllm的镜像,在shell中执行如下命令

sudo docker pull vllm/vllm-openai:v0.7.1

该镜像在模型部署之后,可直接间使用openai的sdk进行对接,特别方便

镜像拉取完成之后,我们进入模型下载的操作

下载 DeepSeek-R1-Distill-Qwen-7B

从HF上下载模型DeepSeek-R1-Distill-Qwen-7B , 下载地址 点击下载

如果速度较慢可以配置加速地址,操作方法如下

export HF_ENDPOINT=https://hf-mirror.com

之后直接clone repo

git lfs install
git clone https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B

也可直接从MdoelScope 上下载,点击前往

部署 DeepSeek-R1-Distill-Qwen-7B

由于财力限制,本文选择以 DeepSeek-R1-Distill-Qwen-7B 为例来说明如何使用vllm部署R1系统的蒸馏模型,如果参数量大于7B则调整对应的显卡数量以及-tp参数即可。

为了方便运维,本文使用docker compose 进行部署,部署的yaml文件如下:

  vllm:
    container_name: vllm
    restart: no
    image: vllm/vllm-openai:v0.7.1
    ipc: host
    volumes:
      - ./models:/models
    command: ["--model", "/models/DeepSeek-R1-Distill-Qwen-7B", "--served-model-name", "r1", "--max-model-len", "8912", "--max-num-seqs", "32", "--gpu-memory-utilization", "0.90"]
    ports:
      - 8000:8000
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

接下来本文将分块对该部署文件的内容进行说明


1. 服务名称与容器名

vllm:
  container_name: vllm
  • vllm: 定义了一个名为 vllm 的服务。
  • container_name: vllm: 指定了运行时容器的名字为 vllm,方便通过该名字管理容器。

举例:查看日志时执行sudo docker logs -f vllm 即可


2. 自动重启策略

restart: no
  • restart: no: 表示容器不会在崩溃或主机重启后自动重启。

如果是生产环境建议为: always, 以确保在爆显存的时候自动重启容器以便恢复服务


3. 镜像信息

image: vllm/vllm-openai:v0.7.1
  • image: vllm/vllm-openai:v0.7.1: 使用了来自 Docker Hub 的镜像 vllm/vllm-openai,版本为 v0.7.1
    • vllm 是一个高性能的大语言模型推理引擎,支持 OpenAI 兼容接口。
    • 版本号 v0.7.1 确保使用的是特定版本的镜像,避免因镜像更新导致的行为变化。

4. IPC 命名空间共享

ipc: host
  • ipc: host: 容器将与主机共享 IPC(进程间通信)命名空间。
    • 这通常用于需要高性能通信的场景,例如 GPU 加速任务。
    • 注意:此配置可能会影响隔离性,需谨慎使用。

5. 卷挂载

volumes:
  - ./models:/models
  • volumes: 定义了卷挂载,将主机目录 ./models 挂载到容器内的 /models 路径。
    • 用途: 容器可以访问主机上的模型文件夹,确保模型数据可以在主机和容器之间共享。
    • 注意: 确保 ./models 目录存在,并包含所需的模型文件, 将下载好的 DeepSeek-R1-Distill-Qwen-7B模型保存到此目录中

6. 启动命令

command: ["--model", "/models/DeepSeek-R1-Distill-Qwen-7B", "--served-model-name", "r1", "--max-model-len", "8912", "--max-num-seqs", "32", "--gpu-memory-utilization", "0.90"]
  • command: 定义了容器启动时执行的命令及其参数。
    • --model /models/DeepSeek-R1-Distill-Qwen-7B: 指定加载的模型路径为 /models/DeepSeek-R1-Distill-Qwen-7B
    • --served-model-name r1: 设置服务端暴露的模型名称为 r1,客户端可以通过该名称调用模型。
    • --max-model-len 8912: 设置模型最大输入长度为 8912 个 token。
    • --max-num-seqs 32: 设置最大并发序列数为 32。
    • --gpu-memory-utilization 0.90: 设置 GPU 内存利用率为目标值的 90%。

请根据实际情况对 max-model-len 以及 max-num-seqs 、gpu-memory-utilization 这三个参数进行调整,上下文越长占用的显存越多同时需要对max-num-seqs进行下调,否则会爆显存


7. 端口映射

ports:
  - 8000:8000
  • ports: 定义了端口映射规则。
    • 8000:8000: 将容器的 8000 端口映射到主机的 8000 端口。
    • 用途: 允许外部通过主机的 8000 端口访问容器中的服务。

8. GPU 资源分配

deploy:
  resources:
    reservations:
      devices:
        - driver: nvidia
          count: all
          capabilities: [gpu]
  • deploy: 定义了部署资源限制。

    • resources.reservations.devices: 指定需要的设备资源。
      • driver: nvidia: 使用 NVIDIA GPU 驱动。
      • count: all: 分配所有可用的 GPU。(也可以为[0]因为本机只有一张显卡, 如果需要指定GPU,则填入对应的序号即可如[3,4] 则指定使用3,4号显卡)
      • capabilities: [gpu]: 请求 GPU 计算能力。
  • 用途: 将主机上的GPU资源全部映射到容器中,以便vllm容器可以使用宿主机上的GPU资源

R1, 启动!

在docker-compose.yaml 文件所在目录中执行以下命令

sudo docker compose up -d

执行, 查看vllm日志, 发现vllm已启动完成并且在8000端口监听

sudo docker logs -f vllm

在这里插入图片描述
使用OpenAI SDK 调用

from openai import OpenAI

vllm_client = OpenAI(
    # 由于我们启动vllm时未配置key, 因此此处可随意填写
    api_key="NOT_NEED",
    # 改成实际部署的IP
    base_url="http://127.0.0.1:8000/v1",
)

response = vllm_client.chat.completions.create(
    # 对应served_model_name
    model='r1',
    messages=[
        {'role': 'user', 'content': '你好'}
    ]
)

print(response.choices[0].message.content)

关注我,将持续分享AGI生产级别的实践

### 在 Ubuntu 系统中通过 Docker 部署 VLLM 为了成功在 Ubuntu 系统上使用 Docker 部署 VLLM,需确保环境配置满足特定需求并遵循以下指导。 #### 一、确认基础环境设置 操作系统应为 Linux,本案以 **Ubuntu 22.04** 为。需要正确安装显卡驱动程序,并验证 CUDA 版本是否大于等于 12.4[^1]。执行命令 `nvidia-smi` 可查看 GPU 和驱动状态,以此判断硬件支持情况。此外,还需完成 Docker 的安装及其扩展工具 NVIDIA-DockerDocker Compose 的集成。 #### 二、拉取所需镜像 针对 VLLM部署,官方提供了专用的容器镜像资源。可以通过以下指令获取必要的镜像文件: ```bash docker pull vllm/vllm-openai ``` 此操作会从远程仓库下载适用于 VLLM 开发框架的基础运行环境[^2]。 #### 三、解决可能存在的依赖冲突 如果在实际操作过程中发现存在 CUDA 版本不兼容的情况,则可以借助 Conda 软件包管理器来调整相关依赖项。具体方法是利用命令 `conda install cuda -c nvidia` 来重新定义或更新所需的 CUDA 库版本[^3]。 #### 四、启动服务实 当上述准备工作完成后,即可基于已有的镜像创建一个新的容器实用于承载 VLLM 平台的服务功能。下面是一个简单的子展示如何启动该容器: ```bash docker run --gpus all -p 8000:8000 vllm/vllm-openai ``` 这里参数解释如下: - `--gpus all`: 表明分配所有的可用 GPU 给当前容器; - `-p 8000:8000`: 将主机端口映射到容器内部对应的服务监听端口中; 以上步骤能够帮助用户顺利搭建起基于 Docker 技术实现的 VLLM 运行平台。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值