modelscope上 vllm 部署Qwen3-30B Int4模型(笔记)
·
环境准备
安装UV后指定Python版本
安装uv后安装后换指定版本python
curl -LsSf https://astral.sh/uv/install.sh | sh
# 中国
wget http://qiniu.dywlkj.com/uv_for_linux_x86/install.sh -O - | sh
uv python install 3.11
初始化目录
# 创建项目目录
mkdir vllms_312 && cd vllms_312
# 使用 Python 3.11 创建虚拟环境
uv venv .venv --python 3.11
# 使用阿里云镜像源
export UV_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/
uv pip install modelscope
uv pip install vllm
# 或清华大学镜像源
export UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple/
下载模型
python -c "from modelscope import snapshot_download;
model_dir = snapshot_download('okwinds/Qwen3-30B-A3B-Instruct-2507-Int4-W4A16', cache_dir='/root/autodl-tmp/Models');
print('模型下载完成,保存路径:', model_dir)"
"
snapshot_download 是 ModelScope SDK 提供的一个方便的工具,用于下载模型。你提供的命令会执行以下操作:
- 导入
snapshot_download: 从modelscope包中导入snapshot_download函数。 - 调用
snapshot_download:- 第一个参数
'okwinds/Qwen3-30B-A3B-Instruct-2507-Int4-W4A16'是要下载的模型的名称或 ID。 cache_dir='/root/autodl-tmp/Models'指定了模型下载后存放的本地缓存目录。如果模型已经存在于该目录,snapshot_download会直接返回本地路径而不会重新下载。
- 第一个参数
- 打印下载路径:
snapshot_download函数返回模型在本地文件系统中的完整路径(通常是cache_dir下的一个子目录),然后这个路径会被打印出来。
执行过程和可能的结果:
-
首次下载:
- 系统会检查你的
/root/autodl-tmp/Models目录。 - 如果该目录中不存在
'okwinds/Qwen3-30B-A3B-Instruct-2507-Int4-W4A16'模型的缓存,它将开始从 ModelScope 的远程仓库下载模型文件。 - 下载进度会在终端中显示。
- 下载完成后,模型文件会解压并存储在
/root/autodl-tmp/Models/okwinds/Qwen3-30B-A3B-Instruct-2507-Int4-W4A16类似这样的路径下(具体结构可能略有不同,但会在cache_dir内部)。 - 最终,你将看到输出
模型下载完成,保存路径: /root/autodl-tmp/Models/okwinds/Qwen3-30B-A3B-Instruct-2507-Int4-W4A16/...(具体路径)。
- 系统会检查你的
-
非首次下载 (模型已存在缓存):
- 系统会检查你的
/root/autodl-tmp/Models目录。 - 如果该目录中已经存在
'okwinds/Qwen3-30B-A3B-Instruct-2507-Int4-W4A16'模型的缓存,snapshot_download会直接返回这个已存在的本地路径,而不会进行任何网络下载。 - 你将迅速看到输出
模型下载完成,保存路径: /root/autodl-tmp/Models/okwinds/Qwen3-30B-A3B-Instruct-2507-Int4-W4A16/...。
- 系统会检查你的
注意事项:
- 网络连接: 确保你的机器有良好的互联网连接,以便下载模型。
- 磁盘空间: 这个模型 (Qwen3-30B-A3B-Instruct-2507-Int4-W4A16) 看起来是一个大型模型,确保你的
/root/autodl-tmp/Models目录所在的磁盘分区有足够的可用空间来存储它。30B (300亿参数) 模型即使是 Int4 量化版,也可能占用数十GB的磁盘空间。 - 权限: 确保你的用户对
/root/autodl-tmp/Models目录有写入权限。在某些环境中,/root目录可能需要sudo权限才能写入,但你提供的python -c命令通常是在当前用户的权限下执行的。如果cache_dir不可写,可能会报错。 - Python环境: 确保你的Python环境中已经安装了
modelscope库 (pip install modelscope)。
总结
你提供的命令是用于从ModelScope下载一个大型的量化版Qwen3模型到指定本地路径的。
启动
好的,这是一个使用 vllm 启动模型服务(serving)的命令。让我们来详细解析一下这个命令的各个部分及其含义:
命令分解:
vllm serve root/autodl-tmp/Models/okwinds/Qwen3-30B-A3B-Instruct-2507-Int4-W4A16 \
--tensor-parallel-size 1 \
--max-model-len 5000 \
--gpu-memory-utilization 0.8 \
--served-model-name Qwen3-30B-Int4
-
vllm serve: 这是启动 VLLM 服务的核心命令。 -
root/autodl-tmp/Models/okwinds/Qwen3-30B-A3B-Instruct-2507-Int4-W4A16:- 这个参数指定了你要加载并提供服务的模型路径。
vllm会在这个路径下查找模型的相关文件,如config.json、tokenizer.json以及模型权重文件(通常是pytorch_model.bin或model.safetensors等)。- 注意:你提供的路径
root/autodl-tmp/Models/...看起来像是从根目录开始的绝对路径,但通常一个用户目录下的路径会是/root/autodl-tmp/Models/...。请确保路径是正确的绝对路径。如果是在autodl-tmp这个用户目录下,通常是/opt/conda/envs/xxxx/autodl-tmp/...或者/root/autodl-tmp/...。请务必核对。
-
--tensor-parallel-size 1:- 这个参数控制张量并行 (Tensor Parallelism) 的大小。
1表示不使用张量并行,模型的所有层都在一个 GPU 上运行。- 如果你有多个 GPU 并且模型非常大,你可以增加这个值(例如
--tensor-parallel-size 2),VLLM 会将模型的不同部分分布到不同的 GPU 上,以处理更大的模型或提升吞吐量。对于Qwen3-30B这样的模型,即使是 Int4 量化版,如果单个 GPU 显存不足以容纳,可能需要用到张量并行。但对于单个 A100/A800 40GB/80GB GPU,Int4 量化模型通常可以直接加载。
-
--max-model-len 5000:- 这个参数设置了模型能够处理的最大序列长度 (Maximum Sequence Length)。
- 它包括输入提示词的长度和生成令牌的长度之和。
- 设置为
5000意味着你的模型可以处理最长为5000个 token 的输入和输出序列。 - 重要:设置过大的
max-model-len会显著增加 GPU 显存消耗。确保你的 GPU 显存足够支持此长度,结合gpu-memory-utilization参数。
-
--gpu-memory-utilization 0.8:- 这个参数指定了 VLLM 可以使用多少比例的 GPU 显存来存储 KV 缓存和模型权重。
0.8表示 VLLM 将尝试使用 GPU 总显存的 80%。- 为什么要设置这个?
- 留出一些显存给操作系统、其他进程和 VLLM 内部的一些开销(例如 PyTorch 预留显存,即使不完全使用也会占用一些)。
- 避免 OOM (Out Of Memory) 错误。
- 通过调整这个值,你可以进一步优化批处理大小和显存使用效率。如果你的模型是 Int4 量化并且
max-model-len也很高,这个值可能需要仔细调整。
-
--served-model-name Qwen3-30B-Int4:- 这个参数为服务指定一个名称。当 VLLM 启动后,它会暴露一个 RESTful API 接口。
- 当客户端通过 API 调用模型时,会使用这个名称来引用你正在提供服务的模型。例如,在 API 请求的 JSON 体中,你可能会看到
model: "Qwen3-30B-Int4"。
执行此命令后会发生什么?
- 加载模型: VLLM 会从你指定的路径加载
Qwen3-30B-A3B-Instruct-2507-Int4-W4A16模型到 GPU 显存中。 - 启动API服务器: VLLM 会启动一个基于 FastAPI 的 HTTP 服务器(通常默认在
http://localhost:8000)。 - 准备服务: 服务器将准备好接收来自客户端的生成请求。
- 控制台输出: 你会在终端中看到 VLLM 的启动日志,包括加载模型的情况、显存使用情况以及 API 服务器监听的地址和端口。
潜在问题及建议:
- 路径错误: 双重检查模型路径是否正确且是绝对路径。
- 显存不足:
Qwen3-30B即使是 Int4 量化,也需要可观的显存。如果 GPU 显存不足,VLLM 会报错。- 减小
--max-model-len。 - 减小
--gpu-memory-utilization(但这样会限制能运行的最大批次)。 - 如果只有一个 GPU 无法加载,考虑使用模型并行或多卡推理。
- 减小
- VLLM安装: 确保你已经正确安装了 VLLM。
pip install vllm
- CUDA版本: 确保你的 CUDA 版本与 VLLM 兼容。
- 端口冲突: 如果默认的
8000端口已被占用,你可以通过--port <new_port>参数更改端口。 - 日志: 关注 VLLM 在启动过程中的日志输出,它会提供调试信息。
示例使用 (API 请求):
一旦服务启动,你可以使用 curl 或 Python requests 库来发送请求:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen3-30B-Int4",
"prompt": "Hello, my name is",
"max_tokens": 50,
"temperature": 0.7
}'
这个命令会启动一个高性能的 LLM 推理服务,非常适合生产环境和高吞吐量需求。
检查健康状态
curl http://localhost:8000/health
查看模型信息
curl http://localhost:8000/v1/models
附加部署量化30B Int4 版本
from modelscope import snapshot_download
# 下载模型
model_dir = snapshot_download('okwinds/Qwen3-30B-A3B-Instruct-2507-Int4-W4A16',
cache_dir='/root/autodl-tmp/Models')
print("模型下载完成,保存路径:", model_dir)
#启动命令
vllm serve /root/autodl-tmp/Models/okwinds/Qwen3-30B-A3B-Instruct-2507-Int4-W4A16 \
--tensor-parallel-size 1 \
--max-model-len 15000\
--gpu-memory-utilization 0.8 \
--served-model-name Qwen3-30B-A3B-Instruct
附加2
root@dsw-1312610-84b94d47-khzft:/mnt/workspace# vllm serve ./Qwen3-4B-Instruct-2507-Int4-W4A16/okwinds/Qwen3-4B-Instruct-2507-Int4-W4A16 \
--tensor-parallel-size 1 \
--max-model-len 15000 \
--gpu-memory-utilization 0.8 \
--served-model-name Qwen3-4B-Instruct
测试命令
更多推荐


所有评论(0)