「模型部署系列」ubuntu 使用vllm部署Qwen3-8B模型
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"
--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
标志为 float16
(half
)。在你的 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