CANN ops-math 量化模式详解:从 T/C/K/G/B 量化粒度到全量化、伪量化与 MX 量化
2026/9/19 1:31:44 网站建设 项目流程

CANN ops-math 量化模式详解:从 T/C/K/G/B 量化粒度到全量化、伪量化与 MX 量化

【免费下载链接】ops-math本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-math

本文基于 CANN ops-math 开源算子库《量化介绍》系统展开,讲解 NPU 上 Matmul 等 cube(矩阵)类算子的量化原理、静态/动态量化差异,以及 pertensor(T)、perchannel(C)、pertoken(K)、pergroup(G)、perblock(B)五种量化粒度的参数 shape 推导规则,并梳理全量化、伪量化与 MX 量化等常见组合方案。读完本文,你将能正确理解量化参数 scale 的 shape 与 reduce 轴的关系,看懂仓库中量化相关算子(如 weight_quant_preprocess)的接口文档与源码实现。

为什么需要量化:cube 算子的高 bit 到低 bit 转换

量化广泛应用于深度学习模型中,特别是在推理过程中。通过量化,模型可以在硬件上更高效地运行,减少计算资源的消耗并加速推理过程,同时降低模型的存储需求。

在 CANN 算子层面,量化特指对神经网络中 Matmul 等矩阵(cube)类算子的输入 Tensor 从高 bit 到低 bit 转换的计算过程,同时生成对应的量化参数 scale。整体计算流程为:

  1. 高 bit 输入 Tensor 经过量化,转换为低 bit 数值,并同步计算得到量化参数 scale;
  2. 低 bit 数据送入 cube 单元完成矩阵乘计算(低 bit 计算在 NPU 硬件上吞吐更高、能耗更低);
  3. cube 计算完成后,通过量化参数 scale 将低 bit 结果转换回高 bit 数值。

经过上述闭环,整体计算结果的正确性得到保证(效果与直接用高 bit 计算近似等价),同时有效提升计算效率。这就是量化作为 NPU 加速关键手段的价值所在。

静态量化与动态量化

按量化参数的确定时机,量化分为两类,二者在推理与训练场景下的选型原则不同:

量化类型量化参数来源适用场景性能特点
静态量化使用预先确定的量化参数推理场景下对权重 weight 的量化一般采用静态量化量化算子性能更好
动态量化使用输入数据在线计算量化参数推理场景下对激活 activation 的量化,以及训练场景(为提升量化精度)因在线生成量化参数,量化算子性能略差,但更能适应数据变化、精度更高

简言之:静态量化以性能见长,动态量化以精度和自适应能力见长,实际部署中常对 weight 走静态量化、对 activation 走动态量化。

量化模式(量化粒度)总览

量化模式(又称量化粒度)是指对算子的不同输入 Tensor 采用不同的量化计算级别。理解该部分前需先约定两个概念:

  • m、n、k 变量分别表示 Tensor 计算的不同轴大小;
  • 左矩阵、右矩阵分别指 cube 算子中用于矩阵乘法计算的两个输入 Tensor,一般左矩阵代表激活 activation、右矩阵代表权重 weight,请按实际情况理解和使用。

CANN ops-math 支持的五种基础量化模式如下表:

量化模式简称量化对象量化参数 shape(左矩阵 (m, k) / 右矩阵 (k, n))
pertensorT左矩阵或右矩阵(1, )
perchannelC右矩阵(n, )
pertokenK左矩阵(m, )
pergroupG左矩阵或右矩阵左:(m, k/gs);右:(k/gs, n)
perblockB左矩阵或右矩阵左:(m/bs, k/bs);右:(k/bs, n/bs)

各模式在 reduce 轴(k 轴)上的处理方式各不相同,下面逐一展开。

pertensor 量化(T 量化)

pertensor 量化中,量化对象既可以是左矩阵,也可以是右矩阵,每个 Tensor 共用一个相同的量化参数,是最粗粒度的量化方式。

假设左矩阵 shape 为 (m, k)、右矩阵 shape 为 (k, n),k 为 reduce 轴,则生成的量化参数 shape 为 (1, ),即整个 Tensor 仅维护一个 scale:

T 量化实现最简单、开销最小,但精度损失也相对较大,通常用于对精度不敏感或参数分布均匀的场景。

perchannel 量化(C 量化)

perchannel 量化中,量化对象是右矩阵(即 weight),每个 channel 分别使用独立的量化参数。

假设右矩阵 shape 为 (k, n),k 为 reduce 轴,则生成的量化参数 shape 为 (n, ),即沿 n 轴为每个输出 channel 维护一个 scale:

C 量化对权重按输出通道分别缩放,能更好地适配 weight 的逐通道分布差异,是伪量化 Matmul 中权重量化的主流选择。

pertoken 量化(K 量化)

pertoken 量化中,量化对象是左矩阵(即 activation),每个 token 分别使用独立的量化参数。

假设左矩阵 shape 为 (m, k),k 为 reduce 轴,则生成的量化参数 shape 为 (m, ),即沿 m 轴为每个 token 维护一个 scale:

K 量化能动态适应激活数据逐 token 的分布变化,与动态量化配合常用于大模型推理中的激活量化。

pergroup 量化(G 量化)

