🤖 模块五:AI模型推理部署

模型量化技术

进阶·⏱ 30分钟·📅 2026-11-14
2026-10-15 技术维护
本节为文档核验与教学实验设计,未在真实 MUSA GPU 上实测。开发分支、待合并方案与正式发布分别标明;不覆盖原课程的锁定环境。

先建立量化验收问题

本课先完成不依赖 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 / DriverS5000 / Driver 5.2.0其他卡和驱动组合需重新验证
框架torch 2.11.0.post2+musa5.2.0不是要求替换现有正式 torch_musa 包
KernelTriton 3.2.0 mtgpu / WNA16不要直接套用 CUDA 专用 kernel
AWQgroup_size=128、zero_point=True其他元数据组合不自动视为支持
GPTQgroup_size=128、symmetricact-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 验收

  1. 固定原始模型和量化模型的来源、tokenizer、测试语料、随机种子与采样参数,提前确定任务精度门槛。
  2. 在独立测试节点保存现有镜像 digest、驱动和包清单;按目标分支配套说明构建隔离环境。本课不提供未验证的“一键安装”命令。
  3. 先检查 can_implement / kernel 选择结果,遇到不支持的 g_idx、shape 或量化格式立即停止,不以隐藏回退当作适配成功。
  4. 从单请求、短输入开始,对照非量化基线检查 NaN/Inf、输出质量、显存峰值,然后扩展输入长度与并发。
  5. 分别记录 eager 和 graph 路径;测量预热后的吞吐、首 token 延迟与逐 token 延迟,同时保存失败样本。变更内存相关联动参数时记录整组配置。
  6. 失败时恢复原镜像和模型 revision,不只降级某个 wheel;确认回滚后原基线仍可复现。

上述步骤是建议的实验设计。PR 作者也指出不同归约路径可能导致后续生成 token 分叉,因此不能把逐 token 完全一致作为所有 kernel 变化的唯一验收指标;仍须按任务预先定义质量门槛。vLLM-MUSA PR #277

提交一张验收单,而不是一句“支持 INT4”

提交物应包含:硬件与软件矩阵、模型与 tokenizer revision、量化元数据、实际 kernel、精度指标、显存峰值、延迟/吞吐、测试输入、失败边界及回滚记录。没有硬件条件时只提交配置检查和实验计划,结论写“未实测”。

2026-11-14 技术维护
本节依据官方 Release 与文档整理,未在真实 MUSA GPU 上实测。正式发布、作者测量与本站验证分别标明;原课程的旧版本步骤保留作对照与回滚。

状态更新:从开发分支到正式 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 风险写进验收

  1. 在练习二的基础上,加入至少一组 M > 64 的批量(例如较大并发的 prefill),与 M ≤ 64 的 decode 分开记录。
  2. 对同一输入连续运行三次,比对输出 token 是否一致,并检查 logits 是否出现 NaN/Inf。
  3. 不要自行修改 kernel tile 参数来“调优”;Release 说明已指出部分取值会产生 NaN。
  4. 若出现 NaN 或跨次不一致,保存模型 revision、量化配置(group size、zero point)、批量形状和镜像 digest,改用同一 v0.28.0 镜像的 BF16 权重,或回滚到原 v0.24.0 镜像;注意 v0.24.0 不包含本课 W4A16 路径,回滚后需同时换回非 W4A16 模型。

本站仍未在 S5000 上运行上述实验;这是基于官方说明设计的验收清单。