> 技术文档 > 「模型部署系列」ubuntu 使用vllm部署Qwen3-8B模型_--enforce-eager

「模型部署系列」ubuntu 使用vllm部署Qwen3-8B模型_--enforce-eager

1、下载vllm v0.8.5(此处已经下好了,去仓库拉资源)

2、 下载Qwen3-8B

方式1:

在下载前,请先通过如下命令安装ModelScope

pip install modelscope

命令行下载

下载完整模型

modelscope download --model Qwen/Qwen3-8B

下载单个文件到指定本地文件夹(以下载README.md到当前路径下“dir”目录为例)

modelscope download --model Qwen/Qwen3-8B README.md --local_dir ./dir

更多更丰富的命令行下载选项,可参见具体文档

SDK下载

#模型下载

from modelscope import snapshot_download model_dir = snapshot_download(\'Qwen/Qwen3-8B\')

方式2:Git下载

请确保 lfs 已经被正确安装,否则不会下载safetensor

git lfs install
git clone https://www.modelscope.cn/Qwen/Qwen3-8B.git

3、在目录下新建docker compose.yaml文件

八张卡配置:

services: vllm-Qwen3-8B: image: 10.75.240.230/vllm/vllm-openai:v0.8.5 container_name: vllm-Qwen3-8B restart: always shm_size: 10.24g environment: - CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 - PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True - TZ=Asia/Shanghai volumes: - /data/models/Qwen3-8B:/models # 替换为实际的宿主机路径 command: --model /models --served-model-name Qwen3-8B --tensor-parallel-size 8 --enforce-eager --dtype=half --port 8000 ports: - \"8080:8000\"

两张卡配置:

services: vllm-Qwen3-8B-1: image: 10.75.240.230/vllm/vllm-openai:v0.8.5 container_name: vllm-Qwen3-8B-1 restart: always shm_size: 10.24g environment: - CUDA_VISIBLE_DEVICES=0,1 - PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True - TZ=Asia/Shanghai volumes: - /data/models/Qwen3-8B:/models # 替换为实际的宿主机路径 - /data:/data command: --model /models --served-model-name Qwen3-8B --tensor-parallel-size 2 --gpu-memory-utilization 0.9 --max-model-len 20000 --max-num-seqs 128 --enable-prefix-caching --dtype=half --enforce-eager ports: - \"8080:8000\"

 

command解释部分:

--model /models

  • 含义:指定模型文件所在的路径。这里 /models 是容器内部的路径,结合之前 docker-compose.yml 中的 volumes 配置,它实际上对应宿主机上的 /data/models/Qwen3 - 8B 目录。模型服务启动时,会从这个路径加载 Qwen3 - 8B 模型的相关文件,如权重参数等。
  • 用途:确保服务能够找到并正确加载所需的模型,使模型可以进行后续的推理任务。

--served - model - name Qwen3-8B

  • 含义:设置对外提供服务时使用的模型名称。在通过 API 调用服务时,客户端可以根据这个名称来指定使用 Qwen3 - 8B 模型进行推理。
  • 用途:方便在多模型服务的环境中区分不同的模型,客户端可以明确知道自己调用的是哪个具体的模型。

--tensor - parallel - size 8

  • 含义:指定进行张量并行计算时使用的 GPU 数量为 8。张量并行是一种并行计算技术,它将模型的张量(如权重矩阵)分割到多个 GPU 上进行并行计算,从而加速模型的推理过程。
  • 用途:充分利用多个 GPU 的计算资源,提高模型推理的速度和效率,尤其是对于大规模的模型,这种并行计算方式可以显著减少推理时间。

--enforce - eager

  • 含义:强制执行 eager 模式。在深度学习框架中,有 eager 模式和图模式两种计算模式。eager 模式是一种即时执行模式,每执行一条指令就立即计算结果,便于调试和开发;而图模式则是先构建计算图,再统一执行,通常在性能上更有优势。使用 --enforce - eager 会强制使用 eager 模式。
  • 用途:在调试阶段或者某些特定场景下,需要即时看到计算结果,eager 模式可以更方便地进行代码调试和验证。

--dtype = half

  • 含义:指定模型使用半精度数据类型进行计算。半精度通常指的是 float16 数据类型,相比于常见的 float32 数据类型,它占用的内存空间减半,计算速度也可能更快。
  • 用途:减少模型在推理过程中的内存占用,提高 GPU 内存的利用率,同时在一些支持半精度计算的硬件上可以加快计算速度。不过,半精度计算可能会牺牲一定的数值精度。

--port 8000

  • 含义:指定模型服务监听的端口号为 8000。服务启动后,会在这个端口上等待客户端的请求。
  • 用途:确定服务的网络访问入口,客户端可以通过向这个端口发送请求来调用模型的推理服务。结合 docker-compose.yml 中的 ports 配置,宿主机的 8080 端口被映射到容器的 8000 端口,因此客户端可以通过访问宿主机的 8080 端口来与容器内的服务进行通信。

坑:

问题1、ERROR 05-06 10:31:49 [engine.py:448] Bfloat16 is only supported on GPUs with compute capability of at least 8.0. Your Tesla T4 GPU has compute capability 7.5. You can use float16 instead by explicitly setting the `dtype` flag in CLI, for example: --dtype=half.

解决:这表明你正在使用的 Tesla T4 GPU 的计算能力为 7.5,而 Bfloat16 数据类型仅支持计算能力至少为 8.0 的 GPU。当前的配置中使用了 Bfloat16 数据类型,导致程序无法正常初始化并报错。解决这个问题的方法正如错误信息中所提示的,需要在命令行中显式地设置 dtype 标志为 float16half)。在你的 docker-compose.yml 文件中,你可以修改 command 字段来实现这一点。

问题2、当你容器启动时碰到了 NCCL(NVIDIA Collective Communications Library)错误,错误信息为 NCCL error: unhandled system error,这一错误最终致使引擎进程启动失败。

解决:在环境变量中增加NCCL_DEBUG=INFO ,用于获取更详细的 NCCL 调试信息,当所有其他问题排除,可尝试增加shm_size 用来设置容器的共享内存大小。

shm_size: 10.24g