先建立量化验收问题
本课先完成不依赖 GPU 的配置检查,再设计硬件实验。前置知识是模型权重、张量 dtype,以及本模块的推理服务基础;不要从“4 bit”直接推导服务一定更快或显存一定缩小四倍。
本次案例是 AWQ/GPTQ 的 W4A16 路径:权重以 4 bit 表示,计算路径使用 16 bit 激活。PR 通过已有 TritonW4A16LinearKernel 接入 MUSA;虽然部分类名包含 Marlin,但不是把 NVIDIA Marlin kernel 移植到 MUSA。vLLM-MUSA PR #277
先判断交付物,再决定能否安装
PR #277 于 2026-10-13 合入 v0.28.0-dev,合并 commit 为 135881f7627100b3bdd267dd2588205201596d4c。这是开发分支证据,不是正式 Release 发布证明。vLLM-MUSA PR #277
本轮读取到的正式 vLLM-MUSA Release 仍为 2026-09-04 发布的 v0.24.0;不能据上述 PR 假定这个正式包已经包含新增路径。v0.24.0 Release
| 层级 | PR 作者验证条件 | 教学边界 |
|---|---|---|
| GPU / Driver | S5000 / Driver 5.2.0 | 其他卡和驱动组合需重新验证 |
| 框架 | torch 2.11.0.post2+musa5.2.0 | 不是要求替换现有正式 torch_musa 包 |
| Kernel | Triton 3.2.0 mtgpu / WNA16 | 不要直接套用 CUDA 专用 kernel |
| AWQ | group_size=128、zero_point=True | 其他元数据组合不自动视为支持 |
| GPTQ | group_size=128、symmetric | act-order / g_idx 路径被拒绝;不使用 desc_act checkpoint |
| CPU / OS / 完整 SDK 包 | 本课未取得完整适配矩阵 | 测试前补齐官方依据,不自行补全 |
表中配置与限制来自 PR 的验证说明;这不是本站硬件实测,也不是跨型号兼容性承诺。vLLM-MUSA PR #277
练习一:只读检查本地模型配置
准备已获授权下载的模型目录及其 config.json,在该目录运行以下 Python 标准库代码。程序只打印元数据,不安装依赖、不加载权重、不执行远程模型代码;预期输出用于填写验收表,不能独立判定兼容性。
import json
from pathlib import Path
config = json.loads(Path("config.json").read_text(encoding="utf-8"))
q = config.get("quantization_config") or {}
for key in ("quant_method", "bits", "group_size", "zero_point", "sym", "desc_act"):
print(key, repr(q.get(key, "not specified")))
print("model_type", config.get("model_type", "not specified"))
print("dtype", config.get("dtype", config.get("torch_dtype", "not specified")))
若字段缺失,保留“未声明”,继续查模型卡、量化工具与 checkpoint 格式;不要把缺省值猜成支持值。将模型 revision、许可、文件哈希、量化元数据和目标引擎 commit 一起记录;模型 dtype 字段也不能代替检查量化配置。
练习二:设计小规模 GPU 验收
- 固定原始模型和量化模型的来源、tokenizer、测试语料、随机种子与采样参数,提前确定任务精度门槛。
- 在独立测试节点保存现有镜像 digest、驱动和包清单;按目标分支配套说明构建隔离环境。本课不提供未验证的“一键安装”命令。
- 先检查 can_implement / kernel 选择结果,遇到不支持的 g_idx、shape 或量化格式立即停止,不以隐藏回退当作适配成功。
- 从单请求、短输入开始,对照非量化基线检查 NaN/Inf、输出质量、显存峰值,然后扩展输入长度与并发。
- 分别记录 eager 和 graph 路径;测量预热后的吞吐、首 token 延迟与逐 token 延迟,同时保存失败样本。变更内存相关联动参数时记录整组配置。
- 失败时恢复原镜像和模型 revision,不只降级某个 wheel;确认回滚后原基线仍可复现。
上述步骤是建议的实验设计。PR 作者也指出不同归约路径可能导致后续生成 token 分叉,因此不能把逐 token 完全一致作为所有 kernel 变化的唯一验收指标;仍须按任务预先定义质量门槛。vLLM-MUSA PR #277
提交一张验收单,而不是一句“支持 INT4”
提交物应包含:硬件与软件矩阵、模型与 tokenizer revision、量化元数据、实际 kernel、精度指标、显存峰值、延迟/吞吐、测试输入、失败边界及回滚记录。没有硬件条件时只提交配置检查和实验计划,结论写“未实测”。
状态更新:从开发分支到正式 Release
上一轮课程把 PR #277 记为 v0.28.0-dev 开发分支证据。本轮核对:其合并 commit 135881f7627100b3bdd267dd2588205201596d4c 是 v0.28.0 标签的祖先提交,且 v0.28.0 Release 说明在“量化与 MoE”中列出 AWQ/GPTQ W4A16。因此 W4A16 路径现已随正式版交付。vLLM-MUSA PR #277 vLLM-MUSA v0.28.0 Release
Release 说明补充了一个对验收很关键的边界:M > 64 时 tile 约束为 BLOCK_M=128 / BLOCK_N=64 / BLOCK_K=32,原因是 MUSA 上 BLOCK_N=128 或 BLOCK_K≥64 会返回 NaN 且跨次运行不一致;M ≤ 64 与上游逐字节一致。vLLM-MUSA v0.28.0 Release
同版本还加入了 decode 侧的 split-K(2–8 段、fp32 累加、每段不跨量化组)及 gate_up 16×64 tile。说明中的带宽数字是 S5000 kernel 级测量,取自提交说明,不是端到端服务基准。vLLM-MUSA v0.28.0 Release
练习三:把 NaN 风险写进验收
- 在练习二的基础上,加入至少一组 M > 64 的批量(例如较大并发的 prefill),与 M ≤ 64 的 decode 分开记录。
- 对同一输入连续运行三次,比对输出 token 是否一致,并检查 logits 是否出现 NaN/Inf。
- 不要自行修改 kernel tile 参数来“调优”;Release 说明已指出部分取值会产生 NaN。
- 若出现 NaN 或跨次不一致,保存模型 revision、量化配置(group size、zero point)、批量形状和镜像 digest,改用同一 v0.28.0 镜像的 BF16 权重,或回滚到原 v0.24.0 镜像;注意 v0.24.0 不包含本课 W4A16 路径,回滚后需同时换回非 W4A16 模型。
本站仍未在 S5000 上运行上述实验;这是基于官方说明设计的验收清单。