线性层量化 量化术语百科词条
词条类别:量化数据格式(量化模式) 英文名称:Linear Layer Quantization 应用领域:大语言模型量化压缩、推理加速 msModelSlim 实现:
msmodelslim/ir/w8a8_static.py(*FakeQuantLinear系列)
概述
线性层量化是对大语言模型中占比最高的**线性层(Linear / MatMul)的权重(W)与激活(A)**进行量化的一类量化模式,属于量化模式中的主体类别。它量化的对象是线性层矩阵乘法两侧的张量:权重是静态参数、每个 token 都必须整体读取;激活是随输入实时变化的中间张量。对这两类张量的位宽组合,通常用 WxAy 记法表示,如 W8A8 表示权重与激活均为 8bit(INT8)。
为何聚焦线性层:每个 token 前向都要读取全部权重,权重位宽直接决定访存带宽瓶颈;激活位宽则决定整数 GEMM 能否落地。因此此类模式数量最多,是量化模式的主体。典型如 W8A8 静态量化——对 Linear 层权重与激活均做 INT8 静态量化。
线性层如何运算与可量化对象
线性层(Linear / MatMul)是 Transformer 的主体计算——Q/K/V 投影、注意力输出投影、MLP 的上/门/下三层都是线性层。一次线性层计算就是一次矩阵乘法:
Y=X⋅W+bY = X \cdot W + b
其中 XX 是输入激活(形状 (batch,seq,in_dim)(batch, seq, in\_dim)),WW 是权重(形状 (in_dim,out_dim)(in\_dim, out\_dim)),bb 是偏置,YY 是输出激活。LLM 推理分两个阶段:prefill 一次处理整个输入 prompt(计算密集),decode 逐个生成 token(访存密集)。
矩阵乘法只有两个输入张量,因此线性层中可量化对象也只有两个:
- 权重 WW:静态张量,训练后固定、每步推理都要整体读取一次。decode 阶段权重访存是主要吞吐瓶颈,因此权重量化侧重压缩——压低位宽以减小访存,如 W8A8 静态量化 的 INT8 权重、W4A8 动态量化 的 INT4 权重。
- 输入激活 XX:动态张量,由前一层实时产生、分布随输入变化,对量化误差敏感。激活量化侧重保精度——多配合动态量化或细粒度(如 per-token),如 W8A8 动态量化 的激活 per-token 动态量化。
量化模式本质上是对这两个张量分别应用某种量化(位宽、数据类型、参数获取方式、量化粒度、对称性)后的组合:如 W8A8 静态量化 对 W 与 A 均做 8bit INT8 静态量化、W8A16 静态量化 只量化 W 而 A 保持 16bit、W4A8 动态量化 则 W 4bit、A 8bit 且激活走动态。两个张量各自的维度选择,就构成下述"该类一般的量化选择"。
该类一般的量化选择
同一类线性层结构可实施不同的量化方式,差异体现在以下几个维度:
- 位宽组合:权重与激活可取相同或不同位宽。相同位宽(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 阶段切换激活策略;W16A16S 量化 不降位宽、承载上游稀疏权重,作为稀疏量化基线。
各类模式在精度(量化误差对模型输出的影响)与性能(权重/激活访存与计算收益)之间取舍,可定性对比如下:
| 模式 | 精度(定性) | 性能(定性) | 取舍要点 |
|---|---|---|---|
| W8A8 静态量化 | 高 | 高 | INT8 主流方案,需离线校准,静态 scale 对分布变化略敏感 |
| W8A8 动态量化 | 更高 | 高 | 激活 per-token 在线统计 scale,免校准,但增加少量在线开销 |
| W4A4 动态量化 | 中 | 最高 | 双 4bit 访存收益最大,激活 4bit 精度风险高 |
| W8A16 静态量化 | 最高 | 中 | 仅压缩权重,激活保 16bit 精度,性能收益减半 |
| W4A8 动态量化 | 中高 | 高 | 权重 4bit 极致压缩,激活 8bit 保精度,压缩与精度的折中 |
| W8A8 PD-Mix 量化 | 高 | 高 | 激活策略随 prefill/decode 切换,兼顾两阶段特性 |
| W8A8 FP8 动态量化 | 高 | 高 | FP8 保留浮点动态范围、对离群值耐受,依赖 FP8 算子 |
| W8A8 MX 动态量化 | 中高 | 高 | MXFP8 块级共享指数,缩放参数开销低,依赖 MX 硬件 |
| W4A8 MX 动态量化 | 中高 | 高 | MXFP4 权重 + MXFP8 激活,访存收益与精度折中 |
| W4A4 MX 动态量化 | 中 | 最高 | 双 4bit MX 压缩最大化,依赖 MX 硬件、需块对齐 |
| W4A4 MX 双 Scale 量化 | 中高 | 高 | 双层 scale 兜底 4bit 精度,实现与配置更复杂 |
| W16A16S 量化 | 最高 | 中 | 不降位宽,承载上游稀疏权重,作为稀疏基线 |
注:表中"性能"特指量化后的权重/激活访存与计算收益,均为定性排序;实际收益取决于目标硬件算子支持与模型分布,详见各模式词条与量化模式「模式索引」。
该类下的模式清单
以下为 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 动态 |
| W16A16S 量化 | 16bit 权重/激活(含稀疏) |
| SVDQuant | 低秩分解 + 残差低比特量化,配合线性层量化使用 |
关联流程
关联词条
- 量化模式:上位概念,本词条是"线性层量化"类别。
- KVCache 量化:同位概念,作用于注意力 K/V 缓存的量化类别,可与本类叠加。
- FA 量化:同位概念,KVCache 量化的进阶。
- W8A8 静态量化:下位概念,本类别下最基础的静态模式。
- 《线性量化算法说明》:配套术语,描述线性层量化模式的处理器实现。