跳转至

线性层量化

词条类别:量化数据格式(量化模式
英文名称:Linear Layer Quantization
应用领域:大语言模型量化压缩、推理加速
msModelSlim 实现msmodelslim/ir/w8a8_static.py*FakeQuantLinear 系列)

1. 概述

线性层量化是对大语言模型中占比最高的线性层(Linear / MatMul)的权重(W)与激活(A)进行量化的一类量化模式,属于量化模式中的主体类别。它量化的对象是线性层矩阵乘法两侧的张量:权重是静态参数、每个 token 都必须整体读取;激活是随输入实时变化的中间张量。对这两类张量的位宽组合,通常用 WxAy 记法表示,如 W8A8 表示权重与激活均为 8bit(INT8)。

为何聚焦线性层:每个 token 前向都要读取全部权重,权重位宽直接决定访存带宽瓶颈;激活位宽则决定整数 GEMM 能否落地。因此此类模式数量最多,是量化模式的主体。典型如 W8A8 静态量化——对线性层权重与激活均做 INT8 静态量化。


2. 词条介绍

2.1 线性层如何运算与可量化对象

线性层(Linear / MatMul)是 Transformer 的主体计算——Q/K/V 投影、注意力输出投影、MLP 的上/门/下三层都是线性层。一次线性层计算就是一次矩阵乘法:

$$Y = X \cdot W + b$$

其中 $X$ 是输入激活(形状 $(batch, seq, in_dim)$),$W$ 是权重(形状 $(in_dim, out_dim)$),$b$ 是偏置,$Y$ 是输出激活。LLM 推理分两个阶段:prefill 一次处理整个输入 prompt(计算密集),decode 逐个生成 token(访存密集)。

矩阵乘法只有两个输入张量,因此线性层中可量化对象也只有两个:

  • 权重 $W$:静态张量,训练后固定、每步推理都要整体读取一次。decode 阶段权重访存是主要吞吐瓶颈,因此权重量化侧重压缩——压低位宽以减小访存,如 W8A8 静态量化 的 INT8 权重、W4A8 动态量化 的 INT4 权重。
  • 输入激活 $X$:动态张量,由前一层实时产生、分布随输入变化,对量化误差敏感。激活量化侧重保精度,因此通常优选动态量化等细粒度的量化方式,如 W8A8 动态量化 的激活 per-token 动态量化。

量化模式本质上是对这两个张量分别应用某种量化(位宽、数据类型、参数获取方式、量化粒度、对称性)后的组合:如 W8A8 静态量化 对 W 与 A 均做 8bit INT8 静态量化、W8A16 静态量化 只量化 W 而 A 保持 16bit、W4A8 动态量化 则 W 4bit、A 8bit 且激活走动态。两个张量各自的维度选择,就构成下述"该类一般的量化选择"。


2.2 该类一般的量化选择

同一类线性层结构可实施不同的量化方式,差异体现在以下几个维度:

  • 位宽组合:权重与激活可取相同或不同位宽。相同位宽(W8A8、W4A4)压缩与精度较均衡;激活位宽高于权重(W8A16、W4A8)牺牲部分压缩换取精度。见 W8A16 静态量化W4A8 动态量化
  • 参数获取方式:静态(离线校准、推理时固化,如 W8A8 静态量化)或动态(推理在线统计、免校准,如 W8A8 动态量化W4A4 动态量化)。
  • 量化粒度:权重通常按通道(per-channel)或分组(per-group)静态量化;激活通常按 token(per-token)动态量化或按整个张量(per-tensor)静态量化;MX 系列采用按块(per-block)块级共享指数。
  • 数据类型:INT 整数(INT8/INT4)、FP8 浮点(如 W8A8 FP8 动态量化)、MX 块级共享指数(如 W4A4 MX 动态量化W4A4 MX 双 Scale 量化)。
  • 特殊变体W8A8 PD-Mix 量化 按 Prefill/Decode 阶段切换激活策略;W8A8 稀疏量化 不铺满 INT8 的 256 个档位,再经二次压缩提高压缩率;浮点稀疏量化 不降位宽、对浮点权重做置零稀疏。

