跳转到主要内容

GLM-5.2 量化执行图:W4A8、BMM 与 KV8

用待 Trace 复核的 GLM-5.2 Prefill 示例路径解释 W4A8、E2M1/E4M3、低精度 BMM、BF16 Attention 与 FP8 KV Cache

· 约 4 分钟阅读

同一个模型会按算子采用不同精度。本文整理一张面向 GLM-5.2 Prefill、L20X 与 vLLM 的示例执行图,用来说明如何核对精度合同;applies_to 表示建模对象,不表示当前页面已经记录了可审计的 Trace 身份。

当前材料没有附模型 revision、vLLM commit、Trace ID、采集配置和原始产物,因此下文的具体路径都应视为待 Trace 复核的候选,不能当作该组合的实测事实。描述单个算子的坐标系是:

Poperator=(W,A,Acc,Out,State)\mathcal{P}_{\text{operator}} = \left(W, A, \mathrm{Acc}, \mathrm{Out}, \mathrm{State}\right)

在这个范围内,W4A8 表示一次 GEMM 使用 FP4 权重和 FP8 激活;它不代表整张图都是 4/8 bit。Attention 核心的 QKᵀPV BMM 没有常驻模型权重 operand W,但完整 Attention 模块的 Q/K/V/O 投影仍有权重;KV Cache 则属于状态 State,必须分别描述。下图先给出候选精度路径;需要逐节点查看 W / A / Acc / Out / State 时,可打开完整交互图

30 秒复习
  • 一句话:这张示例图说明 Prefill 应按算子核对混合精度,而不是用一个 W4A8 标签覆盖整张计算图。
  • 三个判断:Linear 看 W/A/Acc/Out;Attention 与 BMM 按各自 operand 看;KV Cache 要作为 State 单独核对读取和转换。
  • 来源问题:配置声明了什么、Trace 实际执行了什么 Kernel、转换边界在哪里,三者必须能对应到同一模型与运行身份。
  • 边界:模型 revision、vLLM commit、Trace ID、采集配置与原始产物缺失时,具体 dtype 路径只能作为待核验候选,也不能外推为其他模型或 Decode 路径。

GLM-5.2 同一层中的 W4A8、低精度 BMM、BF16 Attention 与 KV8 候选精度路径

先读懂图里的格式

图中用 FP4 E2M1 表示权重或低精度 BMM operand,用 FP8 E4M3 表示动态量化后的激活或 KV 状态,用 BF16 表示层间张量和 Attention。值格式、Scale 粒度与 runtime recipe 的完整解释由 FP4/FP8 量化维护;这里仅用它们标注待核验的算子边界。

GEMM 与 BMM

GEMM 完成一组矩阵乘法:

AM×KWK×NYM×NA_{M \times K} W_{K \times N} \longrightarrow Y_{M \times N}

一条候选执行路径可以写成:

BF16 hidden
  → 动态量化为 FP8 E4M3
  → FP8 activation × FP4 E2M1 weight
  → FP32 accumulate
  → BF16 output

只有 Trace 证实上述 operand、累加和输出 dtype 后,才能把这条路径记作 W4A8

BMM 同时执行一批矩阵乘法:

XM×K(b)YK×N(b)ZM×N(b),b=1,2,,BX^{(b)}_{M \times K} Y^{(b)}_{K \times N} \longrightarrow Z^{(b)}_{M \times N}, \qquad b = 1, 2, \ldots, B

BMM 两侧经常都是运行时张量,因此直接写两个 operand 的精度更清晰。本页用 FP4 × FP4BF16 × FP4 作为两条候选路径;实际采用哪条必须由同一运行身份下的 Trace 证明。

候选算子级精度合同

模块待核验的候选精度主要目标
Linear / 部分 MoE GEMMW=FP4,A=FP8,Acc=FP32,Out=BF16降低权重容量与带宽,使用低精度 Tensor Core
部分 DSA / MLA BMMFP4×FP4 或 BF16×FP4按 BMM 的 operand 和 shape 选择 kernel
Sparse AttentionQ/K/V=BF16,Out=BF16支撑点积、归约和 Softmax 的数值范围
KV CacheState=FP8,读取后转换为 BF16降低长上下文 Cache 容量和读取流量

若 Trace 中出现 KVGatherUpconvert,应核对它是否从 FP8 Cache 聚合 K/V 并输出 BF16 K/V。该过程本身没有模型权重 operand,属于状态读取和精度转换。

如何核对这张执行图

  1. 从模型结构列出 Linear、BMM、Attention 与 KV Cache 节点。
  2. 用量化配置标注每个节点声明的 operand、Scale、累加、输出与状态精度。
  3. 用 Trace 核对实际 Kernel、shape、cast 与 KVGatherUpconvert 等转换边界。
  4. 只有前三步一致,才能把对应 dtype 和转换成本写进仿真;不一致处应标记为待核验或 fallback。

相关页面