环境准备

安装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 提供的一个方便的工具,用于下载模型。你提供的命令会执行以下操作:

  1. 导入 snapshot_download: 从 modelscope 包中导入 snapshot_download 函数。
  2. 调用 snapshot_download:
    • 第一个参数 'okwinds/Qwen3-30B-A3B-Instruct-2507-Int4-W4A16' 是要下载的模型的名称或 ID。
    • cache_dir='/root/autodl-tmp/Models' 指定了模型下载后存放的本地缓存目录。如果模型已经存在于该目录,snapshot_download 会直接返回本地路径而不会重新下载。
  3. 打印下载路径: 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.jsontokenizer.json 以及模型权重文件(通常是 pytorch_model.binmodel.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"

执行此命令后会发生什么?

  1. 加载模型: VLLM 会从你指定的路径加载 Qwen3-30B-A3B-Instruct-2507-Int4-W4A16 模型到 GPU 显存中。
  2. 启动API服务器: VLLM 会启动一个基于 FastAPI 的 HTTP 服务器(通常默认在 http://localhost:8000)。
  3. 准备服务: 服务器将准备好接收来自客户端的生成请求。
  4. 控制台输出: 你会在终端中看到 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

测试命令

Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