各类模式在精度损失(相对浮点基线的劣化程度)与性能(权重/激活访存与计算收益)之间取舍。精度损失分 低 / 中 / 高 三档,不直接比较精度高低。

模式 精度损失 性能(定性) 取舍要点
W8A8 动态量化 激活 per-token 动态,8bit 方案里损失较小
W8A8 FP8 动态量化 与 W8A8 动态同档,依赖 FP8 算子
W8A8 PD-Mix 量化 Prefill per-token、Decode 静态,整体与 W8A8 动态同档
W8A8 静态量化 满量程 INT8 静态,损失仍属低档
W8A8 MX 动态量化 8bit MX per-block,与其他 W8A8 同档
W8A16 静态量化 激活不量化,损失低;无整数 GEMM,性能收益减半
浮点稀疏量化 不降位宽,但置零会引入中等精度损失
W8A8 稀疏量化 只用 256 档中的子集,损失高于满量程 W8A8,换更高压缩率
W4A8 动态量化 权重 4bit、激活 8bit 动态,损失中等
W4A8 MX 动态量化 与 W4A8 动态同档
W4A4 动态量化 最高 双 4bit,精度损失高,访存收益最大
W4A4 MX 动态量化 最高 W4A4 类,双 4bit MX
W4A4 MX 双 Scale 量化 仍属 W4A4 类;双层 scale 只减轻损失,不改变档位

注:表中"性能"特指量化后的权重/激活访存与计算收益;实际损失与收益取决于目标硬件算子支持与模型分布,详见各模式词条与量化模式模式索引。


3. 该类下的模式清单

以下为 msModelSlim 支持的线性层量化模式清单(完整规格含承载 IR 类与量化参数,见量化模式模式索引):

模式 一句话
W8A8 静态量化 权重与激活均 INT8 静态
W8A8 动态量化 权重静态、激活 per-token 动态
W4A4 动态量化 权重与激活均 INT4、激活动态
W8A16 静态量化 仅权重 INT8,激活 FP16 不量化
W4A8 动态量化 权重 INT4、激活 INT8 动态
W8A8 PD-Mix 量化 激活策略随 Prefill/Decode 阶段切换
W8A8 FP8 动态量化 权重与激活均 FP8(E4M3) 动态
W8A8 MX 动态量化 权重与激活均 MXFP8 per-block 动态
W4A8 MX 动态量化 权重 MXFP4、激活 MXFP8 per-block 动态
W4A4 MX 动态量化 权重与激活均 MXFP4 per-block 动态
W4A4 MX 双 Scale 量化 MXFP4 双 scale、per-block 动态
W8A8 稀疏量化 INT8 只用码本子集,再经 W8A8SC 二次压缩,压缩率高于 W8A8
浮点稀疏量化 16bit 权重/激活,权重置零稀疏;W16A16SC 为二次压缩形态
SVDQuant 量化 低秩分解 + 残差低比特量化,配合线性层量化使用

4. 关联流程


5. 关联词条

  • 量化模式:上位概念,本词条是"线性层量化"类别。
  • KVCache 量化:同位概念,作用于注意力 K/V 缓存的量化类别,可与本类叠加。
  • FA 量化:同位概念,KVCache 量化的进阶。
  • W8A8 静态量化:下位概念,本类别下最基础的静态模式。
  • W8A8 稀疏量化:下位概念,INT8 收窄码本后再二次压缩。
  • 浮点稀疏量化:下位概念,不降位宽的置零稀疏基线。
  • 线性量化算法:配套术语,描述线性层量化模式的处理器实现。

6. 参考文档

  1. 线性量化参数配置流程指南
  2. 量化模式