pergroup 量化中,量化对象既可以是左矩阵,也可以是右矩阵,在 reduce 轴上对数据分组,每组使用独立的量化参数。

  • 假设左矩阵 shape 为 (m, k),k 为 reduce 轴,在 k 轴上分组,group size 为 gs,则生成的量化参数 shape 为 (m, k/gs);
  • 假设右矩阵 shape 为 (k, n),k 为 reduce 轴,在 k 轴上分组,group size 为 gs,则生成的量化参数 shape 为 (k/gs, n)。

G 量化在粒度和开销之间取得较好平衡,是当前低 bit 权重量化(如 INT4、FP8 场景)中应用最广泛的模式之一。

perblock 量化(B 量化)

perblock 量化中,量化对象既可以是左矩阵,也可以是右矩阵,在所有轴上对数据分块,每块使用独立的量化参数。

  • 假设左矩阵 shape 为 (m, k),k 为 reduce 轴,在 m、k 轴上分别按 (bs, bs) 块对数据分组,bs 为 block size,则生成的量化参数 shape 为 (m/bs, k/bs);
  • 假设右矩阵 shape 为 (k, n),k 为 reduce 轴,在 k、n 轴上分别按 (bs, bs) 块对数据分组,bs 为 block size,则生成的量化参数 shape 为 (k/bs, n/bs)。

B 量化的量化粒度最细,理论上精度表现最好,但量化参数数量也最多,需在存储开销与精度之间权衡。

常见组合量化

在实际模型中,左右矩阵往往采用不同的量化模式,形成组合量化方案:

全量化

全量化一般指对左、右矩阵均进行量化的模式,常见组合包括:

  • pertensor-perchannel 量化模式(简称 T-C 量化模式):左矩阵 T 量化、右矩阵 C 量化;
  • pertoken-perchannel 量化模式(简称 K-C 量化模式):左矩阵 K 量化、右矩阵 C 量化,是大模型权重量化 + 激活动态量化的经典组合;
  • pergroup-perblock 量化模式(简称 G-B 量化模式);
  • pertensor-perchannel-pergroup 量化模式(简称 T-CG 量化模式);
  • perblock-perblock 量化模式(简称 B-B 量化模式)。

伪量化

伪量化一般指仅对权重矩阵(weight)进行量化的模式,包括 perchannel 量化模式(简称 C 量化模式)。伪量化 Matmul 中权重在离线阶段完成低 bit 转换并配套量化参数,运行时仅需对权重做格式与参数的预处理,即可在不改动高 bit 激活计算路径的前提下获得量化加速收益。

MX 量化

MX 量化(Microscaling Formats)指由开放计算项目(OCP)制定的低精度数据表示方式,属于 pergroup 量化模式,表示量化参数类型为 FLOAT8_E8M0 且 group size 为 32 的特例情况。仓库的数据类型定义(见 data_type.md)中已包含 ACL_FLOAT8_E8M0 对应的 FLOAT8_E8M0 类型,为 MX 量化的量化参数提供了类型支撑。

仓库中的量化工程实践

《量化介绍》是 CANN ops-math 基本概念文档(basic_concept.md)体系中的一员,与两段式接口、数据结构、数据类型、数据格式、sparse 模式等文档并列,用于支撑开发者理解仓库中各类量化相关算子。

在开源仓库中可以直接找到量化的落地实现。以伪量化 Matmul 的配套算子aclnnWeightQuantPreprocess(见 aclnnWeightQuantPreprocess.md 及 源码目录)为例:

  • 功能上,它完成伪量化 Matmul(包括 QuantBatchMatmulV5、GroupedMatmul-伪量化、WeightQuantBatchMatmulV2)的参数预处理:主要将 weight 从 ND 格式转换为 FRACTAL_NZ 格式(MM_A16S4 数据流的 pertensor 及 perchannel/pergroup 转置场景为 ND 直拷透传),并在需要时对 weightScale、weightOffsetOptional、biasOptional 进行同步处理;
  • 接口上遵循两段式调用:先调用aclnnWeightQuantPreprocessGetWorkspaceSize获取 workspace 大小及执行器,再调用aclnnWeightQuantPreprocess执行计算,输出张量需按接口约束中的 shape 计算公式自行构造;
  • 该算子在当前仓库中支持 Ascend 950 系列产品,A3/A2 及早期训练推理系列产品不支持,产品支持矩阵可在其接口文档中查看。

结合本文的量化粒度知识即可理解其实现:pertensor/perchannel/pergroup 等不同权重量化粒度,对应 weightScale 不同的 shape 与转置处理路径,预处理算子正是围绕这些粒度差异完成格式转换与参数同步的。

小结

量化是 NPU 上提升模型推理与训练效率的关键技术。本文从 CANN 算子的角度梳理了静态/动态量化的选型原则,以及 T、C、K、G、B 五种量化粒度的量化对象与量化参数 shape 推导规则,并介绍了 T-C、K-C、G-B、T-CG、B-B 等全量化组合、C 伪量化以及 MX 量化特例。理解这些基础概念后,再阅读仓库中 weight_quant_preprocess 等量化算子源码与文档,即可快速建立"量化粒度 → 参数 shape → 底层实现"的完整认知链路。

【免费下载链接】ops-math本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-math

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询