已合并
[Doc] 新增量化模式术语词条与量化模式详档 #818
rookie_hongchuan创建于 25 天前
[Doc] 新增量化模式术语词条与量化模式详档 #818
已合并
共 29 个文件变更+2295-1
| @@ -4,7 +4,9 @@ | |||
| 4 | |--------|------| | 4 | |--------|------| |
| 5 | | `model` | 《[大模型支持矩阵](model/README.md)》 | | 5 | | `model` | 《[大模型支持矩阵](model/README.md)》 | |
| 6 | | `quantization_algorithms` | 《[量化算法](quantization_algorithms/README.md)》 | | 6 | | `quantization_algorithms` | 《[量化算法](quantization_algorithms/README.md)》 | |
| 7 | +| `quantization_basic` | 《[量化基础](quantization_basic/README.md)》 | | ||
| 8 | +| `quantization_mode` | 《[量化模式](quantization_mode/README.md)》 | | ||
| 7 | | `tuning_strategies` | 《[调优策略](tuning_strategies/README.md)》 | | 9 | | `tuning_strategies` | 《[调优策略](tuning_strategies/README.md)》 | |
| 8 | | `quantization_format` | 《[量化格式](quantization_format/README.md)》 | | 10 | | `quantization_format` | 《[量化格式](quantization_format/README.md)》 | |
| 9 | -| `ptq` | 《[训练后量化](ptq/convert/usage.md)》 | | 11 | +| `ptq` | 《[训练后量化](ptq/convert/usage_weight_conversion.md)》 | |
| 10 | | `parallel` | 《[多卡并行](parallel/README.md)》| | 12 | | `parallel` | 《[多卡并行](parallel/README.md)》| |
| @@ -0,0 +1,52 @@ | |||
| 1 | +# 量化基础 量化术语百科词条 | ||
| 2 | + | ||
| 3 | +<!-- waiver: G01 原因:本文件为量化基础目录的索引文档,不适用 term_<english_name>.md 词条命名 --> | ||
| 4 | +<!-- waiver: S01 原因:索引/类别文档采用目录结构(术语列表 / 模式清单),不适用词条模板的「2. 词条介绍」必填章节,依 01 清单 S03 组织自身结构 --> | ||
| 5 | + | ||
| 6 | +> **英文名称**:Quantization Basics | ||
| 7 | +> **应用领域**:大语言模型量化压缩、推理加速、KVCache 压缩 | ||
| 8 | + | ||
| 9 | +--- | ||
| 10 | + | ||
| 11 | +## 一句话定位 | ||
| 12 | + | ||
| 13 | +本目录独立成篇,集中介绍量化领域的基础术语,是阅读[量化模式](../quantization_mode/README.md)等知识词条的前置知识,按术语拆分为以下词条: | ||
| 14 | + | ||
| 15 | +| 术语 | 词条 | 内容 | | ||
| 16 | +|------|------|------| | ||
| 17 | +| 量化 / 反量化 | [量化与反量化](term_quantization.md) | 量化/反量化公式、scale/zero_point、静态/动态、量化粒度、对称性 | | ||
| 18 | +| 数据类型 FP16 / BF16 | [数据类型:FP16 / BF16](term_fp16_bf16.md) | 16位浮点格式,未量化基准 | | ||
| 19 | +| 数据类型 INT8 | [数据类型:INT8](term_int8.md) | 8位整数格式 | | ||
| 20 | +| 数据类型 INT4 | [数据类型:INT4](term_int4.md) | 4位整数格式 | | ||
| 21 | +| 数据类型 FP8 | [数据类型:FP8(E4M3)](term_fp8.md) | 8位浮点格式 | | ||
| 22 | +| 数据类型 MXFP8 / MXFP4 | [数据类型:MXFP8 / MXFP4](term_mxfp.md) | 块级共享指数格式 | | ||
| 23 | + | ||
| 24 | +建议按顺序阅读:先读[量化与反量化](term_quantization.md)理解量化机制,再按需查阅各数据类型词条;量化带来的计算收益(整数 GEMM)在[量化模式](../quantization_mode/README.md)中展开。 | ||
| 25 | + | ||
| 26 | +--- | ||
| 27 | + | ||
| 28 | +## WxAy 记法 | ||
| 29 | + | ||
| 30 | +模式名常用 `WxAy` 记法(如 W8A8、W4A4)表示[线性层量化](../quantization_mode/linear_layer_quantization/README.md)中**权重(W)与激活(A)的位宽组合**,其中 `y` 是可选后缀,表示**数据类型或参数获取方式**(如 W8A8 静态、W4A4 MX 动态)。完整说明见[量化模式](../quantization_mode/README.md)「如何理解一个量化模式」一节。 | ||
| 31 | + | ||
| 32 | +--- | ||
| 33 | + | ||
| 34 | +## 关联流程 | ||
| 35 | + | ||
| 36 | +- 《[一键量化完整指南](../../user_guide/usage_quick_quantization.md)》:量化任务的执行入口。 | ||
| 37 | +- 《[量化精度调优指南](../../user_guide/process_quantization_precision_tuning.md)》:数据类型与量化方案导致的精度问题可通过该流程排查与调优。 | ||
| 38 | + | ||
| 39 | +--- | ||
| 40 | + | ||
| 41 | +## 关联词条 | ||
| 42 | + | ||
| 43 | +- [量化模式](../quantization_mode/README.md):目标阅读对象,本目录词条是其前置基础知识。 | ||
| 44 | +- [线性层量化](../quantization_mode/linear_layer_quantization/README.md):下位概念,WxAy 记法与 GEMM 的具体应用。 | ||
| 45 | +- [KVCache 量化](../quantization_mode/kv_cache_quantization/README.md):下位概念,量化在缓存 K/V 张量上的应用。 | ||
| 46 | +- [FA 量化](../quantization_mode/fa_quantization/README.md):下位概念,量化在注意力矩阵运算上的应用。 | ||
| 47 | + | ||
| 48 | +--- | ||
| 49 | + | ||
| 50 | +## 参考资料 | ||
| 51 | + | ||
| 52 | +1. 《[量化模式](../quantization_mode/README.md)》 | ||
| @@ -0,0 +1,57 @@ | |||
| 1 | +# 数据类型:FP16 / BF16 量化术语百科词条 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化基础概念([量化基础](../README.md)) | ||
| 4 | +> **英文名称**:FP16 / BF16(16-bit Floating Point) | ||
| 5 | +> **应用领域**:权重/激活的未量化基准、高精度保留场景 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 1. 概述 | ||
| 10 | + | ||
| 11 | +**FP16** 与 **BF16** 都是 16位浮点格式、各占 2字节/元素,是模型权重与激活的**常见未量化格式**,也是各类量化"减半 / 1/4"压缩对比的**基准**——[INT8](term_int8.md) 的"访存减半"即相对它们而言。FP16 尾数精度高、可表示范围与 FP32 相近;BF16 的指数范围与 FP32 完全相同、但尾数精度更低。量化模式常以它们作为"不量化"的高精度基线,如 [W8A16 静态量化](../quantization_mode/linear_layer_quantization/term_w8a16_static.md) 的激活保持 FP16。 | ||
| 12 | + | ||
| 13 | +--- | ||
| 14 | + | ||
| 15 | +## 2. 词条介绍 | ||
| 16 | + | ||
| 17 | +### 定义 | ||
| 18 | + | ||
| 19 | +- **FP16**:1符号 + 5指数 + 10尾数。指数范围与 FP32 相近(最大有限值约 65504),10位尾数保证较高的数值精度。 | ||
| 20 | +- **BF16**:1符号 + 8指数 + 7尾数。指数范围与 FP32 完全相同(可表示到约 3.4×10^38),但尾数仅 7位、局部精度低于 FP16;适合需要大动态范围、可牺牲局部精度的训练/推理场景。 | ||
| 21 | + | ||
| 22 | +两者位宽相同(均为 2字节),对某个张量的占用与访存一致;区别只在"动态范围"与"局部精度"的取舍。相比 8位格式([INT8](term_int8.md)、[FP8](term_fp8.md)),它们占 2字节、是这些格式的两倍,因此通常作为量化前的原始存储与带宽基线。 | ||
| 23 | + | ||
| 24 | +### 使用场景 | ||
| 25 | + | ||
| 26 | +- **未量化基线**:量化前的权重/激活默认常为 16位浮点(FP16 或 BF16,均 2字节),各类量化的压缩比、带宽收益都以它为基准衡量。 | ||
| 27 | +- **高精度保留层**:对量化误差特别敏感的激活(如 [W8A16 静态量化](../quantization_mode/linear_layer_quantization/term_w8a16_static.md) 的激活)保持 FP16,不参与量化。 | ||
| 28 | +- **FP16 与 BF16 的选择**:需要大动态范围用 BF16,需要局部精度用 FP16。训练与推理的数值格式通常保持一致——训练一般用 BF16(动态范围与 FP32 相同),推理因此也默认 BF16。 | ||
| 29 | + | ||
| 30 | +### 与相关类型对比 | ||
| 31 | + | ||
| 32 | +- 相比 [INT8](term_int8.md):FP16/BF16 是未量化浮点、零量化误差,但占 2字节、访存与计算开销翻倍;INT8 以一半位宽换取一半存储/带宽。 | ||
| 33 | +- 相比 [FP8(E4M3)](term_fp8.md):FP16/BF16 动态范围更大(BF16 与 FP32 相同)、精度更稳;但位宽翻倍、压缩收益更小。 | ||
| 34 | +- 相比 [MXFP8](term_mxfp.md):FP16/BF16 每个元素独立完整表示、无块级共享参数;MXFP8 用块级共享指数在 8位内保留浮点动态范围。 | ||
| 35 | + | ||
| 36 | +--- | ||
| 37 | + | ||
| 38 | +## 3. 关联流程 | ||
| 39 | + | ||
| 40 | +- 《[一键量化完整指南](../../user_guide/usage_quick_quantization.md)》:量化任务的执行入口。 | ||
| 41 | +- 《[量化精度调优指南](../../user_guide/process_quantization_precision_tuning.md)》:数据类型与量化方案导致的精度问题可通过该流程排查与调优。 | ||
| 42 | + | ||
| 43 | +--- | ||
| 44 | + | ||
| 45 | +## 4. 关联词条 | ||
| 46 | + | ||
| 47 | +- [量化基础](README.md):上位概念,本词条所属目录。 | ||
| 48 | +- [量化与反量化](term_quantization.md):配套术语,量化公式以 FP16/BF16 张量为输入。 | ||
| 49 | +- [数据类型 INT8](term_int8.md):配套术语,INT8 的压缩收益以 FP16/BF16 为基准衡量。 | ||
| 50 | +- [W8A16 静态量化](../quantization_mode/linear_layer_quantization/term_w8a16_static.md):配套模式,激活保持 FP16 不量化。 | ||
| 51 | + | ||
| 52 | +--- | ||
| 53 | + | ||
| 54 | +## 5. 参考文档 | ||
| 55 | + | ||
| 56 | +1. Kalamkar D et al. A Study of BFLOAT16 for Deep Learning Training. arXiv:1905.12322. https://arxiv.org/abs/1905.12322 | ||
| 57 | +2. 《[量化模式](../quantization_mode/README.md)》 | ||
| @@ -0,0 +1,54 @@ | |||
| 1 | +# 数据类型:FP8(E4M3) 量化术语百科词条 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化基础概念([量化基础](../README.md)) | ||
| 4 | +> **英文名称**:FP8(8-bit Floating Point,E4M3) | ||
| 5 | +> **应用领域**:权重、激活量化 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 1. 概述 | ||
| 10 | + | ||
| 11 | +**FP8** 是 8位浮点格式,本词条介绍其中的 **E4M3** 变体:**1符号 + 4指数 + 3尾数**,可表示范围约 $\pm448$(emax=8)。它像整数一样只有 8位、访存为 [FP16/BF16](term_fp16_bf16.md) 的一半,同时保留浮点动态范围,适合分布跨度大、对整数舍入敏感的场景。 | ||
| 12 | + | ||
| 13 | +--- | ||
| 14 | + | ||
| 15 | +## 2. 词条介绍 | ||
| 16 | + | ||
| 17 | +### 定义 | ||
| 18 | + | ||
| 19 | +E4M3 的位分配为:1位符号 + 4位指数 + 3位尾数,共 8位。4位指数提供较大的动态范围(最大约 448),3位尾数保证基本精度。 | ||
| 20 | + | ||
| 21 | +### 使用场景 | ||
| 22 | + | ||
| 23 | +- **权重与激活**:如 [W8A8 FP8 动态量化](../quantization_mode/linear_layer_quantization/term_w8a8_fp8_dynamic.md)。 | ||
| 24 | +- **离群值敏感场景**:相比 INT8 均匀分档,E4M3 浮点格式对宽动态范围与离群值更耐受,无需先做离群值抑制。 | ||
| 25 | +- 代价是依赖支持 FP8 GEMM 的硬件算子,生态面窄于 INT8。 | ||
| 26 | + | ||
| 27 | +### 与相关类型对比 | ||
| 28 | + | ||
| 29 | +- 相比 [INT8](term_int8.md):同为 8位、访存收益一致,但 E4M3 保留浮点动态范围、对离群值更耐受;代价是 FP8 硬件算子支持面窄。 | ||
| 30 | +- 相比 [MXFP8](term_mxfp.md):FP8 每个元素独立完整表示;MXFP8 每32元素共享一个 E8M0 指数、缩放参数开销更低。 | ||
| 31 | + | ||
| 32 | +--- | ||
| 33 | + | ||
| 34 | +## 3. 关联流程 | ||
| 35 | + | ||
| 36 | +- 《[一键量化完整指南](../../user_guide/usage_quick_quantization.md)》:量化任务的执行入口。 | ||
| 37 | +- 《[量化精度调优指南](../../user_guide/process_quantization_precision_tuning.md)》:数据类型与量化方案导致的精度问题可通过该流程排查与调优。 | ||
| 38 | + | ||
| 39 | +--- | ||
| 40 | + | ||
| 41 | +## 4. 关联词条 | ||
| 42 | + | ||
| 43 | +- [量化基础](README.md):上位概念,本词条所属目录。 | ||
| 44 | +- [量化与反量化](term_quantization.md):配套术语,FP8 量化的数学机制。 | ||
| 45 | +- [数据类型 MXFP8/MXFP4](term_mxfp.md):同类算法,同为 8bit 浮点格式。 | ||
| 46 | +- [GEMM](../quantization_mode/term_gemm.md):配套术语,FP8 输入走低精度浮点 GEMM。 | ||
| 47 | +- [W8A8 FP8 动态量化](../quantization_mode/linear_layer_quantization/term_w8a8_fp8_dynamic.md):配套模式,FP8 E4M3 的典型实现。 | ||
| 48 | + | ||
| 49 | +--- | ||
| 50 | + | ||
| 51 | +## 5. 参考文档 | ||
| 52 | + | ||
| 53 | +1. Kuzmin A et al. FP8 Formats for Deep Learning. arXiv:2209.05433. https://arxiv.org/abs/2209.05433 | ||
| 54 | +2. 《[量化模式](../quantization_mode/README.md)》 | ||
| @@ -0,0 +1,52 @@ | |||
| 1 | +# 数据类型:INT4 量化术语百科词条 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化基础概念([量化基础](../README.md)) | ||
| 4 | +> **英文名称**:INT4(4-bit Integer) | ||
| 5 | +> **应用领域**:权重量化、超低比特压缩 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 1. 概述 | ||
| 10 | + | ||
| 11 | +**INT4** 是 4位有符号整数,范围 $-8\sim7$,0.5字节/元素。相比 [INT8](term_int8.md) 压缩更大(权重为 [FP16/BF16](term_fp16_bf16.md) 的 1/4),但分辨率低,通常配合分组量化与专门的重构算法控制精度损失。 | ||
| 12 | + | ||
| 13 | +--- | ||
| 14 | + | ||
| 15 | +## 2. 词条介绍 | ||
| 16 | + | ||
| 17 | +### 定义 | ||
| 18 | + | ||
| 19 | +INT4 占 4位,可表示 $-8\sim7$ 共 16个整数档位。按[量化公式](term_quantization.md)映射到这些档位后存储,即为 INT4 量化。 | ||
| 20 | + | ||
| 21 | +### 使用场景 | ||
| 22 | + | ||
| 23 | +- **权重**:如 [W4A8 动态量化](../quantization_mode/linear_layer_quantization/term_w4a8_dynamic.md) 的 INT4 权重、[W4A4 动态量化](../quantization_mode/linear_layer_quantization/term_w4a4_dynamic.md)。 | ||
| 24 | +- **配合重构算法**:INT4 精度风险高,常配合分组量化与权重重构(如 [GPTQ](../quantization_algorithms/gptq/gptq.md)、[LAOS](../quantization_algorithms/laos/laos.md))降低损失。 | ||
| 25 | + | ||
| 26 | +### 与相关类型对比 | ||
| 27 | + | ||
| 28 | +- 相比 [INT8](term_int8.md):位宽减半、压缩更大;但分辨率低、精度风险高,一般只用于权重、不用于激活。 | ||
| 29 | +- 相比 [MXFP4](term_mxfp.md):INT4 均匀分档无浮点动态范围,对离群值更敏感;MXFP4 用块级共享指数保留动态范围。 | ||
| 30 | + | ||
| 31 | +--- | ||
| 32 | + | ||
| 33 | +## 3. 关联流程 | ||
| 34 | + | ||
| 35 | +- 《[一键量化完整指南](../../user_guide/usage_quick_quantization.md)》:量化任务的执行入口。 | ||
| 36 | +- 《[量化精度调优指南](../../user_guide/process_quantization_precision_tuning.md)》:数据类型与量化方案导致的精度问题可通过该流程排查与调优。 | ||
| 37 | + | ||
| 38 | +--- | ||
| 39 | + | ||
| 40 | +## 4. 关联词条 | ||
| 41 | + | ||
| 42 | +- [量化基础](README.md):上位概念,本词条所属目录。 | ||
| 43 | +- [量化与反量化](term_quantization.md):配套术语,INT4 量化的数学机制。 | ||
| 44 | +- [GEMM](../quantization_mode/term_gemm.md):配套术语,INT4 输入可走整数 GEMM。 | ||
| 45 | +- [W4A8 动态量化](../quantization_mode/linear_layer_quantization/term_w4a8_dynamic.md):配套模式,INT4 权重 + INT8 激活的典型实现。 | ||
| 46 | + | ||
| 47 | +--- | ||
| 48 | + | ||
| 49 | +## 5. 参考文档 | ||
| 50 | + | ||
| 51 | +1. Frantar E et al. GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers. arXiv:2210.17323. https://arxiv.org/abs/2210.17323 | ||
| 52 | +2. 《[量化模式](../quantization_mode/README.md)》 | ||
| @@ -0,0 +1,55 @@ | |||
| 1 | +# 数据类型:INT8 量化术语百科词条 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化基础概念([量化基础](../README.md)) | ||
| 4 | +> **英文名称**:INT8(8-bit Integer) | ||
| 5 | +> **应用领域**:权重、激活、KVCache 量化 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 1. 概述 | ||
| 10 | + | ||
| 11 | +**INT8** 是 8位有符号整数,范围 $-128\sim127$,1字节/元素。它是量化的**主流格式**:存储与带宽为 [FP16/BF16](term_fp16_bf16.md) 的一半,且整数格式可走 [GEMM](../quantization_mode/term_gemm.md) 加速,权重、激活、KVCache 均可使用。 | ||
| 12 | + | ||
| 13 | +--- | ||
| 14 | + | ||
| 15 | +## 2. 词条介绍 | ||
| 16 | + | ||
| 17 | +### 定义 | ||
| 18 | + | ||
| 19 | +INT8 占 8位,可表示 $-128\sim127$ 共 256个整数档位。对浮点张量按[量化公式](term_quantization.md)映射到这些档位后存储,即为 INT8 量化。 | ||
| 20 | + | ||
| 21 | +### 使用场景 | ||
| 22 | + | ||
| 23 | +- **权重**:如 [W8A8 静态量化](../quantization_mode/linear_layer_quantization/term_w8a8_static.md)、[W8A8 动态量化](../quantization_mode/linear_layer_quantization/term_w8a8_dynamic.md) 的权重。 | ||
| 24 | +- **激活**:配合动态量化(per-token),如 [W8A8 动态量化](../quantization_mode/linear_layer_quantization/term_w8a8_dynamic.md) 的激活。 | ||
| 25 | +- **KVCache**:如 [KVCache-PerChannel 量化](../quantization_mode/kv_cache_quantization/term_kv_cache_perchannel.md)。 | ||
| 26 | + | ||
| 27 | +### 与相关类型对比 | ||
| 28 | + | ||
| 29 | +- 相比 [FP8(E4M3)](term_fp8.md):INT8 是均匀分档、无浮点动态范围,对离群值更敏感;但硬件算子生态更成熟。 | ||
| 30 | +- 相比 [INT4](term_int4.md):分辨率更高、精度更稳;但位宽翻倍、压缩幅度较小。 | ||
| 31 | + | ||
| 32 | +--- | ||
| 33 | + | ||
| 34 | +## 3. 关联流程 | ||
| 35 | + | ||
| 36 | +- 《[一键量化完整指南](../../user_guide/usage_quick_quantization.md)》:量化任务的执行入口。 | ||
| 37 | +- 《[量化精度调优指南](../../user_guide/process_quantization_precision_tuning.md)》:数据类型与量化方案导致的精度问题可通过该流程排查与调优。 | ||
| 38 | + | ||
| 39 | +--- | ||
| 40 | + | ||
| 41 | +## 4. 关联词条 | ||
| 42 | + | ||
| 43 | +- [量化基础](README.md):上位概念,本词条所属目录。 | ||
| 44 | +- [量化与反量化](term_quantization.md):配套术语,INT8 量化的数学机制。 | ||
| 45 | +- [数据类型 FP16/BF16](term_fp16_bf16.md):配套术语,INT8 压缩收益的基准格式。 | ||
| 46 | +- [数据类型 FP8](term_fp8.md):同类算法,同为 8bit 数据格式。 | ||
| 47 | +- [数据类型 INT4](term_int4.md):同类算法,更低比特的整数格式。 | ||
| 48 | +- [GEMM](../quantization_mode/term_gemm.md):配套术语,INT8 输入可走整数 GEMM。 | ||
| 49 | +- [W8A8 静态量化](../quantization_mode/linear_layer_quantization/term_w8a8_static.md):配套模式,INT8 静态量化的典型实现。 | ||
| 50 | + | ||
| 51 | +--- | ||
| 52 | + | ||
| 53 | +## 5. 参考文档 | ||
| 54 | + | ||
| 55 | +1. 《[量化模式](../quantization_mode/README.md)》 | ||
| @@ -0,0 +1,55 @@ | |||
| 1 | +# 数据类型:MXFP8 / MXFP4 量化术语百科词条 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化基础概念([量化基础](../README.md)) | ||
| 4 | +> **英文名称**:MXFP8 / MXFP4(Microscaling Formats) | ||
| 5 | +> **应用领域**:权重、激活量化,超低比特压缩 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 1. 概述 | ||
| 10 | + | ||
| 11 | +**MX**(Microscaling,微缩放)是 OCP(Open Compute Project,开放计算项目)定义的一类**块级共享指数**格式:每 **32个元素**为一块,整块共享一个 **E8M0 指数**(8位指数、0位尾数),元素只保存相对该指数的低位数据。块内元素共享同一数量级,从而以少量位宽覆盖大动态范围,缩放参数开销也摊薄到每32元素一份。 | ||
| 12 | + | ||
| 13 | +--- | ||
| 14 | + | ||
| 15 | +## 2. 词条介绍 | ||
| 16 | + | ||
| 17 | +### MXFP8 | ||
| 18 | + | ||
| 19 | +- **结构**:块共享 E8M0 指数 + 元素为 **E4M3**(1符号 + 4指数 + 3尾数)。 | ||
| 20 | +- **特点**:8位位宽、访存为 [FP16/BF16](term_fp16_bf16.md) 一半,同时保留浮点动态范围;相比 INT8 均匀分档对离群值更耐受。 | ||
| 21 | +- **应用**:如 [W8A8 MX 动态量化](../quantization_mode/linear_layer_quantization/term_w8a8_mx_dynamic.md)。 | ||
| 22 | + | ||
| 23 | +### MXFP4 | ||
| 24 | + | ||
| 25 | +- **结构**:块共享 E8M0 指数 + 元素为 **E2M1**(1符号 + 2指数 + 1尾数,emax=2、max 6)。 | ||
| 26 | +- **特点**:4位位宽、压缩比高,块级共享指数保留了浮点动态范围;对离群值比 INT4 均匀分档更耐受。 | ||
| 27 | +- **应用**:如 [W4A4 MX 动态量化](../quantization_mode/linear_layer_quantization/term_w4a4_mx_dynamic.md)、[W4A4 MX 双 Scale 量化](../quantization_mode/linear_layer_quantization/term_w4a4_mx_dualscale.md)。 | ||
| 28 | + | ||
| 29 | +### 与相关类型对比 | ||
| 30 | + | ||
| 31 | +- 相比 [FP8(E4M3)](term_fp8.md):MXFP8 块级共享指数,缩放参数开销从每元素一份摊薄到每32元素一份;代价是块粒度较粗、需硬件 MX 支持。 | ||
| 32 | +- 相比 [INT4](term_int4.md):MXFP4 用块级共享指数保留动态范围、对离群值更耐受;代价是依赖 MX 硬件、最后维需 32 对齐。 | ||
| 33 | + | ||
| 34 | +--- | ||
| 35 | + | ||
| 36 | +## 3. 关联流程 | ||
| 37 | + | ||
| 38 | +- 《[一键量化完整指南](../../user_guide/usage_quick_quantization.md)》:量化任务的执行入口。 | ||
| 39 | +- 《[量化精度调优指南](../../user_guide/process_quantization_precision_tuning.md)》:数据类型与量化方案导致的精度问题可通过该流程排查与调优。 | ||
| 40 | + | ||
| 41 | +--- | ||
| 42 | + | ||
| 43 | +## 4. 关联词条 | ||
| 44 | + | ||
| 45 | +- [量化基础](README.md):上位概念,本词条所属目录。 | ||
| 46 | +- [量化与反量化](term_quantization.md):配套术语,MX 量化的数学机制。 | ||
| 47 | +- [GEMM](../quantization_mode/term_gemm.md):配套术语,MX 输入走低精度浮点 GEMM。 | ||
| 48 | +- [W8A8 MX 动态量化](../quantization_mode/linear_layer_quantization/term_w8a8_mx_dynamic.md):配套模式,MXFP8 的典型实现。 | ||
| 49 | +- [W4A4 MX 动态量化](../quantization_mode/linear_layer_quantization/term_w4a4_mx_dynamic.md):配套模式,MXFP4 的典型实现。 | ||
| 50 | + | ||
| 51 | +--- | ||
| 52 | + | ||
| 53 | +## 5. 参考文档 | ||
| 54 | + | ||
| 55 | +1. 《[量化模式](../quantization_mode/README.md)》 | ||
| @@ -0,0 +1,87 @@ | |||
| 1 | +# 量化与反量化 量化术语百科词条 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化基础概念([量化基础](../README.md)) | ||
| 4 | +> **英文名称**:Quantization / Dequantization | ||
| 5 | +> **应用领域**:大语言模型量化压缩、推理加速、KVCache 压缩 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 1. 概述 | ||
| 10 | + | ||
| 11 | +**量化**(Quantization)把高精度浮点张量映射到低精度张量,用较少的比特数保存同一批数据;**反量化**(Dequantization)是其逆过程。本词条介绍量化/反量化公式、量化参数(scale、zero_point)、参数获取方式(静态/动态)、量化粒度与对称性。 | ||
| 12 | + | ||
| 13 | +--- | ||
| 14 | + | ||
| 15 | +## 2. 词条介绍 | ||
| 16 | + | ||
| 17 | +### 量化公式 | ||
| 18 | + | ||
| 19 | +对浮点值 $x$,量化过程为: | ||
| 20 | + | ||
| 21 | +$$q = \mathrm{round}\left(\frac{x}{scale}\right) + zero\_point$$ | ||
| 22 | + | ||
| 23 | +其中 $scale$(缩放系数)把浮点范围映射到整数档位,$zero\_point$(零点)是非对称量化引入的可选偏移,$q$ 是量化后的整数。 | ||
| 24 | + | ||
| 25 | +**例子**:某张量的值都在 $[0, 12]$,用非对称 INT8(整数范围 $-128\sim127$)量化,取 $scale=12/255\approx0.047$、$zero\_point=-128$: | ||
| 26 | + | ||
| 27 | +- $x=12 \rightarrow q=\mathrm{round}(12/0.047)+(-128)=255-128=127$ | ||
| 28 | +- $x=6 \rightarrow q=\mathrm{round}(6/0.047)+(-128)\approx128-128=0$ | ||
| 29 | +- $x=0 \rightarrow q=\mathrm{round}(0)+(-128)=-128$ | ||
| 30 | + | ||
| 31 | +### 反量化公式 | ||
| 32 | + | ||
| 33 | +$$x \approx (q - zero\_point) \times scale$$ | ||
| 34 | + | ||
| 35 | +如上例 $q=0$ 还原为 $(0-(-128))\times0.047\approx6.02$,接近原值 6。量化必然带来信息损失,误差来自 `round` 的舍入与有限位宽对数值范围的截断。 | ||
| 36 | + | ||
| 37 | +### 为什么要量化 | ||
| 38 | + | ||
| 39 | +- **减小存储与访存带宽**:权重从 [FP16/BF16](term_fp16_bf16.md)(2字节/元素)降为 [INT8](term_int8.md)(1字节/元素),权重占用与读取带宽减半;KVCache 同理。 | ||
| 40 | +- **使能低精度矩阵运算**:权重与激活都量化成整数后,矩阵乘可走整数/低精度算子(见 [GEMM](../quantization_mode/term_gemm.md)),在专用硬件上有计算收益。 | ||
| 41 | +- **压缩 KVCache 显存**:量化缓存的历史 K/V,显著降低长上下文推理的显存占用。 | ||
| 42 | + | ||
| 43 | +### 量化参数:scale 与 zero_point | ||
| 44 | + | ||
| 45 | +量化参数决定浮点值到整数档位的映射: | ||
| 46 | + | ||
| 47 | +- **scale(缩放系数)**:1个整数档位代表的浮点步长,$scale=\frac{数值范围}{整数档位数}$。数值范围由被量化张量(或其一段)的实际 min/max 决定。 | ||
| 48 | +- **zero_point(零点)**:非对称量化中对应浮点 0 的整数偏移;对称量化中为 0,可省去。 | ||
| 49 | + | ||
| 50 | +### 参数获取方式:静态与动态 | ||
| 51 | + | ||
| 52 | +量化参数的**获取方式**分两类: | ||
| 53 | + | ||
| 54 | +- **静态量化**:离线用一批校准数据统计出 scale/zero_point,推理时直接使用(参数固化)。在线开销为零,但依赖校准集对真实分布的刻画。 | ||
| 55 | +- **动态量化**:推理时在线统计每个张量(或每行)的实际范围并实时计算 scale。免校准、对分布变化适应好,但每次多一次统计归约的开销。 | ||
| 56 | + | ||
| 57 | +### 量化粒度 | ||
| 58 | + | ||
| 59 | +量化粒度指**一份量化参数覆盖的元素范围**。粒度越细,数值分布刻画越准、精度越好,但量化参数数量与计算开销越大: | ||
| 60 | + | ||
| 61 | +- **per-tensor**:整个张量共享一份 scale。 | ||
| 62 | +- **per-channel**:按输出通道(如权重 W 的 out_dim 列)各一份参数,常用于权重。 | ||
| 63 | +- **per-group**:按固定大小分组(如 128个元素)各一份参数,如 [GPTQ](../quantization_algorithms/gptq/gptq.md)/[LAOS](../quantization_algorithms/laos/laos.md) 的分组量化。 | ||
| 64 | +- **per-token**:按输入行(每个 token)各一份参数,常用于激活的动态量化。 | ||
| 65 | +- **per-head**:按注意力头各一份参数,用于注意力相关张量。 | ||
| 66 | +- **per-block**:按固定大小分块(如 [MXFP8/MXFP4](term_mxfp.md) 的 32元素)共享一个块级指数,是 MX 格式的专用粒度;与 per-group 逐组记 scale 不同,per-block 共享的是指数。 | ||
| 67 | + | ||
| 68 | +### 对称性与非对称性 | ||
| 69 | + | ||
| 70 | +- **对称量化**:数值以 0 为中心,只记录 scale、无 zero_point。实现简单,适合分布近似对称的权重。 | ||
| 71 | +- **非对称量化**:记录 scale 与 zero_point,可覆盖整体偏移的数值,动态范围利用率更高。 | ||
| 72 | + | ||
| 73 | +--- | ||
| 74 | + | ||
| 75 | +## 3. 关联流程 | ||
| 76 | + | ||
| 77 | +- 《[一键量化完整指南](../../user_guide/usage_quick_quantization.md)》:量化任务的执行入口。 | ||
| 78 | +- 《[量化精度调优指南](../../user_guide/process_quantization_precision_tuning.md)》:数据类型与量化方案导致的精度问题可通过该流程排查与调优。 | ||
| 79 | + | ||
| 80 | +--- | ||
| 81 | + | ||
| 82 | +## 4. 关联词条 | ||
| 83 | + | ||
| 84 | +- [量化基础](README.md):上位概念,本词条所属目录。 | ||
| 85 | +- [GEMM](../quantization_mode/term_gemm.md):配套术语,量化是整数 GEMM 的前提。 | ||
| 86 | +- [数据类型 INT8](term_int8.md):配套术语,量化最常用的目标格式。 | ||
| 87 | +- [量化模式](../quantization_mode/README.md):上层概念,量化/反量化在各模式中的具体实施。 | ||
| @@ -0,0 +1,130 @@ | |||
| 1 | +# 量化模式 量化术语百科词条 | ||
| 2 | + | ||
| 3 | +<!-- waiver: G01 原因:本文件为量化模式目录的索引文档,不适用 term_<english_name>.md 词条命名 --> | ||
| 4 | +<!-- waiver: S01 原因:索引/类别文档采用目录结构(术语列表 / 模式清单),不适用词条模板的「2. 词条介绍」必填章节,依 01 清单 S03 组织自身结构 --> | ||
| 5 | + | ||
| 6 | +> **英文名称**:Quantization Mode | ||
| 7 | +> **应用领域**:大语言模型量化压缩、推理加速、KVCache 压缩 | ||
| 8 | + | ||
| 9 | +--- | ||
| 10 | + | ||
| 11 | +<a id="overview"></a> | ||
| 12 | + | ||
| 13 | +## 概述 | ||
| 14 | + | ||
| 15 | +阅读本词条前,建议先了解[量化基础](../quantization_basic/README.md)中的量化/反量化、scale 与常用数据类型等基本概念。 | ||
| 16 | + | ||
| 17 | +量化模式(Quantization Mode)是 msModelSlim 中用于描述**针对某一类特定的模型结构,如何实施一种特定的量化方式**的基础概念。量化操作的基本对象是**张量**——权重、激活、缓存的 K/V 等都是张量;量化模式即针对某个或某几个张量分别应用某种量化(位宽、数据类型、参数获取方式、量化粒度、对称性)后形成的组合。提及某个量化模式时,它通常同时指出:作用于哪类结构、量化其中的哪些张量、以什么位宽和参数获取方式量化。以 W8A8 静态量化为例——它就是**对 Linear 层进行量化**:权重与激活均为 8bit(INT8),且权重与激活均采用**静态量化**([W8A8 静态量化](linear_layer_quantization/term_w8a8_static.md))。 | ||
| 18 | + | ||
| 19 | +按量化对象,常用量化模式可归为三类:**线性层量化**作用于矩阵乘法的权重与激活;**KVCache 量化**作用于注意力机制的 K/V 缓存;**FA 量化**是 KVCache 量化的进阶——在量化 K/V 的基础上进一步量化 Q,使能低精度注意力矩阵运算。三者分别见 [线性层量化](linear_layer_quantization/README.md)、[KVCache 量化](kv_cache_quantization/README.md)、[FA 量化](fa_quantization/README.md)。 | ||
| 20 | + | ||
| 21 | +--- | ||
| 22 | + | ||
| 23 | +<a id="how-to-read"></a> | ||
| 24 | + | ||
| 25 | +## 如何理解一个量化模式 | ||
| 26 | + | ||
| 27 | +一个量化模式名通常由"作用结构 + 张量位宽 + 参数获取方式 + 量化粒度 + 数据类型"几部分构成,掌握了这些要素,就能读懂任意一个模式名: | ||
| 28 | + | ||
| 29 | +- **作用结构**:线性层(Linear/MatMul)用 `WxAy` 记法表示权重与激活的位宽组合(`y` 为可选后缀,表示数据类型与参数获取方式,如 W8A8 静态、W4A4 MX 动态),如 W8A8、W4A4;KVCache 作用于缓存的 K/V 张量;FA 量化作用于注意力输入 Q。 | ||
| 30 | +- **张量位宽**:W 与 A 分别表示权重与激活的位宽。位宽越低,访存与计算收益越大,但数值分辨率越低、精度损失风险越高。 | ||
| 31 | +- **参数获取方式**:静态(离线校准得到 scale/offset,推理时固化,如 [W8A8 静态量化](linear_layer_quantization/term_w8a8_static.md))或动态(推理时在线统计并计算,如 [W8A8 动态量化](linear_layer_quantization/term_w8a8_dynamic.md)、[W4A4 动态量化](linear_layer_quantization/term_w4a4_dynamic.md))。 | ||
| 32 | +- **量化粒度**:一组元素共享一个量化参数的范围。常用粒度有 per-tensor、per-channel、per-group、per-token、per-head、per-block 等,粗细取决于**每份量化参数覆盖的元素数**——覆盖越少(块越小)越细,数值分布刻画越准、精度越好,但量化参数数量与计算开销越大(如 per-token 见 [W8A8 动态量化](linear_layer_quantization/term_w8a8_dynamic.md),per-block 见 [W8A8 MX 动态量化](linear_layer_quantization/term_w8a8_mx_dynamic.md))。 | ||
| 33 | +- **数据类型**:量化后的数值格式,如 INT 整数(INT8/INT4)、FP8 浮点(E4M3)、带块级共享指数的 MXFP8/MXFP4。 | ||
| 34 | + | ||
| 35 | +--- | ||
| 36 | + | ||
| 37 | +<a id="categories"></a> | ||
| 38 | + | ||
| 39 | +## 量化模式的分类 | ||
| 40 | + | ||
| 41 | +按量化对象,常用量化模式分为三类: | ||
| 42 | + | ||
| 43 | +- **[线性层量化](linear_layer_quantization/README.md)**:对大语言模型中占比最高的线性层(Linear / MatMul)权重与激活进行量化,是量化模式的主体、模式数量最多,如 [W8A8 静态量化](linear_layer_quantization/term_w8a8_static.md)、[W4A4 动态量化](linear_layer_quantization/term_w4a4_dynamic.md)。 | ||
| 44 | +- **[KVCache 量化](kv_cache_quantization/README.md)**:对注意力机制的 KVCache 进行量化。KVCache 本质上是一种特殊的激活——历史 token 的 Key/Value 投影被缓存下来供后续 token 复用,其显存随序列长度线性增长;量化 K/V 使缓存显存减半,如 [KVCache-PerChannel 量化](kv_cache_quantization/term_kv_cache_perchannel.md)。 | ||
| 45 | +- **[FA 量化](fa_quantization/README.md)**:KVCache 量化的进阶——在量化 K/V 的基础上进一步量化送入 Flash Attention 的 Q,使能低精度注意力矩阵运算,如 [FA PerHead 量化](fa_quantization/term_fa_perhead.md)。 | ||
| 46 | + | ||
| 47 | +三类量化作用于计算图的不同位置,可以独立或组合使用,共同构成推理加速的优化空间;其中 FA 量化以 KVCache 量化为基础,是其在计算层面的延伸。 | ||
| 48 | + | ||
| 49 | +--- | ||
| 50 | + | ||
| 51 | +<a id="modes"></a> | ||
| 52 | + | ||
| 53 | +## 模式索引 | ||
| 54 | + | ||
| 55 | +以下为 msModelSlim 支持的量化模式全量清单(按量化对象分类),也是各具体量化模式词条的总览入口。表中"承载 IR 类"为 `msmodelslim/ir/` 中的类名,类名里的 **FakeQuant**(伪量化)指量化后立即反量化的占位层,用于在浮点计算中模拟真实量化的数值效果: | ||
| 56 | + | ||
| 57 | +### 线性层量化 | ||
| 58 | + | ||
| 59 | +| 模式 | 承载 IR 类 | 权重/激活量化 | | ||
| 60 | +|------|-----------|---------------| | ||
| 61 | +| [W8A8 静态量化](linear_layer_quantization/term_w8a8_static.md) | `W8A8StaticFakeQuantLinear` | INT8 per-channel / per-tensor 静态 | | ||
| 62 | +| [W8A8 动态量化](linear_layer_quantization/term_w8a8_dynamic.md) | `W8A8DynamicPerChannel/PerGroupFakeQuantLinear` | INT8 per-channel/per-group / per-token 动态 | | ||
| 63 | +| [W4A4 动态量化](linear_layer_quantization/term_w4a4_dynamic.md) | `W4A4DynamicPerChannel/PerGroupFakeQuantLinear` | INT4 per-channel/per-group / per-token 动态 | | ||
| 64 | +| [W8A16 静态量化](linear_layer_quantization/term_w8a16_static.md) | `W8A16StaticPerChannel/PerGroupFakeQuantLinear` | INT8 / FP16 激活 | | ||
| 65 | +| [W4A8 动态量化](linear_layer_quantization/term_w4a8_dynamic.md) | `W4A8DynamicFakeQuantLinear` | INT4 / INT8 per-token 动态 | | ||
| 66 | +| [W8A8 PD-Mix 量化](linear_layer_quantization/term_w8a8_pdmix.md) | `W8A8PDMixFakeQuantLinear` | INT8 per-token(prefill)/ per-tensor(decode) | | ||
| 67 | +| [W8A8 FP8 动态量化](linear_layer_quantization/term_w8a8_fp8_dynamic.md) | `WFP8AFP8DynamicPerChannelFakeQuantLinear` | FP8(E4M3) per-channel / per-token 动态 | | ||
| 68 | +| [W8A8 MX 动态量化](linear_layer_quantization/term_w8a8_mx_dynamic.md) | `W8A8MXDynamicPerBlockFakeQuantLinear` | MXFP8 per-block / per-block 动态 | | ||
| 69 | +| [W4A8 MX 动态量化](linear_layer_quantization/term_w4a8_mx_dynamic.md) | `W4A8MXDynamicPerBlockFakeQuantLinear` | MXFP4 / MXFP8 per-block 动态 | | ||
| 70 | +| [W4A4 MX 动态量化](linear_layer_quantization/term_w4a4_mx_dynamic.md) | `W4A4MXDynamicPerBlockFakeQuantLinear` | MXFP4 per-block / per-block 动态 | | ||
| 71 | +| [W4A4 MX 双 Scale 量化](linear_layer_quantization/term_w4a4_mx_dualscale.md) | `W4A4MXDynamicDualScaleFakeQuantLinear` | MXFP4 双 scale / per-block 动态 | | ||
| 72 | +| [W16A16S 量化](linear_layer_quantization/term_w16a16s.md) | `W16A16sLinear` | 16bit 权重/激活(含稀疏) | | ||
| 73 | +| [SVDQuant](../quantization_algorithms/svdquant/svdquant.md) | `SVDResidualWrapper`([`svd_residual.py`](../../../../msmodelslim/ir/svd_residual.py),配合 linear_quant) | 低秩分解 + 残差低比特量化 | | ||
| 74 | + | ||
| 75 | +> 注:prefill 与 decode 是 LLM 推理的两个阶段——prefill 一次处理整个输入 prompt(计算密集),decode 逐个生成 token(访存密集),详见[线性层量化](linear_layer_quantization/README.md)。 | ||
| 76 | + | ||
| 77 | +### KVCache 量化 | ||
| 78 | + | ||
| 79 | +| 模式 | 承载 IR 类 | 量化参数 | | ||
| 80 | +|------|-----------|----------| | ||
| 81 | +| [KVCache-PerChannel 量化](kv_cache_quantization/term_kv_cache_perchannel.md) | `FakeQuantDynamicCache` | INT8 per-channel(对称/非对称) | | ||
| 82 | + | ||
| 83 | +### FA 量化(KVCache 量化的进阶) | ||
| 84 | + | ||
| 85 | +| 模式 | 承载 IR 类 | 量化参数 | | ||
| 86 | +|------|-----------|----------| | ||
| 87 | +| [FA PerHead 量化](fa_quantization/term_fa_perhead.md) | INT8:`INT8FakeQuantActivationPerHead`;FP8:`FP8FakeQuantActivationPerHead` | INT8/FP8 per-head 静态 | | ||
| 88 | +| [FA PerToken 量化](fa_quantization/term_fa_pertoken.md) | `FakeQuantActivationPerToken` | INT8/FP8 per-token 动态 | | ||
| 89 | +| [FA PerBlock 量化](fa_quantization/term_fa_perblock.md) | `FakeQuantActivationPerBlock` | MXFP8/MXFP4 per-block 动态 | | ||
| 90 | + | ||
| 91 | +FA 量化**本质上是一个组合量化模式**,实际作用于注意力 **Q/K/V 三分支**(`fa_q` / `fa_k` / `fa_v`),三分支各选一个量化模式组合成整体方案。当前最佳实践实际应用过的组合(均通过 `fa3_quant.qconfig` 统一配置三分支): | ||
| 92 | + | ||
| 93 | +| Q/K/V 组合 | 数据类型 / 粒度 | 参数获取 | 配置来源 | | ||
| 94 | +|-----------|----------------|---------|---------| | ||
| 95 | +| Q/K/V 统一 [INT8 per-head](fa_quantization/term_fa_perhead.md) | INT8 per-head | 静态(minmax) | `fa3_quant` 默认配置 | | ||
| 96 | +| Q/K/V 统一 [FP8(E4M3)per-token](fa_quantization/term_fa_pertoken.md) | FP8 per-token | 动态 | Wan2_2、HunYuanVideo 示例 | | ||
| 97 | +| Q/K/V 统一 [MXFP4 per-block](fa_quantization/term_fa_perblock.md) | MXFP4 per-block | 动态 | QwenImageEdit 示例 | | ||
| 98 | + | ||
| 99 | +框架亦支持通过 `fa3_quant.details`(`fa_q`/`fa_k`/`fa_v`)为各分支分别指定配置(未配置的分支不量化),当前示例均使用统一配置。 | ||
| 100 | + | ||
| 101 | +--- | ||
| 102 | + | ||
| 103 | +## 关联流程 | ||
| 104 | + | ||
| 105 | +- 《[一键量化完整指南](../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择并执行量化模式。 | ||
| 106 | +- 《[量化精度调优指南](../../user_guide/process_quantization_precision_tuning.md)》:量化模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 107 | + | ||
| 108 | +--- | ||
| 109 | + | ||
| 110 | +<a id="related-terms"></a> | ||
| 111 | + | ||
| 112 | +## 关联词条 | ||
| 113 | + | ||
| 114 | +- [线性层量化](linear_layer_quantization/README.md):下位概念,本词条下量化模式的主体类别。 | ||
| 115 | +- [KVCache 量化](kv_cache_quantization/README.md):下位概念,针对 KVCache 的量化类别。 | ||
| 116 | +- [FA 量化](fa_quantization/README.md):下位概念,KVCache 量化的进阶类别。 | ||
| 117 | +- [W8A8 静态量化](linear_layer_quantization/term_w8a8_static.md):下位概念,线性层量化中"权重/激活静态"的典型模式。 | ||
| 118 | +- 《[线性量化算法说明](../quantization_algorithms/linear_quant/linear_quant.md)》:配套术语,描述线性层量化模式的处理器实现。 | ||
| 119 | +- 《[KVCache量化:缓存量化算法说明](../quantization_algorithms/kvcache_quant/kvcache_quant.md)》:配套术语,描述 KVCache 量化算法。 | ||
| 120 | +- 《[FA3量化:Flash Attention 3激活量化算法说明](../quantization_algorithms/fa3_quant/fa3_quant.md)》:配套术语,描述 FA 量化算法。 | ||
| 121 | + | ||
| 122 | +--- | ||
| 123 | + | ||
| 124 | +## 参考资料 | ||
| 125 | + | ||
| 126 | +1. Jacob B et al. Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference. CVPR 2018. https://arxiv.org/abs/1712.05877 | ||
| 127 | +2. Yao Z et al. ZeroQuant: Efficient and Affordable Post-Training Quantization for Large-Scale Transformers. NeurIPS 2022. https://arxiv.org/abs/2206.01861 | ||
| 128 | +3. Liu Z et al. KIVI: A Tuning-Free Asymmetric 2bit Quantization for KV Cache. ICML 2024. https://arxiv.org/abs/2402.02750 | ||
| 129 | +4. 《[线性量化算法说明](../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 130 | +5. 《[AscendV1 格式说明](../quantization_format/ascendv1/ascendv1.md)》 | ||
| @@ -0,0 +1,110 @@ | |||
| 1 | +# FA 量化 量化术语百科词条 | ||
| 2 | + | ||
| 3 | +<!-- waiver: G01 原因:本文件为量化模式目录下的类别文档,不适用 term_<english_name>.md 词条命名 --> | ||
| 4 | +<!-- waiver: S01 原因:索引/类别文档采用目录结构(术语列表 / 模式清单),不适用词条模板的「2. 词条介绍」必填章节,依 01 清单 S03 组织自身结构 --> | ||
| 5 | + | ||
| 6 | +> **词条类别**:量化数据格式([量化模式](../README.md)) | ||
| 7 | +> **英文名称**:Flash Attention Quantization | ||
| 8 | +> **应用领域**:注意力计算加速、长上下文推理 | ||
| 9 | +> **msModelSlim 实现**:[`msmodelslim/ir/activation_static.py`](../../../../../msmodelslim/ir/activation_static.py)、[`msmodelslim/ir/activation_dynamic.py`](../../../../../msmodelslim/ir/activation_dynamic.py)(`FakeQuantActivation*` 系列) | ||
| 10 | + | ||
| 11 | +--- | ||
| 12 | + | ||
| 13 | +<a id="overview"></a> | ||
| 14 | + | ||
| 15 | +## 概述 | ||
| 16 | + | ||
| 17 | +FA(Flash Attention,一种高效的注意力计算实现)量化是对**送入 Flash Attention 的 Q/K/V 激活张量**进行量化的一类量化模式,属于[量化模式](../README.md)中的类别之一,是 [KVCache 量化](../kv_cache_quantization/README.md)的**进阶**。它在量化 K/V(压缩缓存显存)的基础上,进一步量化 Q。 | ||
| 18 | + | ||
| 19 | +K/V 量化主要解决"存储"问题——缓存显存减半、支持更长上下文;Q 加入量化后,注意力得分计算(Q 与 K 的点乘)与加权求和(softmax 后与 V 点乘)的参与张量均为低比特,可直接调用整数/低精度矩阵乘算子,从而在继承 KVCache 显存收益的同时使能低精度的矩阵运算。它是长序列解码场景在"省显存"基础上进一步使能低精度注意力矩阵运算的手段。典型如 [FA PerHead 量化](term_fa_perhead.md)——对 Q 张量按注意力头(per-head)静态量化,INT8 或 FP8。 | ||
| 20 | + | ||
| 21 | +FA 量化**本质上是一个组合量化模式**:Q/K/V 三分支各自独立选择量化模式(粒度 × 数据类型)。当前最佳实践均通过 `fa3_quant.qconfig` 统一配置三分支,见[分支组合](#branch-combination)。 | ||
| 22 | + | ||
| 23 | +--- | ||
| 24 | + | ||
| 25 | +<a id="mode-options"></a> | ||
| 26 | + | ||
| 27 | +## 该类一般的量化选择 | ||
| 28 | + | ||
| 29 | +- **量化对象**:送入 Flash Attention 的 Q/K/V 三个分支的激活张量(K/V 承接缓存压缩,Q 使能低精度得分计算)。 | ||
| 30 | +- **量化粒度**:per-head(按注意力头共享 scale,静态,如 [FA PerHead 量化](term_fa_perhead.md))、per-token(逐 token 在线计算 scale,动态,如 [FA PerToken 量化](term_fa_pertoken.md))、per-block(块级共享指数,如 [FA PerBlock 量化](term_fa_perblock.md))。 | ||
| 31 | +- **数据类型**:INT8、FP8(E4M3)、MXFP8/MXFP4。 | ||
| 32 | +- **与 KV 的关系**:本类以 [KVCache 量化](../kv_cache_quantization/README.md)为基础(继承其显存收益),追加 Q 量化使能低精度注意力矩阵运算。 | ||
| 33 | + | ||
| 34 | +--- | ||
| 35 | + | ||
| 36 | +<a id="branch-combination"></a> | ||
| 37 | + | ||
| 38 | +## 分支组合 | ||
| 39 | + | ||
| 40 | +FA 量化作用于 Q/K/V 三个分支(`fa_q` / `fa_k` / `fa_v`),三分支各选一个量化模式组合成整体方案。当前最佳实践实际应用过的组合(均通过 `fa3_quant.qconfig` 统一配置三分支): | ||
| 41 | + | ||
| 42 | +| 组合 | 数据类型 / 粒度 | 参数获取 | 应用示例 | | ||
| 43 | +|------|----------------|---------|---------| | ||
| 44 | +| Q/K/V 统一 INT8 per-head | INT8 per-head | 静态(minmax) | `fa3_quant` 默认配置 | | ||
| 45 | +| Q/K/V 统一 FP8(E4M3)per-token | FP8 per-token | 动态 | Wan2_2、HunYuanVideo 示例 | | ||
| 46 | +| Q/K/V 统一 MXFP4 per-block | MXFP4 per-block | 动态 | QwenImageEdit 示例 | | ||
| 47 | + | ||
| 48 | +框架亦支持通过 `fa3_quant.details`(`fa_q`/`fa_k`/`fa_v`)为各分支分别指定配置(未配置的分支不量化),当前示例均使用统一配置。 | ||
| 49 | + | ||
| 50 | +### 组合 1:Q/K/V 统一 INT8 per-head 静态 | ||
| 51 | + | ||
| 52 | +- **是什么**:Q/K/V 三分支均按注意力头(per-head)静态量化到 INT8。每个注意力头共享一个 scale(参数开销仅头数),scale 离线校准(minmax)确定并固化,推理零在线开销。 | ||
| 53 | +- **配置**:`fa3_quant` 默认(不配 `qconfig` 即启用):`QConfig(dtype=INT8, scope=PER_HEAD, symmetric=True, method="minmax")`。 | ||
| 54 | +- **效果**:三分支均为 8bit 对称量化,K/V 承接缓存压缩,Q 使能低精度得分计算;静态固化使推理无在线统计开销。 | ||
| 55 | +- **规格与限制**:需校准数据(无数据则报错);对称、无 offset。详见 [FA PerHead 量化](term_fa_perhead.md)。 | ||
| 56 | + | ||
| 57 | +### 组合 2:Q/K/V 统一 FP8(E4M3)per-token 动态 | ||
| 58 | + | ||
| 59 | +- **是什么**:Q/K/V 三分支均按 token 逐行动态量化到 FP8(E4M3),量化参数在线统计、免校准,每个 token 的激活分辨率贴合自身数值范围。 | ||
| 60 | +- **配置**:`fa3_quant.qconfig`:`dtype: fp8_e4m3, scope: per_token, symmetric: True, method: minmax`。 | ||
| 61 | +- **效果**:三分支均为 8bit FP8,动态 per-token 免校准且对 token 间分布差异更鲁棒,是长上下文、多模态生成场景的推荐默认。 | ||
| 62 | +- **规格与限制**:动态统计带来少量在线开销;FP8 可表示范围有限(E4M3 max 448),大离群值需留意。详见 [FA PerToken 量化](term_fa_pertoken.md)。 | ||
| 63 | + | ||
| 64 | +### 组合 3:Q/K/V 统一 MXFP4 per-block 动态 | ||
| 65 | + | ||
| 66 | +- **是什么**:Q/K/V 三分支均沿 head_dim 按32元素分块,每块共享一个 E8M0 指数做 MXFP4 动态量化。粒度比 per-token 更细(捕捉 head_dim 内分布差异),块级共享指数保留浮点动态范围、对离群值更耐受。 | ||
| 67 | +- **配置**:`fa3_quant.qconfig`:`dtype: mxfp4, scope: per_block, symmetric: True, method: minmax`(QwenImageEdit 示例)。 | ||
| 68 | +- **效果**:三分支均为 4bit(MXFP4),带宽/计算位宽收益最大,是极端压缩场景的选择。 | ||
| 69 | +- **规格与限制**:块级指数前向在线统计(免校准);MXFP4 尾数仅 2bit(emax=2、max 6),精度敏感场景需权衡。详见 [FA PerBlock 量化](term_fa_perblock.md)。 | ||
| 70 | + | ||
| 71 | +--- | ||
| 72 | + | ||
| 73 | +<a id="modes"></a> | ||
| 74 | + | ||
| 75 | +## 该类下的模式清单 | ||
| 76 | + | ||
| 77 | +以下为 msModelSlim 支持的 FA 量化模式清单(完整规格含承载 IR 类,见[量化模式](../README.md)「模式索引」): | ||
| 78 | + | ||
| 79 | +| 模式 | 一句话 | | ||
| 80 | +|------|--------| | ||
| 81 | +| [FA PerHead 量化](term_fa_perhead.md) | 按注意力头静态量化 Q,INT8/FP8 | | ||
| 82 | +| [FA PerToken 量化](term_fa_pertoken.md) | 逐 token 动态量化 Q,INT8/FP8 | | ||
| 83 | +| [FA PerBlock 量化](term_fa_perblock.md) | 块级共享指数量化 Q,MXFP8/MXFP4 | | ||
| 84 | + | ||
| 85 | +--- | ||
| 86 | + | ||
| 87 | +## 关联流程 | ||
| 88 | + | ||
| 89 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `fa3_quant` 处理器启用本类模式。 | ||
| 90 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:注意力激活量化精度验证。 | ||
| 91 | + | ||
| 92 | +--- | ||
| 93 | + | ||
| 94 | +<a id="related-terms"></a> | ||
| 95 | + | ||
| 96 | +## 关联词条 | ||
| 97 | + | ||
| 98 | +- [量化模式](../README.md):上位概念,本词条是"FA 量化"类别。 | ||
| 99 | +- [KVCache 量化](../kv_cache_quantization/README.md):上位概念(基础),本类在其基础上追加 Q 量化。 | ||
| 100 | +- [线性层量化](../linear_layer_quantization/README.md):同位概念,作用于权重与激活的量化类别,可与本类叠加。 | ||
| 101 | +- [FA PerHead 量化](term_fa_perhead.md):下位概念,本类别下 per-head 静态激活量化。 | ||
| 102 | +- 《[FA3量化:Flash Attention 3激活量化算法说明](../../quantization_algorithms/fa3_quant/fa3_quant.md)》:配套术语,描述 FA 量化算法。 | ||
| 103 | + | ||
| 104 | +--- | ||
| 105 | + | ||
| 106 | +## 参考资料 | ||
| 107 | + | ||
| 108 | +1. Dao T et al. FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. NeurIPS 2022. https://arxiv.org/abs/2205.14135 | ||
| 109 | +2. 《[FA3量化:Flash Attention 3激活量化算法说明](../../quantization_algorithms/fa3_quant/fa3_quant.md)》 | ||
| 110 | +3. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,87 @@ | |||
| 1 | +# FA PerBlock 量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([FA 量化](../README.md)) | ||
| 4 | +> **英文名称**:FA Per-Block Quantization | ||
| 5 | +> **应用领域**:长上下文推理加速、低精度注意力计算 | ||
| 6 | +> **承载 IR 类**:`FakeQuantActivationPerBlock`([`msmodelslim/ir/activation_dynamic.py`](../../../../../msmodelslim/ir/activation_dynamic.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +FA PerBlock 量化 = 对送入 Flash Attention 的 Q/K/V 激活沿 head_dim 按32元素分块,每块共享一个 E8M0 指数做 MX 动态量化([MXFP8](../../quantization_basic/term_mxfp.md) 或 [MXFP4](../../quantization_basic/term_mxfp.md)),量化参数在线计算、免校准。它比 per-token 粒度更细(能捕捉 head_dim 内部分布差异),又以块级共享指数保留浮点动态范围、对离群值比整数格式更耐受,是注意力激活量化中「粒度/开销」折中最细的一档。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 注意力 Q/K/V 激活 | 送入 Flash Attention 的激活张量(形状 (B, H, S, D)),Q/K/V 均被量化;K/V 承接缓存压缩,Q 使能低精度得分计算 | | ||
| 23 | +| 位宽 | 4bit 或 8bit | MXFP4 为 4bit、MXFP8 为 8bit,按精度/吞吐需求选择 | | ||
| 24 | +| 数据类型 | MXFP4 / MXFP8 | 每32元素共享一个 E8M0 指数;MXFP4 emax=2、max 6,MXFP8 emax=8、max 448 | | ||
| 25 | +| 参数获取方式 | 动态 | 块级指数前向在线统计,免校准 | | ||
| 26 | +| 量化粒度 | per-block | 沿最后维(head_dim)按32元素分块,每块共享一个指数 | | ||
| 27 | +| 对称性 | 对称 | 仅指数/scale,无 offset | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +MX 格式按块共享 E8M0 指数,块内每个元素用块级指数缩放后量化为主尾数: | ||
| 32 | +$$e = \lfloor \log_2(\max_{i \in \mathrm{block}}|x_i|) \rfloor, \qquad q_i = \mathrm{round}_{MX}\left(\frac{x_i}{2^e}\right), \qquad \hat{x}_i = q_i \cdot 2^e$$ | ||
| 33 | + | ||
| 34 | +其中块大小32元素,$e$ 为块内共享的 E8M0 指数,$q_i$ 为块内第 $i$ 个元素的量化尾数(MXFP8 为 FP8 尾数、MXFP4 为 FP4 尾数),$\hat{x}_i$ 为反量化还原值。量化对象为送入 Flash Attention 的 Q/K/V 激活,量化参数在线计算,见「模式规格」表。 | ||
| 35 | + | ||
| 36 | +### 与其他模式的关系 | ||
| 37 | + | ||
| 38 | +- **与 [FA PerToken 量化](term_fa_pertoken.md)(同为 FA 激活量化,格式与粒度不同)** | ||
| 39 | + - 本模式(MX per-block):优势是块级共享指数保留浮点动态范围、对离群值比 INT8/FP8 每元素格式更耐受,粒度沿 head_dim 更细;劣势是依赖硬件 MX 支持、head_dim 需32对齐,块统计归约开销与块数相关。 | ||
| 40 | + - PerToken:优势是 INT8/FP8 每元素格式、硬件生态成熟、实现简单;劣势是 scale 数与 token 数同量级、粒度行级。 | ||
| 41 | + | ||
| 42 | +- **与 [FA PerHead 量化](term_fa_perhead.md)(同为 FA 激活量化,粒度与参数获取方式不同)** | ||
| 43 | + - 本模式:per-block 动态、免校准、粒度最细;劣势是在线归约开销、依赖 MX 硬件。 | ||
| 44 | + - PerHead:per-head 静态、需校准、粒度最粗;优势是零在线开销、参数仅 head 数。 | ||
| 45 | + | ||
| 46 | +- **与 [W8A8 MX 动态量化](../linear_layer_quantization/term_w8a8_mx_dynamic.md)(同类 MX per-block 动态思路)** | ||
| 47 | + - 本模式把同一思路应用于注意力 Q/K/V 激活;W8A8 MX 应用于线性层权重与激活。二者正交、可组合:线性层走 MX,注意力路径走本模式。 | ||
| 48 | + | ||
| 49 | +### 适用场景与限制 | ||
| 50 | + | ||
| 51 | +#### 1. 适用场景 | ||
| 52 | + | ||
| 53 | +- **低比特注意力加速**:需要 4bit/8bit 注意力激活量化、又希望比整数格式精度更稳的场景。 | ||
| 54 | +- **离群值敏感的注意力**:MX 浮点动态范围对 Q/K/V 离群值更耐受。 | ||
| 55 | +- **昇腾 MXFP 推理路径**:硬件/算子库原生支持 MX 注意力计算的部署。 | ||
| 56 | + | ||
| 57 | +#### 2. 使用限制 | ||
| 58 | + | ||
| 59 | +- **依赖硬件 MX 支持**:MXFP4/MXFP8 注意力计算需目标硬件算子库支持。 | ||
| 60 | +- **块粒度对齐**:head_dim 需能被32整除,否则需 padding。 | ||
| 61 | +- **在线归约开销**:per-block 统计增加少量延迟,短序列下占比更明显。 | ||
| 62 | +- **注意力精度敏感**:Q/K 的量化误差直接影响注意力得分,需验证极端长序列下的精度。 | ||
| 63 | + | ||
| 64 | +--- | ||
| 65 | + | ||
| 66 | +## 3. 关联流程 | ||
| 67 | + | ||
| 68 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 YAML 配置选择本模式并执行量化。 | ||
| 69 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 70 | + | ||
| 71 | +--- | ||
| 72 | + | ||
| 73 | +## 4. 关联词条 | ||
| 74 | + | ||
| 75 | +- [量化模式](../README.md):上位概念,本词条属于[FA 量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 76 | +- [FA PerToken 量化](term_fa_pertoken.md):同类模式,per-token 动态激活量化。 | ||
| 77 | +- [FA PerHead 量化](term_fa_perhead.md):同类模式,per-head 静态激活量化。 | ||
| 78 | +- [KVCache 量化](../kv_cache_quantization/README.md):基础类别,本模式在其基础上追加 Q 量化。 | ||
| 79 | +- [W8A8 MX 动态量化](../linear_layer_quantization/term_w8a8_mx_dynamic.md):配套模式,MX per-block 思路在线性层上的应用。 | ||
| 80 | +- 《[FA3量化:Flash Attention 3激活量化算法说明](../../quantization_algorithms/fa3_quant/fa3_quant.md)》:配套术语,本模式对应的算法处理器文档。 | ||
| 81 | + | ||
| 82 | +--- | ||
| 83 | + | ||
| 84 | +## 5. 参考文档 | ||
| 85 | + | ||
| 86 | +1. 《[FA3量化:Flash Attention 3激活量化算法说明](../../quantization_algorithms/fa3_quant/fa3_quant.md)》 | ||
| 87 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,89 @@ | |||
| 1 | +# FA PerHead 量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([FA 量化](../README.md)) | ||
| 4 | +> **英文名称**:FA Per-Head Quantization | ||
| 5 | +> **应用领域**:长上下文推理加速、低精度注意力计算 | ||
| 6 | +> **承载 IR 类**:`FakeQuantActivationPerHead` 及 INT8/FP8 变体([`msmodelslim/ir/activation_static.py`](../../../../../msmodelslim/ir/activation_static.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +FA PerHead 量化 = 对送入 Flash Attention 的 Q/K/V 激活按注意力头(per-head)做静态量化。它是 [KVCache 量化](../kv_cache_quantization/README.md)的**进阶**:在量化 K/V(压缩缓存显存)的基础上进一步量化 Q,使注意力得分计算(Q 与 K 的点乘)与加权求和(softmax 后与 V 点乘)的参与张量均为低比特,从而在继承 KV 显存收益之外使能低精度矩阵运算。模式名中「PerHead」表示量化粒度为按注意力头。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 注意力 Q/K/V 激活 | 送入 Flash Attention 的激活张量(形状 (B, H, S, D)),Q/K/V 均被量化;K/V 承接缓存压缩,Q 使能低精度得分计算 | | ||
| 23 | +| 位宽 | 8bit | Q/K/V 均为 8bit | | ||
| 24 | +| 数据类型 | INT8 / FP8(E4M3) | 两种实现按精度/吞吐需求选择 | | ||
| 25 | +| 参数获取方式 | 静态 | scale 离线校准确定并固化,推理零在线开销;要求提供 `ext['scale']`,忽略 offset | | ||
| 26 | +| 量化粒度 | per-head | 每个注意力头共享一个 scale,参数开销仅 head 数,适配各头独立的数值分布 | | ||
| 27 | +| 对称性 | 对称 | 仅 scale,无 offset | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +量化与反量化采用标准线性映射。对称量化(仅 scale、无零点): | ||
| 32 | +$$q = \mathrm{round}(x / s), \qquad \hat{x} = q \cdot s, \qquad s = \frac{\max(|x|)}{2^{b-1}}$$ | ||
| 33 | + | ||
| 34 | +非对称量化(含零点 offset): | ||
| 35 | +$$q = \mathrm{round}(x / s) + z, \qquad \hat{x} = (q - z) \cdot s, \qquad s = \frac{\max(x) - \min(x)}{2^b - 1}$$ | ||
| 36 | + | ||
| 37 | +其中 $x$ 为待量化张量,$q$ 为量化后的数值,$\hat{x}$ 为反量化还原值,$s$ 为 scale,$z$ 为零点 offset,$b$ 为位宽,且 $z = \mathrm{round}(-\min(x)/s)$。本模式为对称量化(无 offset)。FP8(E4M3)变体的 scale 按 FP8 可表示最大值 448 确定。量化对象为送入 Flash Attention 的 Q/K/V 激活,参数获取方式与作用粒度(per-head / per-token)见「模式规格」表。 | ||
| 38 | + | ||
| 39 | +### 与其他模式的关系 | ||
| 40 | + | ||
| 41 | +- **与 [FA PerToken 量化](term_fa_pertoken.md)(同为 FA 激活量化,粒度与参数获取方式不同)** | ||
| 42 | + - 本模式(per-head 静态):优势是 scale 离线固化、推理零在线开销,参数开销仅 head 数;劣势是粒度较粗、需依赖校准数据,对逐 token 分布变化不敏感。 | ||
| 43 | + - PerToken(per-token 动态):优势是逐 token 在线算 scale、免校准,量化更贴合每个 token 的数值范围;劣势是每次前向多一次按 token 的 min/max 归约,开销与 token 数同量级。 | ||
| 44 | + | ||
| 45 | +- **与 [FA PerBlock 量化](term_fa_perblock.md)(同为 FA 激活量化,格式与粒度不同)** | ||
| 46 | + - 本模式:INT8/FP8 整数格式 + 静态 per-head 粒度,无需特殊硬件格式支持;劣势是粒度最粗(整头共享参数),对 head_dim 内部的分布差异不敏感。 | ||
| 47 | + - PerBlock:MX 格式块级共享指数(32元素一块),粒度最细、对离群值比整数格式更耐受;劣势是依赖硬件 MX 支持、head_dim 需能被32整除、量化参数在线计算。 | ||
| 48 | + | ||
| 49 | +- **与 [KVCache-PerChannel 量化](../kv_cache_quantization/term_kv_cache_perchannel.md)(基础关系)** | ||
| 50 | + - 本模式以 K/V 量化为基础:继承其缓存显存减半的收益,追加 Q 量化使能低精度矩阵运算。K/V 不量化则 Q 量化无法单独兑现整数/低精度注意力得分计算的收益。 | ||
| 51 | + | ||
| 52 | +### 适用场景与限制 | ||
| 53 | + | ||
| 54 | +#### 1. 适用场景 | ||
| 55 | + | ||
| 56 | +- **长序列注意力加速**:注意力计算密集的长上下文解码场景,整数/低精度注意力降低带宽与计算开销。 | ||
| 57 | +- **与线性层量化组合**:作为整体量化方案的一部分,与 W8A8 等线性层模式叠加进一步压缩。 | ||
| 58 | + | ||
| 59 | +#### 2. 使用限制 | ||
| 60 | + | ||
| 61 | +- **静态依赖校准**:per-head scale 由校准集确定,分布偏差会影响注意力得分精度。 | ||
| 62 | +- **数据类型有限**:msModelSlim 中 per-head 量化仅提供 INT8 与 FP8 两种数据类型。 | ||
| 63 | +- **注意力精度敏感**:Q/K 的量化误差直接影响注意力得分,极端长序列下需验证。 | ||
| 64 | + | ||
| 65 | +--- | ||
| 66 | + | ||
| 67 | +## 3. 关联流程 | ||
| 68 | + | ||
| 69 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 YAML 配置选择本模式并执行量化。 | ||
| 70 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 71 | + | ||
| 72 | +--- | ||
| 73 | + | ||
| 74 | +## 4. 关联词条 | ||
| 75 | + | ||
| 76 | +- [量化模式](../README.md):上位概念,本词条属于[FA 量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 77 | +- [FA PerToken 量化](term_fa_pertoken.md):同类模式,per-token 动态激活量化。 | ||
| 78 | +- [FA PerBlock 量化](term_fa_perblock.md):同类模式,per-block MX 动态激活量化。 | ||
| 79 | +- [KVCache 量化](../kv_cache_quantization/README.md):基础类别,本模式在其基础上追加 Q 量化。 | ||
| 80 | +- [KVCache-PerChannel 量化](../kv_cache_quantization/term_kv_cache_perchannel.md):前置术语,K/V 量化的具体模式。 | ||
| 81 | +- [W8A8 静态量化](../linear_layer_quantization/term_w8a8_static.md):配套模式,可与本模式组合使用。 | ||
| 82 | +- 《[FA3量化:Flash Attention 3激活量化算法说明](../../quantization_algorithms/fa3_quant/fa3_quant.md)》:配套术语,本模式对应的算法处理器文档。 | ||
| 83 | + | ||
| 84 | +--- | ||
| 85 | + | ||
| 86 | +## 5. 参考文档 | ||
| 87 | + | ||
| 88 | +1. 《[FA3量化:Flash Attention 3激活量化算法说明](../../quantization_algorithms/fa3_quant/fa3_quant.md)》 | ||
| 89 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,89 @@ | |||
| 1 | +# FA PerToken 量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([FA 量化](../README.md)) | ||
| 4 | +> **英文名称**:FA Per-Token Quantization | ||
| 5 | +> **应用领域**:长上下文推理加速、低精度注意力计算 | ||
| 6 | +> **承载 IR 类**:`FakeQuantActivationPerToken`([`msmodelslim/ir/activation_dynamic.py`](../../../../../msmodelslim/ir/activation_dynamic.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +FA PerToken 量化 = 对送入 Flash Attention 的 Q/K/V 激活按 token 逐行动态量化([INT8](../../quantization_basic/term_int8.md) 或 [FP8(E4M3)](../../quantization_basic/term_fp8.md)),量化参数在线计算、免校准。它是 [KVCache 量化](../kv_cache_quantization/README.md)的**进阶**:K/V 量化省缓存显存,Q 一并量化后使注意力得分计算可走低精度矩阵运算;per-token 粒度让每个 token 的激活分辨率贴合自身数值范围。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 注意力 Q/K/V 激活 | 送入 Flash Attention 的激活张量(形状 (B, H, S, D)),Q/K/V 均被量化;K/V 承接缓存压缩,Q 使能低精度得分计算 | | ||
| 23 | +| 位宽 | 8bit | Q/K/V 均为 8bit | | ||
| 24 | +| 数据类型 | INT8 / FP8(E4M3) | 两种实现按精度/吞吐需求选择 | | ||
| 25 | +| 参数获取方式 | 动态 | 每个 token 前向在线求 min/max 并计算 scale,免校准 | | ||
| 26 | +| 量化粒度 | per-token | reshape 为 (B\*H\*S, D) 后按行(token)共享 scale | | ||
| 27 | +| 对称性 | 对称 | 仅 scale,无 offset | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +量化与反量化采用标准线性映射。对称量化(仅 scale、无零点): | ||
| 32 | +$$q = \mathrm{round}(x / s), \qquad \hat{x} = q \cdot s, \qquad s = \frac{\max(|x|)}{2^{b-1}}$$ | ||
| 33 | + | ||
| 34 | +非对称量化(含零点 offset): | ||
| 35 | +$$q = \mathrm{round}(x / s) + z, \qquad \hat{x} = (q - z) \cdot s, \qquad s = \frac{\max(x) - \min(x)}{2^b - 1}$$ | ||
| 36 | + | ||
| 37 | +其中 $x$ 为待量化张量,$q$ 为量化后的数值,$\hat{x}$ 为反量化还原值,$s$ 为 scale,$z$ 为零点 offset,$b$ 为位宽,且 $z = \mathrm{round}(-\min(x)/s)$。本模式为对称量化(无 offset)。FP8(E4M3)变体的 scale 按 FP8 可表示最大值 448 确定。量化对象为送入 Flash Attention 的 Q/K/V 激活,参数获取方式与作用粒度(per-head / per-token)见「模式规格」表。 | ||
| 38 | + | ||
| 39 | +### 与其他模式的关系 | ||
| 40 | + | ||
| 41 | +- **与 [FA PerHead 量化](term_fa_perhead.md)(同为 FA 激活量化,粒度与参数获取方式不同)** | ||
| 42 | + - 本模式(per-token 动态):优势是逐 token 在线算 scale、免校准,量化贴合每个 token 的数值范围,精度更高;劣势是每次前向多一次按 token 的 min/max 归约,开销与 token 数同量级。 | ||
| 43 | + - PerHead(per-head 静态):优势是 scale 离线固化、推理零在线开销,参数仅 head 数;劣势是需依赖校准数据、粒度粗,对 token 间分布变化不敏感。 | ||
| 44 | + | ||
| 45 | +- **与 [FA PerBlock 量化](term_fa_perblock.md)(同为 FA 激活量化,格式与粒度不同)** | ||
| 46 | + - 本模式:INT8/FP8 每元素格式 + per-token 粒度,无需特殊硬件格式支持;劣势是 scale 数与 token 数同量级、粒度行级。 | ||
| 47 | + - PerBlock:MX 格式块级共享指数(32元素一块),粒度更细(沿 head_dim)、对离群值更耐受;劣势是依赖硬件 MX 支持、head_dim 需32对齐。 | ||
| 48 | + | ||
| 49 | +- **与 [W8A8 动态量化](../linear_layer_quantization/term_w8a8_dynamic.md)(同类 per-token 动态思路)** | ||
| 50 | + - 本模式把同一思路应用于注意力 Q/K/V 激活;W8A8 动态应用于线性层权重与激活。二者正交、可组合:线性层走 W8A8,注意力路径走本模式,共同构成整体量化方案。 | ||
| 51 | + | ||
| 52 | +### 适用场景与限制 | ||
| 53 | + | ||
| 54 | +#### 1. 适用场景 | ||
| 55 | + | ||
| 56 | +- **校准数据不可靠或缺失**:无法获得代表性校准集时,动态 per-token 方案更稳。 | ||
| 57 | +- **注意力精度要求高**:需要比静态方案更细粒度的激活量化,且接受在线归约开销。 | ||
| 58 | +- **长序列注意力加速**:与 Flash Attention 整数/低精度路径结合,降低带宽与计算开销。 | ||
| 59 | + | ||
| 60 | +#### 2. 使用限制 | ||
| 61 | + | ||
| 62 | +- **在线归约开销**:per-token min/max 归约增加少量延迟,短序列下占比更明显。 | ||
| 63 | +- **注意力精度敏感**:Q/K 的量化误差直接影响注意力得分,需验证极端长序列下的精度。 | ||
| 64 | +- **硬件算子依赖**:per-token 动态量化需推理框架/算子库支持逐 token 参数计算。 | ||
| 65 | + | ||
| 66 | +--- | ||
| 67 | + | ||
| 68 | +## 3. 关联流程 | ||
| 69 | + | ||
| 70 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 YAML 配置选择本模式并执行量化。 | ||
| 71 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 72 | + | ||
| 73 | +--- | ||
| 74 | + | ||
| 75 | +## 4. 关联词条 | ||
| 76 | + | ||
| 77 | +- [量化模式](../README.md):上位概念,本词条属于[FA 量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 78 | +- [FA PerHead 量化](term_fa_perhead.md):同类模式,per-head 静态激活量化。 | ||
| 79 | +- [FA PerBlock 量化](term_fa_perblock.md):同类模式,per-block MX 动态激活量化。 | ||
| 80 | +- [KVCache 量化](../kv_cache_quantization/README.md):基础类别,本模式在其基础上追加 Q 量化。 | ||
| 81 | +- [W8A8 动态量化](../linear_layer_quantization/term_w8a8_dynamic.md):配套模式,per-token 动态思路在线性层上的应用。 | ||
| 82 | +- 《[FA3量化:Flash Attention 3激活量化算法说明](../../quantization_algorithms/fa3_quant/fa3_quant.md)》:配套术语,本模式对应的算法处理器文档。 | ||
| 83 | + | ||
| 84 | +--- | ||
| 85 | + | ||
| 86 | +## 5. 参考文档 | ||
| 87 | + | ||
| 88 | +1. 《[FA3量化:Flash Attention 3激活量化算法说明](../../quantization_algorithms/fa3_quant/fa3_quant.md)》 | ||
| 89 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,69 @@ | |||
| 1 | +# KVCache 量化 量化术语百科词条 | ||
| 2 | + | ||
| 3 | +<!-- waiver: G01 原因:本文件为量化模式目录下的类别文档,不适用 term_<english_name>.md 词条命名 --> | ||
| 4 | +<!-- waiver: S01 原因:索引/类别文档采用目录结构(术语列表 / 模式清单),不适用词条模板的「2. 词条介绍」必填章节,依 01 清单 S03 组织自身结构 --> | ||
| 5 | + | ||
| 6 | +> **词条类别**:量化数据格式([量化模式](../README.md)) | ||
| 7 | +> **英文名称**:KV Cache Quantization | ||
| 8 | +> **应用领域**:KVCache 压缩、长上下文推理加速 | ||
| 9 | +> **msModelSlim 实现**:[`msmodelslim/ir/attention.py`](../../../../../msmodelslim/ir/attention.py) | ||
| 10 | + | ||
| 11 | +--- | ||
| 12 | + | ||
| 13 | +<a id="overview"></a> | ||
| 14 | + | ||
| 15 | +## 概述 | ||
| 16 | + | ||
| 17 | +KVCache 量化是对注意力机制中的 **KVCache(缓存的 Key/Value 张量)**进行量化的一类量化模式,属于[量化模式](../README.md)中的类别之一。KVCache 本质上是一种**特殊的激活**——历史 token 的 Key/Value 投影(K/V 线性层输出)被缓存下来,供后续 token 的注意力计算复用,而非模型权重;它不参与权重矩阵乘法,只影响注意力计算。其显存随序列长度线性增长,是长上下文推理的主要显存开销。 | ||
| 18 | + | ||
| 19 | +量化 K/V 不改变权重与激活的量化方案,可与线性层量化叠加使用;量化后缓存显存约减半(INT8 约为 FP16 的一半),从而支持更长上下文或更大并发;对推理延迟的影响取决于算子与硬件实现,需实测评估。典型如 [KVCache-PerChannel 量化](term_kv_cache_perchannel.md)——对缓存的 K/V 按隐藏维度(通道)共享量化参数,INT8 量化。 | ||
| 20 | + | ||
| 21 | +--- | ||
| 22 | + | ||
| 23 | +<a id="mode-options"></a> | ||
| 24 | + | ||
| 25 | +## 该类一般的量化选择 | ||
| 26 | + | ||
| 27 | +- **量化对象**:缓存的 K 与 V 张量(Q 不在此列,量化 Q 属于 [FA 量化](../fa_quantization/README.md))。 | ||
| 28 | +- **量化粒度**:目前 msModelSlim 中仅支持 per-channel——按隐藏维度(head_dim)共享 scale/offset,对称或非对称,即 [KVCache-PerChannel 量化](term_kv_cache_perchannel.md)。 | ||
| 29 | +- **数据类型**:INT8(对称/非对称)。更细粒度(如 per-head、per-token)或更低比特(INT4/FP8)属于研究中的方向,msModelSlim 暂不支持。 | ||
| 30 | +- **组合方式**:可与线性层量化叠加使用(两者量化对象不同、互不重叠)。在此基础上进一步量化**送入注意力计算的 Q 激活张量**,即升级为 [FA 量化](../fa_quantization/README.md)——FA 量化量化的是 Q 激活(QProj 的输出张量),而非对 QProj 线性层本身做权重/矩阵乘量化。 | ||
| 31 | + | ||
| 32 | +--- | ||
| 33 | + | ||
| 34 | +<a id="modes"></a> | ||
| 35 | + | ||
| 36 | +## 该类下的模式清单 | ||
| 37 | + | ||
| 38 | +以下为 msModelSlim 支持的 KVCache 量化模式清单(完整规格含承载 IR 类,见[量化模式](../README.md)「模式索引」): | ||
| 39 | + | ||
| 40 | +| 模式 | 一句话 | | ||
| 41 | +|------|--------| | ||
| 42 | +| [KVCache-PerChannel 量化](term_kv_cache_perchannel.md) | 缓存 K/V 按隐藏维度共享参数,INT8 per-channel | | ||
| 43 | + | ||
| 44 | +--- | ||
| 45 | + | ||
| 46 | +## 关联流程 | ||
| 47 | + | ||
| 48 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `dynamic_cache` 处理器启用本类模式。 | ||
| 49 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:长序列精度验证与 KV 回退。 | ||
| 50 | + | ||
| 51 | +--- | ||
| 52 | + | ||
| 53 | +<a id="related-terms"></a> | ||
| 54 | + | ||
| 55 | +## 关联词条 | ||
| 56 | + | ||
| 57 | +- [量化模式](../README.md):上位概念,本词条是"KVCache 量化"类别。 | ||
| 58 | +- [线性层量化](../linear_layer_quantization/README.md):同位概念,作用于权重与激活的量化类别,可与本类叠加。 | ||
| 59 | +- [FA 量化](../fa_quantization/README.md):进阶概念,在本类基础上进一步量化 Q。 | ||
| 60 | +- [KVCache-PerChannel 量化](term_kv_cache_perchannel.md):下位概念,本类别当前唯一的量化模式。 | ||
| 61 | +- 《[KVCache量化:缓存量化算法说明](../../quantization_algorithms/kvcache_quant/kvcache_quant.md)》:配套术语,描述 KVCache 量化算法。 | ||
| 62 | +- 《[KVSmooth:KVCache量化离群值抑制算法说明](../../quantization_algorithms/kv_smooth/kv_smooth.md)》:前置术语,量化前对 KV 做平滑以降低量化误差。 | ||
| 63 | + | ||
| 64 | +--- | ||
| 65 | + | ||
| 66 | +## 参考资料 | ||
| 67 | + | ||
| 68 | +1. 《[KVCache量化:缓存量化算法说明](../../quantization_algorithms/kvcache_quant/kvcache_quant.md)》 | ||
| 69 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,84 @@ | |||
| 1 | +# KVCache-PerChannel 量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([KVCache 量化](../README.md)) | ||
| 4 | +> **英文名称**:KV Cache Per-Channel Quantization | ||
| 5 | +> **应用领域**:KVCache 压缩、长上下文推理加速 | ||
| 6 | +> **承载 IR 类**:`FakeQuantDynamicCache`([`msmodelslim/ir/attention.py`](../../../../../msmodelslim/ir/attention.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +KVCache-PerChannel 量化 = 对注意力机制缓存的 K/V 张量做 [INT8](../../quantization_basic/term_int8.md) per-channel 量化。KVCache 是历史 token 的 Key/Value 投影跨时间步缓存下来的**特殊激活**,显存随序列长度线性增长,是长上下文推理的主要显存瓶颈;量化 K/V 使缓存显存减半。它是[KVCache 量化](README.md)类别当前唯一的模式,模式名中「PerChannel」表示按隐藏维度(通道)共享量化参数。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 缓存的 K/V 张量 | 注意力机制的 Key/Value 缓存,不参与权重矩阵乘法、只参与注意力计算;不改变权重与激活的量化方案,可与线性层量化叠加 | | ||
| 23 | +| 位宽 | 8bit | 缓存从 FP16 降为 INT8,显存与 KV 读写带宽均减半 | | ||
| 24 | +| 数据类型 | INT8 | 整数格式,缓存 1字节/元素 | | ||
| 25 | +| 参数获取方式 | 静态 | scale/offset 在量化阶段确定并作为参数固化(`requires_grad=False`),推理时直接使用;名字中的 "Dynamic" 指推理时对动态增长的缓存实时量化,而非在线计算 scale | | ||
| 26 | +| 量化粒度 | per-channel | 按隐藏维(head_dim)共享 scale/offset,参数数量与 hidden 同量级、开销可忽略;适配不同隐藏维的数值差异 | | ||
| 27 | +| 对称性 | 对称或非对称 | 依据数值分布是否对称选择,对称仅 scale、非对称加 offset | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +量化与反量化采用标准线性映射。对称量化(仅 scale、无零点): | ||
| 32 | +$$q = \mathrm{round}(x / s), \qquad \hat{x} = q \cdot s, \qquad s = \frac{\max(|x|)}{2^{b-1}}$$ | ||
| 33 | + | ||
| 34 | +非对称量化(含零点 offset): | ||
| 35 | +$$q = \mathrm{round}(x / s) + z, \qquad \hat{x} = (q - z) \cdot s, \qquad s = \frac{\max(x) - \min(x)}{2^b - 1}$$ | ||
| 36 | + | ||
| 37 | +其中 $x$ 为待量化张量,$q$ 为量化后的整数值,$\hat{x}$ 为反量化还原值,$s$ 为 scale,$z$ 为零点 offset,$b$ 为位宽(此处 INT8 取 $b=8$),且 $z = \mathrm{round}(-\min(x)/s)$。作用对象为缓存的 K/V 张量,量化参数按隐藏维度(head_dim)per-channel 计算(对称或非对称),见「模式规格」表。 | ||
| 38 | + | ||
| 39 | +### 与其他模式的关系 | ||
| 40 | + | ||
| 41 | +- **与 [FA PerHead 量化](../fa_quantization/term_fa_perhead.md)(进阶关系)** | ||
| 42 | + - 本模式只量化 K/V,解决"存储"问题——缓存显存减半、支持更长上下文。 | ||
| 43 | + - FA 量化在其基础上进一步量化 Q,额外使能低精度注意力矩阵运算。本模式是 FA 量化的必要基础:若 K 不量化,仅量化 Q 无法走整数/低精度注意力得分计算。 | ||
| 44 | + | ||
| 45 | +- **与 [W8A8 静态量化](../linear_layer_quantization/term_w8a8_static.md)(正交关系,可叠加)** | ||
| 46 | + - 量化对象不同:本模式作用于注意力缓存(特殊激活),W8A8 作用于权重与激活矩阵乘。 | ||
| 47 | + - 二者互不干扰、可组合:权重与激活按 W8A8 量化,KVCache 另行按本模式压缩,共同构成整体量化方案。 | ||
| 48 | + | ||
| 49 | +### 适用场景与限制 | ||
| 50 | + | ||
| 51 | +#### 1. 适用场景 | ||
| 52 | + | ||
| 53 | +- **长上下文推理**:上下文长度大、KV 显存成为瓶颈的场景,如长文档问答、代码仓库理解。 | ||
| 54 | +- **高并发服务**:压缩每请求缓存显存,提升同显存下的并发 batch。 | ||
| 55 | +- **作为 FA 量化的基础**:K/V 量化后叠加 Q 量化,在省 KV 显存之外进一步使能低精度注意力矩阵运算。 | ||
| 56 | + | ||
| 57 | +#### 2. 使用限制 | ||
| 58 | + | ||
| 59 | +- **当前仅支持 per-channel + INT8**:msModelSlim 中 `FakeQuantDynamicCache` 仅注册 INT8 per-channel(对称/非对称),更细粒度或更低比特暂不支持。 | ||
| 60 | +- **精度敏感场景需评估**:KV 参与注意力得分计算,量化误差可能被累加放大,极端长序列下需验证精度。 | ||
| 61 | + | ||
| 62 | +--- | ||
| 63 | + | ||
| 64 | +## 3. 关联流程 | ||
| 65 | + | ||
| 66 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 YAML 配置选择本模式并执行量化。 | ||
| 67 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 68 | + | ||
| 69 | +--- | ||
| 70 | + | ||
| 71 | +## 4. 关联词条 | ||
| 72 | + | ||
| 73 | +- [量化模式](../README.md):上位概念,本词条属于[KVCache 量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 74 | +- [FA PerHead 量化](../fa_quantization/term_fa_perhead.md):进阶模式,在 K/V 量化基础上追加 Q 量化。 | ||
| 75 | +- [W8A8 静态量化](../linear_layer_quantization/term_w8a8_static.md):配套模式,可与本模式叠加使用。 | ||
| 76 | +- 《[KVCache量化:缓存量化算法说明](../../quantization_algorithms/kvcache_quant/kvcache_quant.md)》:配套术语,本模式对应的算法处理器文档。 | ||
| 77 | +- 《[KVSmooth:KVCache量化离群值抑制算法说明](../../quantization_algorithms/kv_smooth/kv_smooth.md)》:前置术语,量化前对 KV 做平滑以降低量化误差。 | ||
| 78 | + | ||
| 79 | +--- | ||
| 80 | + | ||
| 81 | +## 5. 参考文档 | ||
| 82 | + | ||
| 83 | +1. 《[KVCache量化:缓存量化算法说明](../../quantization_algorithms/kvcache_quant/kvcache_quant.md)》 | ||
| 84 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,121 @@ | |||
| 1 | +# 线性层量化 量化术语百科词条 | ||
J | |||
| 2 | + | ||
| 3 | +<!-- waiver: G01 原因:本文件为量化模式目录下的类别文档,不适用 term_<english_name>.md 词条命名 --> | ||
| 4 | +<!-- waiver: S01 原因:索引/类别文档采用目录结构(术语列表 / 模式清单),不适用词条模板的「2. 词条介绍」必填章节,依 01 清单 S03 组织自身结构 --> | ||
| 5 | + | ||
| 6 | +> **词条类别**:量化数据格式([量化模式](../README.md)) | ||
| 7 | +> **英文名称**:Linear Layer Quantization | ||
| 8 | +> **应用领域**:大语言模型量化压缩、推理加速 | ||
| 9 | +> **msModelSlim 实现**:[`msmodelslim/ir/w8a8_static.py`](../../../../../msmodelslim/ir/w8a8_static.py)(`*FakeQuantLinear` 系列) | ||
| 10 | + | ||
| 11 | +--- | ||
| 12 | + | ||
| 13 | +<a id="overview"></a> | ||
| 14 | + | ||
| 15 | +## 概述 | ||
| 16 | + | ||
| 17 | +线性层量化是对大语言模型中占比最高的**线性层(Linear / MatMul)的权重(W)与激活(A)**进行量化的一类量化模式,属于[量化模式](../README.md)中的主体类别。它量化的对象是线性层矩阵乘法两侧的张量:权重是静态参数、每个 token 都必须整体读取;激活是随输入实时变化的中间张量。对这两类张量的位宽组合,通常用 `WxAy` 记法表示,如 W8A8 表示权重与激活均为 8bit(INT8)。 | ||
| 18 | + | ||
| 19 | +为何聚焦线性层:每个 token 前向都要读取全部权重,权重位宽直接决定访存带宽瓶颈;激活位宽则决定整数 GEMM 能否落地。因此此类模式数量最多,是量化模式的主体。典型如 [W8A8 静态量化](term_w8a8_static.md)——对 Linear 层权重与激活均做 INT8 静态量化。 | ||
| 20 | + | ||
| 21 | +--- | ||
| 22 | + | ||
| 23 | +<a id="linear-compute"></a> | ||
| 24 | + | ||
| 25 | +## 线性层如何运算与可量化对象 | ||
| 26 | + | ||
| 27 | +线性层(Linear / MatMul)是 Transformer 的主体计算——Q/K/V 投影、注意力输出投影、MLP 的上/门/下三层都是线性层。一次线性层计算就是一次矩阵乘法: | ||
| 28 | + | ||
| 29 | +$$Y = X \cdot W + b$$ | ||
| 30 | + | ||
| 31 | +其中 $X$ 是输入激活(形状 $(batch, seq, in\_dim)$),$W$ 是权重(形状 $(in\_dim, out\_dim)$),$b$ 是偏置,$Y$ 是输出激活。LLM 推理分两个阶段:**prefill** 一次处理整个输入 prompt(计算密集),**decode** 逐个生成 token(访存密集)。 | ||
| 32 | + | ||
| 33 | +矩阵乘法只有两个输入张量,因此线性层中可量化对象也只有两个: | ||
| 34 | + | ||
| 35 | +- **权重 $W$**:静态张量,训练后固定、每步推理都要整体读取一次。decode 阶段权重访存是主要吞吐瓶颈,因此权重量化侧重**压缩**——压低位宽以减小访存,如 [W8A8 静态量化](term_w8a8_static.md) 的 INT8 权重、[W4A8 动态量化](term_w4a8_dynamic.md) 的 INT4 权重。 | ||
| 36 | +- **输入激活 $X$**:动态张量,由前一层实时产生、分布随输入变化,对量化误差敏感。激活量化侧重**保精度**——多配合动态量化或细粒度(如 per-token),如 [W8A8 动态量化](term_w8a8_dynamic.md) 的激活 per-token 动态量化。 | ||
| 37 | + | ||
| 38 | +量化模式本质上是**对这两个张量分别应用某种量化(位宽、数据类型、参数获取方式、量化粒度、对称性)后的组合**:如 [W8A8 静态量化](term_w8a8_static.md) 对 W 与 A 均做 8bit INT8 静态量化、[W8A16 静态量化](term_w8a16_static.md) 只量化 W 而 A 保持 16bit、[W4A8 动态量化](term_w4a8_dynamic.md) 则 W 4bit、A 8bit 且激活走动态。两个张量各自的维度选择,就构成下述"该类一般的量化选择"。 | ||
| 39 | + | ||
| 40 | +--- | ||
| 41 | + | ||
| 42 | +<a id="mode-options"></a> | ||
| 43 | + | ||
| 44 | +## 该类一般的量化选择 | ||
J 【review】可以通过表格定性对比精度和性能 ![]() ![]() | |||
| 45 | + | ||
| 46 | +同一类线性层结构可实施不同的量化方式,差异体现在以下几个维度: | ||
| 47 | + | ||
| 48 | +- **位宽组合**:权重与激活可取相同或不同位宽。相同位宽(W8A8、W4A4)压缩与精度较均衡;激活位宽高于权重(W8A16、W4A8)牺牲部分压缩换取精度。见 [W8A16 静态量化](term_w8a16_static.md)、[W4A8 动态量化](term_w4a8_dynamic.md)。 | ||
| 49 | +- **参数获取方式**:静态(离线校准、推理时固化,如 [W8A8 静态量化](term_w8a8_static.md))或动态(推理在线统计、免校准,如 [W8A8 动态量化](term_w8a8_dynamic.md)、[W4A4 动态量化](term_w4a4_dynamic.md))。 | ||
| 50 | +- **量化粒度**:权重通常按通道(per-channel)或分组(per-group)静态量化;激活通常按 token(per-token)动态量化或按整个张量(per-tensor)静态量化;MX 系列采用按块(per-block)块级共享指数。 | ||
| 51 | +- **数据类型**:INT 整数(INT8/INT4)、FP8 浮点(如 [W8A8 FP8 动态量化](term_w8a8_fp8_dynamic.md))、MX 块级共享指数(如 [W4A4 MX 动态量化](term_w4a4_mx_dynamic.md)、[W4A4 MX 双 Scale 量化](term_w4a4_mx_dualscale.md))。 | ||
| 52 | +- **特殊变体**:[W8A8 PD-Mix 量化](term_w8a8_pdmix.md) 按 Prefill/Decode 阶段切换激活策略;[W16A16S 量化](term_w16a16s.md) 不降位宽、承载上游稀疏权重,作为稀疏量化基线。 | ||
| 53 | + | ||
| 54 | +各类模式在**精度**(量化误差对模型输出的影响)与**性能**(权重/激活访存与计算收益)之间取舍,可定性对比如下: | ||
| 55 | + | ||
| 56 | +| 模式 | 精度(定性) | 性能(定性) | 取舍要点 | | ||
| 57 | +|------|------------|------------|---------| | ||
| 58 | +| [W8A8 静态量化](term_w8a8_static.md) | 高 | 高 | INT8 主流方案,需离线校准,静态 scale 对分布变化略敏感 | | ||
| 59 | +| [W8A8 动态量化](term_w8a8_dynamic.md) | 更高 | 高 | 激活 per-token 在线统计 scale,免校准,但增加少量在线开销 | | ||
| 60 | +| [W4A4 动态量化](term_w4a4_dynamic.md) | 中 | 最高 | 双 4bit 访存收益最大,激活 4bit 精度风险高 | | ||
| 61 | +| [W8A16 静态量化](term_w8a16_static.md) | 最高 | 中 | 仅压缩权重,激活保 16bit 精度,性能收益减半 | | ||
| 62 | +| [W4A8 动态量化](term_w4a8_dynamic.md) | 中高 | 高 | 权重 4bit 极致压缩,激活 8bit 保精度,压缩与精度的折中 | | ||
| 63 | +| [W8A8 PD-Mix 量化](term_w8a8_pdmix.md) | 高 | 高 | 激活策略随 prefill/decode 切换,兼顾两阶段特性 | | ||
| 64 | +| [W8A8 FP8 动态量化](term_w8a8_fp8_dynamic.md) | 高 | 高 | FP8 保留浮点动态范围、对离群值耐受,依赖 FP8 算子 | | ||
| 65 | +| [W8A8 MX 动态量化](term_w8a8_mx_dynamic.md) | 中高 | 高 | MXFP8 块级共享指数,缩放参数开销低,依赖 MX 硬件 | | ||
| 66 | +| [W4A8 MX 动态量化](term_w4a8_mx_dynamic.md) | 中高 | 高 | MXFP4 权重 + MXFP8 激活,访存收益与精度折中 | | ||
| 67 | +| [W4A4 MX 动态量化](term_w4a4_mx_dynamic.md) | 中 | 最高 | 双 4bit MX 压缩最大化,依赖 MX 硬件、需块对齐 | | ||
| 68 | +| [W4A4 MX 双 Scale 量化](term_w4a4_mx_dualscale.md) | 中高 | 高 | 双层 scale 兜底 4bit 精度,实现与配置更复杂 | | ||
| 69 | +| [W16A16S 量化](term_w16a16s.md) | 最高 | 中 | 不降位宽,承载上游稀疏权重,作为稀疏基线 | | ||
| 70 | + | ||
| 71 | +> 注:表中"性能"特指量化后的权重/激活访存与计算收益,均为定性排序;实际收益取决于目标硬件算子支持与模型分布,详见各模式词条与[量化模式](../README.md)「模式索引」。 | ||
| 72 | + | ||
| 73 | +--- | ||
| 74 | + | ||
| 75 | +<a id="modes"></a> | ||
| 76 | + | ||
| 77 | +## 该类下的模式清单 | ||
| 78 | + | ||
| 79 | +以下为 msModelSlim 支持的线性层量化模式清单(完整规格含承载 IR 类与量化参数,见[量化模式](../README.md)「模式索引」): | ||
| 80 | + | ||
| 81 | +| 模式 | 一句话 | | ||
| 82 | +|------|--------| | ||
| 83 | +| [W8A8 静态量化](term_w8a8_static.md) | 权重与激活均 INT8 静态 | | ||
| 84 | +| [W8A8 动态量化](term_w8a8_dynamic.md) | 权重静态、激活 per-token 动态 | | ||
| 85 | +| [W4A4 动态量化](term_w4a4_dynamic.md) | 权重与激活均 INT4、激活动态 | | ||
| 86 | +| [W8A16 静态量化](term_w8a16_static.md) | 仅权重 INT8,激活 FP16 不量化 | | ||
| 87 | +| [W4A8 动态量化](term_w4a8_dynamic.md) | 权重 INT4、激活 INT8 动态 | | ||
| 88 | +| [W8A8 PD-Mix 量化](term_w8a8_pdmix.md) | 激活策略随 Prefill/Decode 阶段切换 | | ||
| 89 | +| [W8A8 FP8 动态量化](term_w8a8_fp8_dynamic.md) | 权重与激活均 FP8(E4M3) 动态 | | ||
| 90 | +| [W8A8 MX 动态量化](term_w8a8_mx_dynamic.md) | 权重与激活均 MXFP8 per-block 动态 | | ||
| 91 | +| [W4A8 MX 动态量化](term_w4a8_mx_dynamic.md) | 权重 MXFP4、激活 MXFP8 per-block 动态 | | ||
| 92 | +| [W4A4 MX 动态量化](term_w4a4_mx_dynamic.md) | 权重与激活均 MXFP4 per-block 动态 | | ||
| 93 | +| [W4A4 MX 双 Scale 量化](term_w4a4_mx_dualscale.md) | MXFP4 双 scale、per-block 动态 | | ||
| 94 | +| [W16A16S 量化](term_w16a16s.md) | 16bit 权重/激活(含稀疏) | | ||
| 95 | +| [SVDQuant](../../quantization_algorithms/svdquant/svdquant.md) | 低秩分解 + 残差低比特量化,配合线性层量化使用 | | ||
| 96 | + | ||
| 97 | +--- | ||
| 98 | + | ||
| 99 | +## 关联流程 | ||
| 100 | + | ||
| 101 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择线性层量化模式。 | ||
| 102 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:量化模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 103 | + | ||
| 104 | +--- | ||
| 105 | + | ||
| 106 | +<a id="related-terms"></a> | ||
| 107 | + | ||
| 108 | +## 关联词条 | ||
| 109 | + | ||
| 110 | +- [量化模式](../README.md):上位概念,本词条是"线性层量化"类别。 | ||
| 111 | +- [KVCache 量化](../kv_cache_quantization/README.md):同位概念,作用于注意力 K/V 缓存的量化类别,可与本类叠加。 | ||
| 112 | +- [FA 量化](../fa_quantization/README.md):同位概念,KVCache 量化的进阶。 | ||
| 113 | +- [W8A8 静态量化](term_w8a8_static.md):下位概念,本类别下最基础的静态模式。 | ||
| 114 | +- 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》:配套术语,描述线性层量化模式的处理器实现。 | ||
| 115 | + | ||
| 116 | +--- | ||
| 117 | + | ||
| 118 | +## 参考资料 | ||
| 119 | + | ||
| 120 | +1. 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 121 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,81 @@ | |||
| 1 | +# W16A16S 量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([线性层量化](../README.md)) | ||
| 4 | +> **英文名称**:W16A16S Quantization | ||
| 5 | +> **应用领域**:大语言模型量化压缩、推理加速 | ||
| 6 | +> **承载 IR 类**:`W16A16sLinear`([`msmodelslim/ir/w16a16s.py`](../../../../../msmodelslim/ir/w16a16s.py),`nn.Module` 子类,非 `AutoFakeQuantLinear`) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +W16A16S 严格说不是「量化」模式,而是稀疏量化方案的**精度基线**:权重与激活都保持 [FP16/BF16](../../quantization_basic/term_fp16_bf16.md) 不量化,权重张量承载上游 ADMM 剪枝产出的、已按比例(如 30%)置零的稀疏权重。它隔离掉位宽量化误差,让稀疏方案的对照实验只反映「稀疏」一个维度的收益——前向仍是 [FP16/BF16](../../quantization_basic/term_fp16_bf16.md) 线性层计算,零值元素由硬件稀疏算子跳过。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 权重 W、激活 A | 均不量化,保持 FP16 原样参与计算 | | ||
| 23 | +| 位宽 | W 16bit,A 16bit | 无位宽压缩 | | ||
| 24 | +| 数据类型 | FP16 | 浮点 | | ||
| 25 | +| 参数获取方式 | 不适用 | 不产生量化参数;权重为上游剪枝产出的稀疏 FP16 权重 | | ||
| 26 | +| 量化粒度 | 不适用 | 稀疏按元素幅值置零,无量化粒度概念 | | ||
| 27 | +| 对称性 | 不适用 | 无量化参数 | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +本模式不降位宽、不引入量化误差,作为稀疏量化基线,无量化/反量化公式。其权重与激活保持 16bit(FP16/BF16),承载的是上游稀疏化后的张量。 | ||
| 32 | + | ||
| 33 | +### 与其他模式的关系 | ||
| 34 | + | ||
| 35 | +- **与 [W8A16 静态量化](term_w8a16_static.md)(同为高精度基线,收益来源不同)** | ||
| 36 | + - 本模式:W/A 均不量化,收益来自稀疏(跳过零值元素);是稀疏维度的对照基线。 | ||
| 37 | + - W8A16:收益来自权重位宽压缩(8bit 访存减半);是位宽维度的对照基线。二者分别对应「稀疏」与「位宽」两条独立的压缩路径。 | ||
| 38 | + | ||
| 39 | +- **与 [W8A8 静态量化](term_w8a8_static.md)(整数量化方案)** | ||
| 40 | + - 本模式是稀疏基线、零量化误差;W8A8 是整数量化方案。实际稀疏量化常把二者叠加(稀疏 W8A8),本模式用于评估稀疏单独引入的精度损失。 | ||
| 41 | + | ||
| 42 | +- **与 [W4A4 动态量化](term_w4a4_dynamic.md)(极致压缩方案)** | ||
| 43 | + - 本模式完全不压缩位宽、是压缩-精度谱系的精度上界;W4A4 极致压缩位宽、精度风险最高。二者代表谱系的两端。 | ||
| 44 | + | ||
| 45 | +### 适用场景与限制 | ||
| 46 | + | ||
| 47 | +#### 1. 适用场景 | ||
| 48 | + | ||
| 49 | +- **稀疏量化精度基线**:评估稀疏方案精度时,作为不受位宽量化干扰的对照。 | ||
| 50 | +- **稀疏收益评估**:单独衡量稀疏权重在目标硬件上的计算/访存收益。 | ||
| 51 | +- **精度敏感层**:需要完全保留精度的层,作为量化方案中的保留路径。 | ||
| 52 | + | ||
| 53 | +#### 2. 使用限制 | ||
| 54 | + | ||
| 55 | +- **无位宽压缩收益**:本身不降位宽,不作为最终部署的压缩方案。 | ||
| 56 | +- **依赖稀疏硬件支持**:稀疏收益需目标硬件稀疏算子支持,否则与普通 FP16 无异。 | ||
| 57 | +- **非量化 IR**:不属于 `AutoFakeQuantLinear` 体系,不参与量化参数的计算与校验。 | ||
| 58 | + | ||
| 59 | +--- | ||
| 60 | + | ||
| 61 | +## 3. 关联流程 | ||
| 62 | + | ||
| 63 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择本模式并执行量化。 | ||
| 64 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 65 | + | ||
| 66 | +--- | ||
| 67 | + | ||
| 68 | +## 4. 关联词条 | ||
| 69 | + | ||
| 70 | +- [量化模式](../README.md):上位概念,本词条属于[线性层量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 71 | +- [W8A16 静态量化](term_w8a16_static.md):同类模式,位宽维度的精度基线。 | ||
| 72 | +- [W8A8 静态量化](term_w8a8_static.md):对比模式,可与其叠加构成稀疏 W8A8。 | ||
| 73 | +- [W4A4 动态量化](term_w4a4_dynamic.md):对比模式,位宽维度上的极致压缩方案。 | ||
| 74 | +- 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》:配套术语,线性层量化的处理器实现。 | ||
| 75 | + | ||
| 76 | +--- | ||
| 77 | + | ||
| 78 | +## 5. 参考文档 | ||
| 79 | + | ||
| 80 | +1. 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 81 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,89 @@ | |||
| 1 | +# W4A4 动态量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([线性层量化](../README.md)) | ||
| 4 | +> **英文名称**:W4A4 Dynamic Quantization | ||
| 5 | +> **应用领域**:大语言模型量化压缩、推理加速 | ||
| 6 | +> **承载 IR 类**:`W4A4DynamicPerChannelFakeQuantLinear` / `W4A4DynamicPerGroupFakeQuantLinear`([`msmodelslim/ir/w4a4_dynamic.py`](../../../../../msmodelslim/ir/w4a4_dynamic.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +W4A4 动态量化 = 对线性层的权重与激活都做 [INT4](../../quantization_basic/term_int4.md) 量化,激活量化参数逐 token 在线计算。它是压缩比最高的一类线性层方案:权重访存降至 [FP16/BF16](../../quantization_basic/term_fp16_bf16.md) 的 1/4;但 4bit 仅16个量化档位,必须依赖 per-token 动态量化与 per-channel/per-group 细粒度兜底,才能把精度损失压到可接受范围。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 权重 W、激活 A | 线性层矩阵乘两侧的张量 | | ||
| 23 | +| 位宽 | W 4bit,A 4bit | 同为 4bit,权重访存降至 [FP16/BF16](../../quantization_basic/term_fp16_bf16.md) 的 1/4、INT8 的 1/2 | | ||
| 24 | +| 数据类型 | INT4 | 整数格式(内部以 INT8 承载存储) | | ||
| 25 | +| 参数获取方式 | 激活动态 / 权重静态 | 激活逐 token 在线求 min/max 并计算 scale;权重 scale/offset 在量化阶段固化 | | ||
| 26 | +| 量化粒度 | 权重 per-channel/per-group;激活 per-token | 权重逐输出通道或按固定分组(如 128元素)共享 scale/offset;激活逐 token 共享 scale | | ||
| 27 | +| 对称性 | 激活对称;权重对称或非对称 | 激活对称仅 scale;权重可加 offset 适配非对称分布 | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +量化与反量化采用标准线性映射。对称量化(仅 scale、无零点): | ||
| 32 | +$$q = \mathrm{round}(x / s), \qquad \hat{x} = q \cdot s, \qquad s = \frac{\max(|x|)}{2^{b-1}}$$ | ||
| 33 | + | ||
| 34 | +非对称量化(含零点 offset): | ||
| 35 | +$$q = \mathrm{round}(x / s) + z, \qquad \hat{x} = (q - z) \cdot s, \qquad s = \frac{\max(x) - \min(x)}{2^b - 1}$$ | ||
| 36 | + | ||
| 37 | +其中 $x$ 为待量化张量,$q$ 为量化后的整数值,$\hat{x}$ 为反量化还原值,$s$ 为 scale,$z$ 为零点 offset,$b$ 为位宽(INT8 取 $b=8$,INT4 取 $b=4$),且 $z = \mathrm{round}(-\min(x)/s)$。量化参数 $s$、$z$ 的获取方式(静态校准或在线动态)与作用粒度(per-channel、per-token、per-tensor 等)见「模式规格」表。 | ||
| 38 | + | ||
| 39 | +### 与其他模式的关系 | ||
| 40 | + | ||
| 41 | +- **与 [W8A8 静态量化](term_w8a8_static.md)(位宽不同)** | ||
| 42 | + - 本模式:优势是权重访存降至 [FP16/BF16](../../quantization_basic/term_fp16_bf16.md) 的 1/4,压缩与带宽收益最大化;劣势是仅16个量化档位、精度风险高,需动态量化 + per-group 粒度 + 离群值抑制兜底。 | ||
| 43 | + - W8A8:优势是 8bit 分辨率高、精度更稳,是通用部署基线;劣势是权重访存仅减半。 | ||
| 44 | + | ||
| 45 | +- **与 [W8A8 动态量化](term_w8a8_dynamic.md)(同为动态家族,位宽不同)** | ||
| 46 | + - 本模式:优势是压缩更狠、计算位宽更低;劣势是激活 4bit 对分布极其敏感,精度风险显著高于 8bit。 | ||
| 47 | + - W8A8 动态:优势是 8bit 精度更稳、在线归约与整体开销较低;劣势是压缩幅度小。 | ||
| 48 | + | ||
| 49 | +- **与 [W4A4 MX 动态量化](term_w4a4_mx_dynamic.md)(同为 W4A4,数据类型不同)** | ||
| 50 | + - 本模式(INT4):优势是整数格式、硬件算子生态成熟;劣势是均匀分档对离群值敏感,动态范围受限。 | ||
| 51 | + - MXFP4:优势是块级共享指数保留浮点动态范围,对离群值更耐受;劣势是依赖硬件 MX 支持、块粒度需对齐。 | ||
| 52 | + | ||
| 53 | +### 适用场景与限制 | ||
| 54 | + | ||
| 55 | +#### 1. 适用场景 | ||
| 56 | + | ||
| 57 | +- **高压缩比部署**:显存/带宽受限、追求极致压缩的场景,如大规模服务端多模型部署。 | ||
| 58 | +- **对精度不敏感的任务**:任务本身对量化噪声容忍度高的场景。 | ||
| 59 | + | ||
| 60 | +#### 2. 使用限制 | ||
| 61 | + | ||
| 62 | +- **精度门槛高**:4bit 激活量化精度风险大,通常需要配合离群值抑制(如 [SmoothQuant](../../quantization_algorithms/smooth_quant/smooth_quant.md))与精度调优方可上线。 | ||
| 63 | +- **硬件算子依赖**:INT4 整数 GEMM 需目标硬件算子库支持,否则无法兑现计算收益。 | ||
| 64 | + | ||
| 65 | +--- | ||
| 66 | + | ||
| 67 | +## 3. 关联流程 | ||
| 68 | + | ||
| 69 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择本模式并执行量化。 | ||
| 70 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 71 | + | ||
| 72 | +--- | ||
| 73 | + | ||
| 74 | +## 4. 关联词条 | ||
| 75 | + | ||
| 76 | +- [量化模式](../README.md):上位概念,本词条属于[线性层量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 77 | +- [W8A8 动态量化](term_w8a8_dynamic.md):对比模式,INT8 位宽、精度更稳。 | ||
| 78 | +- [W8A8 静态量化](term_w8a8_static.md):对比模式,INT8 静态方案、精度基线。 | ||
| 79 | +- [W4A4 MX 动态量化](term_w4a4_mx_dynamic.md):同类模式,改用 MXFP4 浮点格式。 | ||
| 80 | +- [W8A16 静态量化](term_w8a16_static.md):对比模式,激活保持 16bit 的高精度方案。 | ||
| 81 | +- 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》:配套术语,本模式的处理器实现。 | ||
| 82 | +- 《[LAOS:w4a4量化方案说明](../../quantization_algorithms/laos/laos.md)》:配套术语,面向 W4A4 的精度优化算法。 | ||
| 83 | + | ||
| 84 | +--- | ||
| 85 | + | ||
| 86 | +## 5. 参考文档 | ||
| 87 | + | ||
| 88 | +1. 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 89 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,87 @@ | |||
| 1 | +# W4A4 MX 双 Scale 量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([线性层量化](../README.md)) | ||
| 4 | +> **英文名称**:W4A4 MX Dual-Scale Quantization | ||
| 5 | +> **应用领域**:大语言模型量化压缩、推理加速 | ||
| 6 | +> **承载 IR 类**:`W4A4MXDynamicDualScaleFakeQuantLinear`([`msmodelslim/ir/w4a4_mx_dynamic_dualscale.py`](../../../../../msmodelslim/ir/w4a4_mx_dynamic_dualscale.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +W4A4 MX 双 Scale 量化 = [W4A4 MX 动态量化](term_w4a4_mx_dynamic.md) 的**精度增强版**:在单层块级指数之外,再叠一层大块(如 512元素)高精度浮点 scale,构成「外层保量级、内层保细节」的两级缩放。它解决单层 [MXFP4](../../quantization_basic/term_mxfp.md) 在大块内部量级差异大或存在强离群值时的精度不足问题,以极少的额外参数换取 4bit 位宽下的明显精度提升。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 权重 W、激活 A | 线性层矩阵乘两侧的张量 | | ||
| 23 | +| 位宽 | W 4bit,A 4bit | 权重与激活访存均降至 FP16 的 1/4 | | ||
| 24 | +| 数据类型 | MXFP4 双 scale | 外层大块高精度浮点 scale + 内层 32元素 E8M0 指数,元素为 1符号 + 2指数 + 1尾数 | | ||
| 25 | +| 参数获取方式 | 激活动态 / 权重静态 | 激活两级参数前向在线计算;权重两级参数量化阶段固化 | | ||
| 26 | +| 量化粒度 | 双层块粒度 | 外层 `dual_block_size`(如 512)共享高精度 scale;内层 32元素共享 E8M0 指数 | | ||
| 27 | +| 对称性 | 对称 | 仅 scale/指数,无 offset | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +MX 格式按块共享 E8M0 指数,块内每个元素用块级指数缩放后量化为主尾数: | ||
| 32 | +$$e = \lfloor \log_2(\max_{i \in \mathrm{block}}|x_i|) \rfloor, \qquad q_i = \mathrm{round}_{MX}\left(\frac{x_i}{2^e}\right), \qquad \hat{x}_i = q_i \cdot 2^e$$ | ||
| 33 | + | ||
| 34 | +其中块大小32元素,$e$ 为块内共享的 E8M0 指数,$q_i$ 为块内第 $i$ 个元素的量化尾数(MXFP8 为 FP8 尾数、MXFP4 为 FP4 尾数),$\hat{x}_i$ 为反量化还原值。每块共享一个 $e$;量化参数在线计算(激活)或量化阶段固化(权重),见「模式规格」表。 | ||
| 35 | + | ||
| 36 | +### 与其他模式的关系 | ||
| 37 | + | ||
| 38 | +- **与 [W4A4 MX 动态量化](term_w4a4_mx_dynamic.md)(同为 MXFP4,缩放层级不同)** | ||
| 39 | + - 本模式(双 scale):优势是两级缩放解耦「整体量级」与「局部动态范围」,强离群值或量级差异大的大块下精度明显更稳;劣势是多一层参数与配置(`dual_block_size`)、实现更复杂。 | ||
| 40 | + - 单层:优势是实现简单、参数开销最低;劣势是单个块指数难以同时覆盖量级与细节,极端分布下精度受限。 | ||
| 41 | + | ||
| 42 | +- **与 [W4A4 动态量化](term_w4a4_dynamic.md)(数据类型与缩放不同)** | ||
| 43 | + - 本模式(MXFP4 双 scale):优势是浮点动态范围 + 两级缩放,精度显著优于 INT4 均匀分档;劣势是依赖 MX 硬件支持、块对齐约束。 | ||
| 44 | + - INT4:优势是整数 GEMM 生态成熟、实现简单;劣势是对离群值敏感、动态范围受限。 | ||
| 45 | + | ||
| 46 | +- **与 [W4A8 MX 动态量化](term_w4a8_mx_dynamic.md)(激活位宽不同)** | ||
| 47 | + - 本模式:优势是激活亦压到 4bit、压缩比最大化,双 scale 用于兜底激活精度;劣势是 4bit 固有精度风险仍高于 8bit。 | ||
| 48 | + - W4A8 MX:优势是激活保持 8bit、天然更稳;劣势是激活访存收益小于全 4bit。 | ||
| 49 | + | ||
| 50 | +### 适用场景与限制 | ||
| 51 | + | ||
| 52 | +#### 1. 适用场景 | ||
| 53 | + | ||
| 54 | +- **W4A4 精度敏感部署**:需要在 4bit 位宽下尽量逼近 FP16 精度的场景。 | ||
| 55 | +- **存在离群值的超低比特量化**:单层 MXFP4 精度不足、需要两级缩放缓解离群值影响。 | ||
| 56 | +- **昇腾 MXFP 推理路径**:硬件/算子库原生支持 MX 格式及双 scale 计算的部署。 | ||
| 57 | + | ||
| 58 | +#### 2. 使用限制 | ||
| 59 | + | ||
| 60 | +- **依赖硬件/算子支持**:双 scale 计算需目标硬件算子库支持。 | ||
| 61 | +- **块粒度对齐**:外层大块与内层小块尺寸均需能整除张量最后维。 | ||
| 62 | +- **配置约束**:`dual_block_size` 需按硬件与张量形状合理选取,取值不当会引入额外开销。 | ||
| 63 | +- **4bit 固有精度门槛**:即使双 scale,激活/权重 4bit 的精度风险仍高于 8bit 方案。 | ||
| 64 | + | ||
| 65 | +--- | ||
| 66 | + | ||
| 67 | +## 3. 关联流程 | ||
| 68 | + | ||
| 69 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择本模式并执行量化。 | ||
| 70 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 71 | + | ||
| 72 | +--- | ||
| 73 | + | ||
| 74 | +## 4. 关联词条 | ||
| 75 | + | ||
| 76 | +- [量化模式](../README.md):上位概念,本词条属于[线性层量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 77 | +- [W4A4 MX 动态量化](term_w4a4_mx_dynamic.md):同类模式,单层缩放的 MXFP4 基础版。 | ||
| 78 | +- [W4A4 动态量化](term_w4a4_dynamic.md):对比模式,INT4 整数方案。 | ||
| 79 | +- [W4A8 MX 动态量化](term_w4a8_mx_dynamic.md):同类模式,激活改用 MXFP8 保精度。 | ||
| 80 | +- 《[DualScale:w4a4量化方案说明](../../quantization_algorithms/dual_scale/dual_scale.md)》:配套术语,本模式对应的算法处理器文档。 | ||
| 81 | + | ||
| 82 | +--- | ||
| 83 | + | ||
| 84 | +## 5. 参考文档 | ||
| 85 | + | ||
| 86 | +1. 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 87 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,87 @@ | |||
| 1 | +# W4A4 MX 动态量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([线性层量化](../README.md)) | ||
| 4 | +> **英文名称**:W4A4 MX Dynamic Quantization | ||
| 5 | +> **应用领域**:大语言模型量化压缩、推理加速 | ||
| 6 | +> **承载 IR 类**:`W4A4MXDynamicPerBlockFakeQuantLinear`([`msmodelslim/ir/w4a4_mx_dynamic.py`](../../../../../msmodelslim/ir/w4a4_mx_dynamic.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +W4A4 MX 动态量化 = 双 4bit 的 MX 超低比特方案:权重与激活都按 32元素块共享 E8M0 指数、元素为 [MXFP4](../../quantization_basic/term_mxfp.md)。它在 4bit 位宽下用块级共享指数保留浮点动态范围,权重与激活访存都降至 [FP16/BF16](../../quantization_basic/term_fp16_bf16.md) 的 1/4,是压缩比最高的一类线性层方案;对离群值比 [INT4](../../quantization_basic/term_int4.md) 均匀分档更耐受,但激活 4bit 的固有精度风险依然存在。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 权重 W、激活 A | 线性层矩阵乘两侧的张量 | | ||
| 23 | +| 位宽 | W 4bit,A 4bit | 权重与激活访存均降至 FP16 的 1/4 | | ||
| 24 | +| 数据类型 | MXFP4 | 每32元素共享一个 E8M0 指数,元素为 1符号 + 2指数 + 1尾数(emax=2,max 6) | | ||
| 25 | +| 参数获取方式 | 激活动态 / 权重静态 | 激活块级指数前向在线统计;权重块级指数量化阶段固化 | | ||
| 26 | +| 量化粒度 | 权重/激活均 per-block(32元素) | 最后维按 32元素分块,每块共享一个指数 | | ||
| 27 | +| 对称性 | 对称 | 仅指数/scale,无 offset | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +MX 格式按块共享 E8M0 指数,块内每个元素用块级指数缩放后量化为主尾数: | ||
| 32 | +$$e = \lfloor \log_2(\max_{i \in \mathrm{block}}|x_i|) \rfloor, \qquad q_i = \mathrm{round}_{MX}\left(\frac{x_i}{2^e}\right), \qquad \hat{x}_i = q_i \cdot 2^e$$ | ||
| 33 | + | ||
| 34 | +其中块大小32元素,$e$ 为块内共享的 E8M0 指数,$q_i$ 为块内第 $i$ 个元素的量化尾数(MXFP8 为 FP8 尾数、MXFP4 为 FP4 尾数),$\hat{x}_i$ 为反量化还原值。每块共享一个 $e$;量化参数在线计算(激活)或量化阶段固化(权重),见「模式规格」表。 | ||
| 35 | + | ||
| 36 | +### 与其他模式的关系 | ||
| 37 | + | ||
| 38 | +- **与 [W4A4 动态量化](term_w4a4_dynamic.md)(同为 W4A4,数据类型不同)** | ||
| 39 | + - 本模式(MXFP4):优势是块级共享指数保留浮点动态范围、对离群值比 [INT4](../../quantization_basic/term_int4.md) 均匀分档更耐受;劣势是依赖硬件 MX 支持、最后维需 32 对齐。 | ||
| 40 | + - INT4:优势是整数 GEMM 生态成熟、实现简单;劣势是均匀分档对离群值敏感,需更细粒度与离群抑制兜底。 | ||
| 41 | + | ||
| 42 | +- **与 [W4A4 MX 双 Scale 量化](term_w4a4_mx_dualscale.md)(同为 MXFP4,缩放层级不同)** | ||
| 43 | + - 本模式(单层):优势是实现简单、参数开销最低;劣势是大块内部量级差异大或存在强离群值时,单个指数难以同时覆盖「整体量级」与「局部细节」。 | ||
| 44 | + - 双 Scale:优势是外层高精度 scale 保不溢出、内层指数保细节,精度明显更稳;劣势是多一层参数与配置(`dual_block_size`),实现更复杂。 | ||
| 45 | + | ||
| 46 | +- **与 [W4A8 MX 动态量化](term_w4a8_mx_dynamic.md)(激活位宽不同)** | ||
| 47 | + - 本模式:优势是激活亦压到 4bit、压缩比最大化;劣势是激活 4bit 精度风险远高于 8bit。 | ||
| 48 | + - W4A8 MX:优势是激活保持 8bit、精度更稳,是压缩与精度的折中。 | ||
| 49 | + | ||
| 50 | +### 适用场景与限制 | ||
| 51 | + | ||
| 52 | +#### 1. 适用场景 | ||
| 53 | + | ||
| 54 | +- **极致压缩部署**:显存/带宽受限、追求最大压缩比的场景,如大规模服务端多模型部署。 | ||
| 55 | +- **离群值敏感但需 4bit**:在 4bit 位宽下需要比 INT4 更好精度的场景。 | ||
| 56 | +- **昇腾 MXFP 推理路径**:硬件/算子库原生支持 MX 格式的部署。 | ||
| 57 | + | ||
| 58 | +#### 2. 使用限制 | ||
| 59 | + | ||
| 60 | +- **依赖硬件 MX 支持**:MXFP4 计算需目标硬件算子库支持。 | ||
| 61 | +- **块粒度对齐**:张量最后维需能被 32 整除,否则需 padding。 | ||
| 62 | +- **低比特精度门槛**:4bit 量化精度风险大,通常需配合离群值抑制与精度调优。 | ||
| 63 | +- **激活 4bit 风险**:激活 4bit 对分布极其敏感,比 W4A8 MX 方案风险更高。 | ||
| 64 | + | ||
| 65 | +--- | ||
| 66 | + | ||
| 67 | +## 3. 关联流程 | ||
| 68 | + | ||
| 69 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择本模式并执行量化。 | ||
| 70 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 71 | + | ||
| 72 | +--- | ||
| 73 | + | ||
| 74 | +## 4. 关联词条 | ||
| 75 | + | ||
| 76 | +- [量化模式](../README.md):上位概念,本词条属于[线性层量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 77 | +- [W4A4 动态量化](term_w4a4_dynamic.md):对比模式,INT4 整数方案。 | ||
| 78 | +- [W4A4 MX 双 Scale 量化](term_w4a4_mx_dualscale.md):同类模式,双层缩放的精度增强版。 | ||
| 79 | +- [W4A8 MX 动态量化](term_w4a8_mx_dynamic.md):同类模式,激活改用 MXFP8 保精度。 | ||
| 80 | +- 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》:配套术语,本模式的处理器实现。 | ||
| 81 | + | ||
| 82 | +--- | ||
| 83 | + | ||
| 84 | +## 5. 参考文档 | ||
| 85 | + | ||
| 86 | +1. 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 87 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,92 @@ | |||
| 1 | +# W4A8 动态量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([线性层量化](../README.md)) | ||
| 4 | +> **英文名称**:W4A8 Dynamic Quantization | ||
| 5 | +> **应用领域**:大语言模型量化压缩、推理加速 | ||
| 6 | +> **承载 IR 类**:`W4A8DynamicFakeQuantLinear`([`msmodelslim/ir/w4a8_dynamic.py`](../../../../../msmodelslim/ir/w4a8_dynamic.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +W4A8 动态量化 = 权重压到 [INT4](../../quantization_basic/term_int4.md)、激活保持 [INT8](../../quantization_basic/term_int8.md) 的**混合位宽**线性层方案,激活量化参数逐 token 在线计算。它在压缩与精度之间取折中:权重是每 token 都要整体读取的静态数据,压到 4bit 把权重访存降至 [FP16/BF16](../../quantization_basic/term_fp16_bf16.md) 的 1/4;激活是量化误差最敏感的一方,保留 8bit 分辨率并逐 token 动态量化,是「权重使劲压、激活保精度」的典型配置。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 权重 W、激活 A | 线性层矩阵乘两侧的张量 | | ||
| 23 | +| 位宽 | W 4bit,A 8bit | 混合位宽,权重访存降至 [FP16/BF16](../../quantization_basic/term_fp16_bf16.md) 的 1/4、激活降至 1/2 | | ||
| 24 | +| 数据类型 | 权重 INT4;激活 INT8 | 整数格式,权重以 INT8 容器打包存储(2个 INT4 装入 1字节) | | ||
| 25 | +| 参数获取方式 | 激活动态 / 权重静态 | 激活逐 token 在线求 min/max 并计算 scale;权重 scale 在量化阶段固化 | | ||
| 26 | +| 量化粒度 | 权重 per-channel;激活 per-token | 权重逐输出通道共享 scale;激活逐 token 共享 scale | | ||
| 27 | +| 对称性 | 对称 | 仅 scale,无 offset | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +量化与反量化采用标准线性映射。对称量化(仅 scale、无零点): | ||
| 32 | +$$q = \mathrm{round}(x / s), \qquad \hat{x} = q \cdot s, \qquad s = \frac{\max(|x|)}{2^{b-1}}$$ | ||
| 33 | + | ||
| 34 | +非对称量化(含零点 offset): | ||
| 35 | +$$q = \mathrm{round}(x / s) + z, \qquad \hat{x} = (q - z) \cdot s, \qquad s = \frac{\max(x) - \min(x)}{2^b - 1}$$ | ||
| 36 | + | ||
| 37 | +其中 $x$ 为待量化张量,$q$ 为量化后的整数值,$\hat{x}$ 为反量化还原值,$s$ 为 scale,$z$ 为零点 offset,$b$ 为位宽(INT8 取 $b=8$,INT4 取 $b=4$),且 $z = \mathrm{round}(-\min(x)/s)$。量化参数 $s$、$z$ 的获取方式(静态校准或在线动态)与作用粒度(per-channel、per-token、per-tensor 等)见「模式规格」表。 | ||
| 38 | + | ||
| 39 | +### 与其他模式的关系 | ||
| 40 | + | ||
| 41 | +- **与 [W8A8 动态量化](term_w8a8_dynamic.md)(激活同为动态,权重位宽不同)** | ||
| 42 | + - 本模式:优势是权重压到 4bit、访存降至 FP16 的 1/4,权重侧压缩更彻底;劣势是权重仅16档、有精度风险,且权重/激活位宽不一致时算子需混合处理。 | ||
| 43 | + - W8A8 动态:优势是权重 8bit 分辨率高、精度更稳,算子实现简单;劣势是权重访存仅减半。 | ||
| 44 | + | ||
| 45 | +- **与 [W4A4 动态量化](term_w4a4_dynamic.md)(权重同为 4bit,激活位宽不同)** | ||
| 46 | + - 本模式:优势是激活保持 8bit、远离最敏感的激活量化误差,精度风险远低于 W4A4;劣势是激活访存只减半,压缩幅度小于全 4bit。 | ||
| 47 | + - W4A4:优势是压缩比最大化、激活位宽同降;劣势是 4bit 激活精度风险极高,需要更多兜底手段。 | ||
| 48 | + | ||
| 49 | +- **与 [W8A16 静态量化](term_w8a16_static.md)(高精度基线)** | ||
| 50 | + - 本模式:优势是权重、激活均量化,压缩远比 W8A16 彻底(权重 4bit + 激活 8bit);劣势是激活引入量化误差,权重/激活反量化回浮点执行时计算加速有限,收益主要来自访存。 | ||
| 51 | + - W8A16:优势是激活 FP16 零误差、精度最稳;劣势是权重仅压到 8bit、且需反量化回浮点执行,无低精度 GEMM 加速。 | ||
| 52 | + | ||
| 53 | +- **与 [W4A8 MX 动态量化](term_w4a8_mx_dynamic.md)(同为 W4A8,数据类型与粒度不同)** | ||
| 54 | + - 本模式(INT4 per-channel):优势是整数格式、硬件算子生态成熟;劣势是均匀分档对权重离群值敏感,per-channel 粒度需逐输出通道记 scale。 | ||
| 55 | + - MXFP4:优势是块级共享指数保留浮点动态范围、对离群值更耐受;劣势是依赖硬件 MX 支持、块大小需对齐。 | ||
| 56 | + | ||
| 57 | +### 适用场景与限制 | ||
| 58 | + | ||
| 59 | +#### 1. 适用场景 | ||
| 60 | + | ||
| 61 | +- **权重内存/带宽主导的部署**:模型权重是主要显存占用,decode 时(逐个生成 token 的推理阶段)权重读取是吞吐瓶颈的场景。 | ||
| 62 | +- **精度与压缩折中**:需要比 W8A8 更强的权重压缩,又不敢把激活压到 4bit 的场景。 | ||
| 63 | + | ||
| 64 | +#### 2. 使用限制 | ||
| 65 | + | ||
| 66 | +- **权重精度风险**:4bit 权重仅16档,对离群值敏感,需配合离群值抑制或更细分组。 | ||
| 67 | +- **混合位宽算子依赖**:INT4×INT8 混合位宽 GEMM 需要目标硬件算子库支持,否则收益打折。 | ||
| 68 | + | ||
| 69 | +--- | ||
| 70 | + | ||
| 71 | +## 3. 关联流程 | ||
| 72 | + | ||
| 73 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择本模式并执行量化。 | ||
| 74 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 75 | + | ||
| 76 | +--- | ||
| 77 | + | ||
| 78 | +## 4. 关联词条 | ||
| 79 | + | ||
| 80 | +- [量化模式](../README.md):上位概念,本词条属于[线性层量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 81 | +- [W8A8 动态量化](term_w8a8_dynamic.md):对比模式,权重升至 8bit、精度更稳。 | ||
| 82 | +- [W4A4 动态量化](term_w4a4_dynamic.md):对比模式,激活压到 4bit、压缩更狠。 | ||
| 83 | +- [W8A16 静态量化](term_w8a16_static.md):对比模式,激活不量化的高精度基线。 | ||
| 84 | +- [W4A8 MX 动态量化](term_w4a8_mx_dynamic.md):同类模式,改用 MX 浮点格式承载同一位宽。 | ||
| 85 | +- 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》:配套术语,本模式的处理器实现。 | ||
| 86 | + | ||
| 87 | +--- | ||
| 88 | + | ||
| 89 | +## 5. 参考文档 | ||
| 90 | + | ||
| 91 | +1. 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 92 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,86 @@ | |||
| 1 | +# W4A8 MX 动态量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([线性层量化](../README.md)) | ||
| 4 | +> **英文名称**:W4A8 MX Dynamic Quantization | ||
| 5 | +> **应用领域**:大语言模型量化压缩、推理加速 | ||
| 6 | +> **承载 IR 类**:`W4A8MXDynamicPerBlockFakeQuantLinear`([`msmodelslim/ir/w4a8_mx_dynamic.py`](../../../../../msmodelslim/ir/w4a8_mx_dynamic.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +W4A8 MX 动态量化 = 把 W4A8 位宽搭配换成 MX 格式:权重用 [MXFP4](../../quantization_basic/term_mxfp.md)(1符号 + 2指数 + 1尾数)拿 4bit 压缩、激活用 [MXFP8](../../quantization_basic/term_mxfp.md)(E4M3)保8bit精度,两侧都按 32元素块共享 E8M0 指数。相比 [INT4](../../quantization_basic/term_int4.md)/[INT8](../../quantization_basic/term_int8.md) 组合,MX 浮点格式对离群值更耐受;相比全 4bit 方案,激活保持 8bit 显著降低精度风险,是「权重极致压缩 + 激活保精度」的 MX 版折中。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 权重 W、激活 A | 线性层矩阵乘两侧的张量 | | ||
| 23 | +| 位宽 | W 4bit,A 8bit | 权重访存降至 FP16 的 1/4,激活降至 1/2 | | ||
| 24 | +| 数据类型 | 权重 MXFP4;激活 MXFP8 | MXFP4 emax=2、max 6;MXFP8 emax=8、max 448;均为每32元素共享 E8M0 指数 | | ||
| 25 | +| 参数获取方式 | 激活动态 / 权重静态 | 激活块级指数前向在线统计;权重块级指数量化阶段固化 | | ||
| 26 | +| 量化粒度 | 权重/激活均 per-block(32元素) | 最后维按 32元素分块,每块共享一个指数 | | ||
| 27 | +| 对称性 | 对称 | 仅指数/scale,无 offset | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +MX 格式按块共享 E8M0 指数,块内每个元素用块级指数缩放后量化为主尾数: | ||
| 32 | +$$e = \lfloor \log_2(\max_{i \in \mathrm{block}}|x_i|) \rfloor, \qquad q_i = \mathrm{round}_{MX}\left(\frac{x_i}{2^e}\right), \qquad \hat{x}_i = q_i \cdot 2^e$$ | ||
| 33 | + | ||
| 34 | +其中块大小32元素,$e$ 为块内共享的 E8M0 指数,$q_i$ 为块内第 $i$ 个元素的量化尾数(MXFP8 为 FP8 尾数、MXFP4 为 FP4 尾数),$\hat{x}_i$ 为反量化还原值。每块共享一个 $e$;量化参数在线计算(激活)或量化阶段固化(权重),见「模式规格」表。 | ||
| 35 | + | ||
| 36 | +### 与其他模式的关系 | ||
| 37 | + | ||
| 38 | +- **与 [W4A8 动态量化](term_w4a8_dynamic.md)(同为 W4A8,数据类型与粒度不同)** | ||
| 39 | + - 本模式(MX 格式):优势是 MXFP4 权重块级共享指数对离群值更耐受、MXFP8 激活浮点动态范围更宽;劣势是依赖硬件 MX 支持、最后维需 32 对齐。 | ||
| 40 | + - INT4/INT8:优势是整数格式、硬件算子生态成熟;劣势是均匀分档对离群值敏感。 | ||
| 41 | + | ||
| 42 | +- **与 [W8A8 MX 动态量化](term_w8a8_mx_dynamic.md)(权重位宽不同)** | ||
| 43 | + - 本模式:优势是权重压缩至 4bit、访存降至 FP16 的 1/4;劣势是权重仅少量可表示值、精度风险高于 8bit。 | ||
| 44 | + - W8A8 MX:优势是权重 8bit 精度更稳;劣势是权重访存仅减半。 | ||
| 45 | + | ||
| 46 | +- **与 [W4A4 MX 动态量化](term_w4a4_mx_dynamic.md)(激活位宽不同)** | ||
| 47 | + - 本模式:优势是激活保持 8bit、远离最敏感的激活量化误差,是压缩与精度的折中;劣势是激活访存收益小于全 4bit。 | ||
| 48 | + - W4A4 MX:优势是双 4bit 压缩最大化;劣势是激活 4bit 精度风险高。 | ||
| 49 | + | ||
| 50 | +### 适用场景与限制 | ||
| 51 | + | ||
| 52 | +#### 1. 适用场景 | ||
| 53 | + | ||
| 54 | +- **权重访存受限 + 激活分布动态范围大**:需要权重 4bit 压缩、又担心 INT8 激活精度不足的场景。 | ||
| 55 | +- **离群值敏感的低比特部署**:MX 浮点格式比整数格式更耐受离群值。 | ||
| 56 | +- **昇腾 MXFP 推理路径**:硬件/算子库原生支持 MX 格式的部署。 | ||
| 57 | + | ||
| 58 | +#### 2. 使用限制 | ||
| 59 | + | ||
| 60 | +- **依赖硬件 MX 支持**:MXFP4/MXFP8 计算需目标硬件算子库支持。 | ||
| 61 | +- **块粒度对齐**:张量最后维需能被 32 整除,否则需 padding。 | ||
| 62 | +- **4bit 权重精度风险**:MXFP4 仅16个可表示值,极端权重分布下仍需验证精度。 | ||
| 63 | + | ||
| 64 | +--- | ||
| 65 | + | ||
| 66 | +## 3. 关联流程 | ||
| 67 | + | ||
| 68 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择本模式并执行量化。 | ||
| 69 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 70 | + | ||
| 71 | +--- | ||
| 72 | + | ||
| 73 | +## 4. 关联词条 | ||
| 74 | + | ||
| 75 | +- [量化模式](../README.md):上位概念,本词条属于[线性层量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 76 | +- [W4A8 动态量化](term_w4a8_dynamic.md):对比模式,INT4 权重 + INT8 激活的整数方案。 | ||
| 77 | +- [W8A8 MX 动态量化](term_w8a8_mx_dynamic.md):同类模式,权重亦为 MXFP8。 | ||
| 78 | +- [W4A4 MX 动态量化](term_w4a4_mx_dynamic.md):同类模式,激活亦降为 MXFP4。 | ||
| 79 | +- 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》:配套术语,本模式的处理器实现。 | ||
| 80 | + | ||
| 81 | +--- | ||
| 82 | + | ||
| 83 | +## 5. 参考文档 | ||
| 84 | + | ||
| 85 | +1. 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 86 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,89 @@ | |||
| 1 | +# W8A16 静态量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([线性层量化](../README.md)) | ||
| 4 | +> **英文名称**:W8A16 Static Quantization | ||
| 5 | +> **应用领域**:大语言模型量化压缩、推理加速 | ||
| 6 | +> **承载 IR 类**:`W8A16StaticPerChannelFakeQuantLinear` / `W8A16StaticPerGroupFakeQuantLinear`([`msmodelslim/ir/w8a16_static.py`](../../../../../msmodelslim/ir/w8a16_static.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +W8A16 静态量化 = 只把线性层的权重压到 [INT8](../../quantization_basic/term_int8.md),激活保持 [FP16/BF16](../../quantization_basic/term_fp16_bf16.md) 不量化。它面向"激活精度敏感、不敢量化"的场景:权重是每 token 都要整体读取的静态数据,压到 [INT8](../../quantization_basic/term_int8.md) 使权重访存减半;激活不量化则完全规避激活量化误差,是精度最稳的线性层方案之一。代价是激活不量化意味着矩阵乘需把 [INT8](../../quantization_basic/term_int8.md) 权重反量化回浮点执行,没有[整数 GEMM](../term_gemm.md) 加速。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 仅权重 W | 激活保持 FP16 原样参与计算,不引入任何量化误差 | | ||
| 23 | +| 位宽 | W 8bit,A 16bit | 权重 1字节/元素、访存减半;激活 2字节/元素 | | ||
| 24 | +| 数据类型 | 权重 INT8;激活 FP16 | 混合位宽,压缩收益全部来自权重侧 | | ||
| 25 | +| 参数获取方式 | 静态 | 权重 scale/offset 量化阶段固化,推理零在线开销;激活无参数 | | ||
| 26 | +| 量化粒度 | 权重 per-channel/per-group | 逐输出通道或按固定分组(如 128元素)共享 scale,适配通道/分组间数值差异 | | ||
| 27 | +| 对称性 | 权重对称或非对称 | 依据权重分布选择,非对称加 offset | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +量化与反量化采用标准线性映射。对称量化(仅 scale、无零点): | ||
| 32 | +$$q = \mathrm{round}(x / s), \qquad \hat{x} = q \cdot s, \qquad s = \frac{\max(|x|)}{2^{b-1}}$$ | ||
| 33 | + | ||
| 34 | +非对称量化(含零点 offset): | ||
| 35 | +$$q = \mathrm{round}(x / s) + z, \qquad \hat{x} = (q - z) \cdot s, \qquad s = \frac{\max(x) - \min(x)}{2^b - 1}$$ | ||
| 36 | + | ||
| 37 | +其中 $x$ 为待量化张量,$q$ 为量化后的整数值,$\hat{x}$ 为反量化还原值,$s$ 为 scale,$z$ 为零点 offset,$b$ 为位宽(INT8 取 $b=8$,INT4 取 $b=4$),且 $z = \mathrm{round}(-\min(x)/s)$。量化参数 $s$、$z$ 的获取方式(静态校准或在线动态)与作用粒度(per-channel、per-token、per-tensor 等)见「模式规格」表。本模式仅权重走上述公式($b=8$),激活保持 FP16 不量化。 | ||
| 38 | + | ||
| 39 | +### 与其他模式的关系 | ||
| 40 | + | ||
| 41 | +- **与 [W8A8 静态量化](term_w8a8_static.md)(激活是否量化不同)** | ||
| 42 | + - 本模式:优势是激活保持 FP16、零量化误差,是精度最稳的基线之一,适合激活存在离群值或对量化敏感的层;劣势是激活不量化,矩阵乘需把 [INT8](../../quantization_basic/term_int8.md) 权重反量化回浮点执行,无整数 GEMM 带来的计算加速,性能较差,整体压缩低于 W8A8。 | ||
| 43 | + - W8A8:优势是激活亦量化为 INT8、可走整数 GEMM,计算吞吐更高、压缩更彻底;劣势是激活引入量化误差。 | ||
| 44 | + | ||
| 45 | +- **与 [W4A8 动态量化](term_w4a8_dynamic.md)(位宽搭配不同)** | ||
| 46 | + - 本模式:优势是激活完全无量化误差,且无在线归约开销;劣势是权重仅压到 8bit、访存收益有限,无计算加速。 | ||
| 47 | + - W4A8:优势是权重压到 4bit、访存降至 FP16 的 1/4;劣势是权重仅16档有精度风险,激活动态引入归约开销。 | ||
| 48 | + | ||
| 49 | +- **与 [W16A16S 量化](term_w16a16s.md)(同为高精度基线,收益来源不同)** | ||
| 50 | + - 本模式:收益来自权重位宽压缩(访存减半)。 | ||
| 51 | + - W16A16S:权重与激活均不量化,收益来自承载的稀疏权重(跳过零值元素),是去除位宽量化后的稀疏对照基线。 | ||
| 52 | + | ||
| 53 | +### 适用场景与限制 | ||
| 54 | + | ||
| 55 | +#### 1. 适用场景 | ||
| 56 | + | ||
| 57 | +- **激活精度敏感层**:激活分布离群值多、量化后精度劣化明显的层,可单独回退为 W8A16。 | ||
| 58 | +- **权重访存主导的 decode 场景(逐个生成 token 的推理阶段)**:权重压缩减半访存,同时保住激活精度。 | ||
| 59 | +- **精度优先的部署**:需要确定性精度的场景,W8A16 是介于不量化与 W8A8 之间的稳妥选择。 | ||
| 60 | + | ||
| 61 | +#### 2. 使用限制 | ||
| 62 | + | ||
| 63 | +- **无整数 GEMM 加速**:激活保持 FP16,矩阵乘仍为浮点,计算吞吐提升有限,只省权重访存。 | ||
| 64 | +- **压缩比低于 W8A8**:激活未压缩,整体位宽收益低于权重/激活同时量化的方案。 | ||
| 65 | + | ||
| 66 | +--- | ||
| 67 | + | ||
| 68 | +## 3. 关联流程 | ||
| 69 | + | ||
| 70 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择本模式并执行量化。 | ||
| 71 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 72 | + | ||
| 73 | +--- | ||
| 74 | + | ||
| 75 | +## 4. 关联词条 | ||
| 76 | + | ||
| 77 | +- [量化模式](../README.md):上位概念,本词条属于[线性层量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 78 | +- [W8A8 静态量化](term_w8a8_static.md):对比模式,激活亦量化为 INT8、换取整数 GEMM 加速。 | ||
| 79 | +- [W4A8 动态量化](term_w4a8_dynamic.md):对比模式,权重压到 4bit 的混合位宽方案。 | ||
| 80 | +- [W16A16S 量化](term_w16a16s.md):同类模式,完全不量化的稀疏基线。 | ||
| 81 | +- 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》:配套术语,本模式的处理器实现。 | ||
| 82 | +- 《[MinMax:最小最大值量化算法说明](../../quantization_algorithms/minmax/minmax.md)》:配套术语,静态量化常用的量化参数统计方法。 | ||
| 83 | + | ||
| 84 | +--- | ||
| 85 | + | ||
| 86 | +## 5. 参考文档 | ||
| 87 | + | ||
| 88 | +1. 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 89 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,88 @@ | |||
| 1 | +# W8A8 动态量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([线性层量化](../README.md)) | ||
| 4 | +> **英文名称**:W8A8 Dynamic Quantization | ||
| 5 | +> **应用领域**:大语言模型量化压缩、推理加速 | ||
| 6 | +> **承载 IR 类**:`W8A8DynamicPerChannelFakeQuantLinear` / `W8A8DynamicPerGroupFakeQuantLinear`([`msmodelslim/ir/w8a8_dynamic.py`](../../../../../msmodelslim/ir/w8a8_dynamic.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +W8A8 动态量化 = 对线性层的权重与激活都做 [INT8](../../quantization_basic/term_int8.md) 量化,其中**激活的量化参数在推理时逐 token 在线计算**。它与 [W8A8 静态量化](term_w8a8_static.md) 位宽完全相同,唯一区别是参数获取方式:「静态」离线校准固化、「动态」在线统计。动态方案免校准、逐 token 更贴合自身数值范围,代价是每次前向多一次 min/max 归约。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 权重 W、激活 A | 线性层矩阵乘两侧的张量 | | ||
| 23 | +| 位宽 | W 8bit,A 8bit | 同为 8bit,访存减半 | | ||
| 24 | +| 数据类型 | INT8 | 整数格式,可走 INT8 整数 GEMM | | ||
| 25 | +| 参数获取方式 | 激活动态 / 权重静态 | 激活对每个 token 在线求 min/max 并计算 scale,免校准、随输入自适应;权重 scale 在量化阶段固化 | | ||
| 26 | +| 量化粒度 | 权重 per-channel/per-group;激活 per-token | 权重逐输出通道或按固定分组(如 128元素)共享 scale;激活逐 token(一行)共享 scale | | ||
| 27 | +| 对称性 | 激活对称;权重对称(per-group 支持非对称) | 激活对称仅 scale;权重 per-group 可加 offset | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +量化与反量化采用标准线性映射。对称量化(仅 scale、无零点): | ||
| 32 | +$$q = \mathrm{round}(x / s), \qquad \hat{x} = q \cdot s, \qquad s = \frac{\max(|x|)}{2^{b-1}}$$ | ||
| 33 | + | ||
| 34 | +非对称量化(含零点 offset): | ||
| 35 | +$$q = \mathrm{round}(x / s) + z, \qquad \hat{x} = (q - z) \cdot s, \qquad s = \frac{\max(x) - \min(x)}{2^b - 1}$$ | ||
| 36 | + | ||
| 37 | +其中 $x$ 为待量化张量,$q$ 为量化后的整数值,$\hat{x}$ 为反量化还原值,$s$ 为 scale,$z$ 为零点 offset,$b$ 为位宽(INT8 取 $b=8$,INT4 取 $b=4$),且 $z = \mathrm{round}(-\min(x)/s)$。量化参数 $s$、$z$ 的获取方式(静态校准或在线动态)与作用粒度(per-channel、per-token、per-tensor 等)见「模式规格」表。 | ||
| 38 | + | ||
| 39 | +### 与其他模式的关系 | ||
| 40 | + | ||
| 41 | +- **与 [W8A8 静态量化](term_w8a8_static.md)(位宽相同,参数获取方式不同)** | ||
| 42 | + - 本模式(动态):优势是逐 token 在线算 scale、免校准,激活量化贴合每个 token 的数值范围,精度高于静态 per-tensor,对输入分布漂移鲁棒;劣势是每次前向多一次 min/max 归约,带来少量延迟开销。 | ||
| 43 | + - 静态:优势是激活 scale 离线固化、推理零在线开销;劣势是 per-tensor 粗粒度依赖校准数据,精度上限较低。 | ||
| 44 | + | ||
| 45 | +- **与 [W8A8 PD-Mix 量化](term_w8a8_pdmix.md)(同为 W8A8,激活策略随阶段不同)** | ||
| 46 | + - 本模式:全阶段 per-token 动态,激活精度统一;劣势是 decode 阶段每步只有一个 token——激活即整张量,per-token 与 per-tensor 粒度等价,per-token 归约既无统计意义、开销又属多余。 | ||
| 47 | + - PD-Mix:prefill 动态保精度、decode 退回静态零开销,两阶段各自最优;劣势是依赖推理框架的阶段感知与切换,当前仅限 MindIE 部署。 | ||
| 48 | + | ||
| 49 | +- **与 [W4A4 动态量化](term_w4a4_dynamic.md)(同为动态家族,位宽不同)** | ||
| 50 | + - 本模式:优势是 8bit 分辨率高、精度更稳,是通用选择;劣势是权重访存仅减半(FP16 的 1/2)。 | ||
| 51 | + - W4A4:优势是权重访存降至 FP16 的 1/4、压缩更彻底;劣势是仅16档、精度风险高,需更细粒度与离群抑制兜底。 | ||
| 52 | + | ||
| 53 | +### 适用场景与限制 | ||
| 54 | + | ||
| 55 | +#### 1. 适用场景 | ||
| 56 | + | ||
| 57 | +- **校准数据不足或分布不确定**:免校准,适合无代表性校准集、或部署时输入分布变化大的场景。 | ||
| 58 | +- **精度要求高于静态**:需要比静态 W8A8 更好的激活精度,且可接受少量在线归约开销。 | ||
| 59 | + | ||
| 60 | +#### 2. 使用限制 | ||
| 61 | + | ||
| 62 | +- **在线归约开销**:per-token min/max 归约增加少量延迟,对每 token 计算量极小的层占比更明显。 | ||
| 63 | +- **硬件算子依赖**:per-token 动态量化需推理框架/算子库支持逐 token 参数计算,否则只能软件模拟、收益打折。 | ||
| 64 | + | ||
| 65 | +--- | ||
| 66 | + | ||
| 67 | +## 3. 关联流程 | ||
| 68 | + | ||
| 69 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择本模式并执行量化。 | ||
| 70 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 71 | + | ||
| 72 | +--- | ||
| 73 | + | ||
| 74 | +## 4. 关联词条 | ||
| 75 | + | ||
| 76 | +- [量化模式](../README.md):上位概念,本词条属于[线性层量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 77 | +- [W8A8 静态量化](term_w8a8_static.md):对比模式,激活参数离线固化。 | ||
| 78 | +- [W8A8 PD-Mix 量化](term_w8a8_pdmix.md):同类模式,激活策略随 Prefill/Decode 阶段切换。 | ||
| 79 | +- [W4A4 动态量化](term_w4a4_dynamic.md):同类模式,更低比特的权重+激活量化。 | ||
| 80 | +- [FA PerToken 量化](../fa_quantization/term_fa_pertoken.md):同类模式,把 per-token 动态量化应用于注意力 Q/K/V 激活。 | ||
| 81 | +- 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》:配套术语,本模式的处理器实现。 | ||
| 82 | + | ||
| 83 | +--- | ||
| 84 | + | ||
| 85 | +## 5. 参考文档 | ||
| 86 | + | ||
| 87 | +1. 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 88 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,87 @@ | |||
| 1 | +# W8A8 FP8 动态量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([线性层量化](../README.md)) | ||
| 4 | +> **英文名称**:W8A8 FP8 Dynamic Quantization | ||
| 5 | +> **应用领域**:大语言模型量化压缩、推理加速 | ||
| 6 | +> **承载 IR 类**:`WFP8AFP8DynamicPerChannelFakeQuantLinear`([`msmodelslim/ir/w8a8_fp_dynamic.py`](../../../../../msmodelslim/ir/w8a8_fp_dynamic.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +W8A8 FP8 动态量化 = **[FP8(E4M3)](../../quantization_basic/term_fp8.md) 版本**的 W8A8 动态量化:权重与激活都以 [FP8(E4M3)](../../quantization_basic/term_fp8.md) 存储,激活量化参数逐 token 在线计算。与 [INT8](../../quantization_basic/term_int8.md) 相比,E4M3 的 4bit 指数保留了浮点动态范围,对「数值跨度大、离群值多」的激活更耐受,无需先做离群值抑制;位宽同为 8bit,访存收益与 [INT8](../../quantization_basic/term_int8.md) 一致。代价是必须依赖支持 [FP8](../../quantization_basic/term_fp8.md) [GEMM](../term_gemm.md) 的硬件算子。模式名按家族 `W{位宽}A{位宽} + 数据类型` 记法,`W8A8 FP8` 表示 W 与 A 均为 8bit、数据类型为 [FP8(E4M3)](../../quantization_basic/term_fp8.md)。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 权重 W、激活 A | 线性层矩阵乘两侧的张量 | | ||
| 23 | +| 位宽 | W 8bit,A 8bit | 同为 8bit,访存减半 | | ||
| 24 | +| 数据类型 | FP8(E4M3) | 浮点格式,1bit 符号 + 4bit 指数 + 3bit 尾数,max 值 448 | | ||
| 25 | +| 参数获取方式 | 激活动态 / 权重静态 | 激活逐 token 在线求 scale;权重 scale 在量化阶段固化 | | ||
| 26 | +| 量化粒度 | 权重 per-channel;激活 per-token | 权重逐输出通道共享 scale;激活逐 token 共享 scale | | ||
| 27 | +| 对称性 | 对称 | 仅 scale,无 offset | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +FP8(E4M3)量化的 scale 按 FP8 可表示最大值确定: | ||
| 32 | +$$q = \mathrm{round}_{FP8}(x / s), \qquad \hat{x} = q \cdot s, \qquad s = \frac{\max(|x|)}{448}$$ | ||
| 33 | + | ||
| 34 | +其中 $x$ 为待量化张量,$q$ 为量化后的 FP8 值($\mathrm{round}_{FP8}$ 表示舍入到 E4M3 可表示的最近值,最大有限值 448),$\hat{x}$ 为反量化还原值,$s$ 为 scale。量化参数的获取方式与作用粒度见「模式规格」表。 | ||
| 35 | + | ||
| 36 | +### 与其他模式的关系 | ||
| 37 | + | ||
| 38 | +- **与 [W8A8 动态量化](term_w8a8_dynamic.md)(同为 8bit 动态家族,数据类型不同)** | ||
| 39 | + - 本模式(FP8 E4M3):优势是浮点格式、4bit 指数保留动态范围,对宽动态范围与离群值比 INT8 均匀分档更耐受;劣势是 FP8 GEMM 的硬件支持面窄于 INT8,算子生态不成熟。 | ||
| 40 | + - INT8:优势是整数 GEMM 生态成熟、硬件支持广泛;劣势是均匀分档对离群值敏感,宽动态范围激活常需先做 [SmoothQuant](../../quantization_algorithms/smooth_quant/smooth_quant.md) 等抑制。 | ||
| 41 | + | ||
| 42 | +- **与 [W8A8 MX 动态量化](term_w8a8_mx_dynamic.md)(同为 FP8 家族,格式与粒度不同)** | ||
| 43 | + - 本模式:优势是 per-channel/per-token 粒度、逐元素 E4M3,粒度更细、无需块对齐;劣势是每个通道/token 都需额外记录 scale。 | ||
| 44 | + - MXFP8:优势是块级共享 E8M0 指数,scale 存储开销低、数值表达更紧凑;劣势是需硬件 MX 支持、块大小(32元素)需对齐。 | ||
| 45 | + | ||
| 46 | +- **与 [W8A16 静态量化](term_w8a16_static.md)(高精度基线)** | ||
| 47 | + - 本模式:优势是激活亦量化、可走低精度 GEMM,压缩彻底;劣势是激活引入 FP8 量化误差。 | ||
| 48 | + - W8A16:优势是激活 FP16 零误差;劣势是权重反量化回浮点执行、无低精度 GEMM 加速。 | ||
| 49 | + | ||
| 50 | +### 适用场景与限制 | ||
| 51 | + | ||
| 52 | +#### 1. 适用场景 | ||
| 53 | + | ||
| 54 | +- **支持 FP8 的硬件部署**:目标硬件原生支持 FP8 GEMM 的场景。 | ||
| 55 | +- **宽动态范围激活**:激活数值跨度大、离群值多的模型,FP8 浮点格式比 INT8 均匀分档更耐受。 | ||
| 56 | + | ||
| 57 | +#### 2. 使用限制 | ||
| 58 | + | ||
| 59 | +- **硬件算子依赖**:FP8 GEMM 需目标硬件算子库支持,否则只能软件模拟、收益打折。 | ||
| 60 | +- **溢出边界**:E4M3 表示范围有限(max 448),超出范围的值需依赖 scale 缩放兜底,极端分布仍需验证。 | ||
| 61 | +- **在线归约开销**:per-token 动态量化有少量 min/max 归约开销。 | ||
| 62 | + | ||
| 63 | +--- | ||
| 64 | + | ||
| 65 | +## 3. 关联流程 | ||
| 66 | + | ||
| 67 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择本模式并执行量化。 | ||
| 68 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 69 | + | ||
| 70 | +--- | ||
| 71 | + | ||
| 72 | +## 4. 关联词条 | ||
| 73 | + | ||
| 74 | +- [量化模式](../README.md):上位概念,本词条属于[线性层量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 75 | +- [W8A8 动态量化](term_w8a8_dynamic.md):对比模式,INT8 数据类型的同构方案。 | ||
| 76 | +- [W8A8 MX 动态量化](term_w8a8_mx_dynamic.md):同类模式,块级共享指数的 MXFP8 方案。 | ||
| 77 | +- [W8A16 静态量化](term_w8a16_static.md):对比模式,激活保持 16bit 的高精度基线。 | ||
| 78 | +- [FA PerHead 量化](../fa_quantization/term_fa_perhead.md):配套模式,同样使用 FP8 数据类型的注意力激活量化。 | ||
| 79 | +- 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》:配套术语,本模式的处理器实现。 | ||
| 80 | + | ||
| 81 | +--- | ||
| 82 | + | ||
| 83 | +## 5. 参考文档 | ||
| 84 | + | ||
| 85 | +1. Kuzmin A et al. FP8 Formats for Deep Learning. arXiv:2209.05433. https://arxiv.org/abs/2209.05433 | ||
| 86 | +2. 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 87 | +3. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,86 @@ | |||
| 1 | +# W8A8 MX 动态量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([线性层量化](../README.md)) | ||
| 4 | +> **英文名称**:W8A8 MX Dynamic Quantization | ||
| 5 | +> **应用领域**:大语言模型量化压缩、推理加速 | ||
| 6 | +> **承载 IR 类**:`W8A8MXDynamicPerBlockFakeQuantLinear`([`msmodelslim/ir/w8a8_mx_dynamic.py`](../../../../../msmodelslim/ir/w8a8_mx_dynamic.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +W8A8 MX 动态量化 = **[MXFP8](../../quantization_basic/term_mxfp.md) 版本**的 W8A8:权重与激活都按 32元素分块,每块共享一个 8bit 指数(E8M0),元素为 8bit 浮点(E4M3)。块级共享指数把缩放参数开销从「每元素一份」摊薄到「每32元素一份」,同时保留浮点动态范围——相比 [INT8](../../quantization_basic/term_int8.md) 均匀分档对离群值更耐受,相比普通 [FP8(E4M3)](../../quantization_basic/term_fp8.md) 每元素 scale 参数开销更低。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 权重 W、激活 A | 线性层矩阵乘两侧的张量 | | ||
| 23 | +| 位宽 | W 8bit,A 8bit | 元素位宽 8bit,访存减半 | | ||
| 24 | +| 数据类型 | MXFP8 | 每32元素共享一个 E8M0 8bit 指数,元素为 E4M3(emax=8,max 448) | | ||
| 25 | +| 参数获取方式 | 激活动态 / 权重静态 | 激活块级指数前向在线统计;权重块级指数量化阶段固化 | | ||
| 26 | +| 量化粒度 | 权重/激活均 per-block(32元素) | 最后维按 32元素分块,每块共享一个指数 | | ||
| 27 | +| 对称性 | 对称 | 仅指数/scale,无 offset | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +MX 格式按块共享 E8M0 指数,块内每个元素用块级指数缩放后量化为主尾数: | ||
| 32 | +$$e = \lfloor \log_2(\max_{i \in \mathrm{block}}|x_i|) \rfloor, \qquad q_i = \mathrm{round}_{MX}\left(\frac{x_i}{2^e}\right), \qquad \hat{x}_i = q_i \cdot 2^e$$ | ||
| 33 | + | ||
| 34 | +其中块大小32元素,$e$ 为块内共享的 E8M0 指数,$q_i$ 为块内第 $i$ 个元素的量化尾数(MXFP8 为 FP8 尾数、MXFP4 为 FP4 尾数),$\hat{x}_i$ 为反量化还原值。每块共享一个 $e$;量化参数在线计算(激活)或量化阶段固化(权重),见「模式规格」表。 | ||
| 35 | + | ||
| 36 | +### 与其他模式的关系 | ||
| 37 | + | ||
| 38 | +- **与 [W8A8 动态量化](term_w8a8_dynamic.md)(同为 8bit 动态家族,格式与粒度不同)** | ||
| 39 | + - 本模式(MXFP8):优势是块级共享指数保留浮点动态范围、对离群值比 INT8 更耐受,缩放参数开销约为每元素独立 scale 的 1/32;劣势是依赖硬件 MX 支持、最后维需 32 对齐,块粒度(32元素)比 per-token 粗。 | ||
| 40 | + - INT8:优势是整数 GEMM 生态成熟、per-token 粒度更细;劣势是均匀分档对离群值敏感、每 token 都需记 scale。 | ||
| 41 | + | ||
| 42 | +- **与 [W8A8 FP8 动态量化](term_w8a8_fp8_dynamic.md)(同为 FP8 家族,格式不同)** | ||
| 43 | + - 本模式(MXFP8 块级共享指数):优势是 scale 参数开销低、数值表达紧凑;劣势是块粒度(32元素)较粗、依赖 MX 硬件。 | ||
| 44 | + - 普通 FP8:优势是 per-channel/per-token 细粒度、无需 MX 特殊硬件;劣势是每元素/每通道独立 scale,参数开销大。 | ||
| 45 | + | ||
| 46 | +- **与 [W4A4 MX 动态量化](term_w4a4_mx_dynamic.md)(位宽不同)** | ||
| 47 | + - 本模式:优势是 8bit 精度更稳;劣势是权重访存仅减半。 | ||
| 48 | + - W4A4 MX:优势是权重与激活均压缩至 FP16 的 1/4、压缩比最大化;劣势是 4bit 激活精度风险高。 | ||
| 49 | + | ||
| 50 | +### 适用场景与限制 | ||
| 51 | + | ||
| 52 | +#### 1. 适用场景 | ||
| 53 | + | ||
| 54 | +- **存在离群值的低比特部署**:MXFP8 的浮点动态范围比 INT8 更耐受离群值。 | ||
| 55 | +- **需要低参数开销的 8bit**:块级共享指数在参数开销上优于每元素 scale 方案。 | ||
| 56 | +- **昇腾 MXFP 推理路径**:硬件/算子库原生支持 MX 格式的部署。 | ||
| 57 | + | ||
| 58 | +#### 2. 使用限制 | ||
| 59 | + | ||
| 60 | +- **依赖硬件 MX 支持**:MXFP8 计算需目标硬件算子库支持,否则无法兑现收益。 | ||
| 61 | +- **块粒度对齐**:张量最后维需能被 32 整除,否则需 padding。 | ||
| 62 | +- **动态归约开销**:激活 per-block 在线统计增加少量延迟。 | ||
| 63 | + | ||
| 64 | +--- | ||
| 65 | + | ||
| 66 | +## 3. 关联流程 | ||
| 67 | + | ||
| 68 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择本模式并执行量化。 | ||
| 69 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 70 | + | ||
| 71 | +--- | ||
| 72 | + | ||
| 73 | +## 4. 关联词条 | ||
| 74 | + | ||
| 75 | +- [量化模式](../README.md):上位概念,本词条属于[线性层量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 76 | +- [W8A8 动态量化](term_w8a8_dynamic.md):对比模式,INT8 整数方案。 | ||
| 77 | +- [W8A8 FP8 动态量化](term_w8a8_fp8_dynamic.md):对比模式,普通 FP8 每元素缩放方案。 | ||
| 78 | +- [W4A4 MX 动态量化](term_w4a4_mx_dynamic.md):同类模式,MXFP4 更低比特方案。 | ||
| 79 | +- 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》:配套术语,本模式的处理器实现。 | ||
| 80 | + | ||
| 81 | +--- | ||
| 82 | + | ||
| 83 | +## 5. 参考文档 | ||
| 84 | + | ||
| 85 | +1. 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 86 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,89 @@ | |||
| 1 | +# W8A8 PD-Mix 量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([线性层量化](../README.md)) | ||
| 4 | +> **英文名称**:W8A8 PD-Mix Quantization | ||
| 5 | +> **应用领域**:大语言模型量化压缩、推理加速 | ||
| 6 | +> **承载 IR 类**:`W8A8PDMixFakeQuantLinear`([`msmodelslim/ir/w8a8_pdmix.py`](../../../../../msmodelslim/ir/w8a8_pdmix.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +W8A8 PD-Mix 量化 = 以 **Prefill / Decode 推理阶段**为界混合两种激活量化策略的 W8A8 方案:Prefill 阶段激活逐 token 动态量化(保精度),Decode 阶段激活整体静态量化(零在线开销)。它是 [W8A8 动态](term_w8a8_dynamic.md) 与 [W8A8 静态](term_w8a8_static.md) 的分阶段融合,「PD-Mix」即 Prefill-Decode Mix。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 权重 W、激活 A | 线性层矩阵乘两侧的张量 | | ||
| 23 | +| 位宽 | W 8bit,A 8bit | 同为 8bit,访存减半 | | ||
| 24 | +| 数据类型 | INT8 | 整数格式,可走 INT8 整数 GEMM | | ||
| 25 | +| 参数获取方式 | 混合(激活动态/静态随阶段切换;权重静态) | Prefill 阶段激活逐 token 在线求 min/max 算 scale;Decode 阶段激活整体静态(复用预置参数,此时单 token 激活即整张量,粒度与 per-token 等价);权重 scale 固化 | | ||
| 26 | +| 量化粒度 | 权重 per-channel;激活 Prefill per-token / Decode per-tensor | 权重逐输出通道共享 scale;激活按阶段取 per-token 或整体粒度 | | ||
| 27 | +| 对称性 | 权重对称;激活非对称 | 激活非对称加 offset 适配各 token 分布 | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +量化与反量化采用标准线性映射。对称量化(仅 scale、无零点): | ||
| 32 | +$$q = \mathrm{round}(x / s), \qquad \hat{x} = q \cdot s, \qquad s = \frac{\max(|x|)}{2^{b-1}}$$ | ||
| 33 | + | ||
| 34 | +非对称量化(含零点 offset): | ||
| 35 | +$$q = \mathrm{round}(x / s) + z, \qquad \hat{x} = (q - z) \cdot s, \qquad s = \frac{\max(x) - \min(x)}{2^b - 1}$$ | ||
| 36 | + | ||
| 37 | +其中 $x$ 为待量化张量,$q$ 为量化后的整数值,$\hat{x}$ 为反量化还原值,$s$ 为 scale,$z$ 为零点 offset,$b$ 为位宽(INT8 取 $b=8$,INT4 取 $b=4$),且 $z = \mathrm{round}(-\min(x)/s)$。量化参数 $s$、$z$ 的获取方式(静态校准或在线动态)与作用粒度(per-channel、per-token、per-tensor 等)见「模式规格」表。 | ||
| 38 | + | ||
| 39 | +### 与其他模式的关系 | ||
| 40 | + | ||
| 41 | +- **与 [W8A8 动态量化](term_w8a8_dynamic.md)(同为 W8A8,激活策略不同)** | ||
| 42 | + - 本模式:优势是 decode 阶段退回静态、去掉每步 per-token 归约的无谓开销,而 prefill 阶段仍保住动态精度;劣势是需推理框架识别阶段并切换量化策略,复杂度与部署约束更高。 | ||
| 43 | + - W8A8 动态:优势是全程 per-token 动态、激活精度统一,实现简单;劣势是 decode 阶段单 token 归约既无统计意义又增加延迟。 | ||
| 44 | + | ||
| 45 | +- **与 [W8A8 静态量化](term_w8a8_static.md)(同为 W8A8,激活策略不同)** | ||
| 46 | + - 本模式:优势是 prefill 阶段逐 token 动态、激活精度高于静态 per-tensor;劣势是复杂度更高、有阶段依赖。 | ||
| 47 | + - 静态:优势是激活 scale 全程固化、零在线归约、实现与部署最简单;劣势是 prefill 阶段 per-tensor 粗粒度、精度上限低。 | ||
| 48 | + | ||
| 49 | +- **与 [W4A8 动态量化](term_w4a8_dynamic.md)(位宽不同)** | ||
| 50 | + - 本模式:优势是权重 8bit 精度更稳;劣势是权重访存仅减半。 | ||
| 51 | + - W4A8:优势是权重压缩至 FP16 的 1/4;劣势是权重仅16档、有精度风险。 | ||
| 52 | + | ||
| 53 | +### 适用场景与限制 | ||
| 54 | + | ||
| 55 | +#### 1. 适用场景 | ||
| 56 | + | ||
| 57 | +- **Prefill 与 Decode 并重的服务端推理**:prefill 阶段需要激活精度、decode 阶段需要低延迟低开销的场景,如长上下文服务的增量生成。 | ||
| 58 | +- **激活分布随阶段显著变化的模型**:prefill 激活范围大而离散、decode 激活相对稳定的模型。 | ||
| 59 | + | ||
| 60 | +#### 2. 使用限制 | ||
| 61 | + | ||
| 62 | +- **依赖阶段感知**:量化策略切换需推理框架识别当前是 Prefill 还是 Decode,且两阶段共享同一套 INT8 数据流。 | ||
| 63 | +- **当前仅限 MindIE 部署**:阶段感知与切换当前仅在 MindIE 推理框架下生效。 | ||
| 64 | +- **仅支持 INT8**:本模式不提供 INT4/FP8 等数据类型变体。 | ||
| 65 | + | ||
| 66 | +--- | ||
| 67 | + | ||
| 68 | +## 3. 关联流程 | ||
| 69 | + | ||
| 70 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择本模式并执行量化。 | ||
| 71 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 72 | + | ||
| 73 | +--- | ||
| 74 | + | ||
| 75 | +## 4. 关联词条 | ||
| 76 | + | ||
| 77 | +- [量化模式](../README.md):上位概念,本词条属于[线性层量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 78 | +- [W8A8 动态量化](term_w8a8_dynamic.md):对比模式,全程 per-token 动态。 | ||
| 79 | +- [W8A8 静态量化](term_w8a8_static.md):对比模式,全程静态。 | ||
| 80 | +- [W4A8 动态量化](term_w4a8_dynamic.md):对比模式,权重 4bit 的混合位宽方案。 | ||
| 81 | +- 《[PDMIX:激活值阶段间混合量化算法说明](../../quantization_algorithms/pdmix/pdmix.md)》:配套术语,本模式对应的算法处理器文档。 | ||
| 82 | +- 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》:配套术语,线性层量化的处理器实现。 | ||
| 83 | + | ||
| 84 | +--- | ||
| 85 | + | ||
| 86 | +## 5. 参考文档 | ||
| 87 | + | ||
| 88 | +1. 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 89 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,88 @@ | |||
| 1 | +# W8A8 静态量化 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化数据格式([线性层量化](../README.md)) | ||
| 4 | +> **英文名称**:W8A8 Static Quantization | ||
| 5 | +> **应用领域**:大语言模型量化压缩、推理加速 | ||
| 6 | +> **承载 IR 类**:`W8A8StaticFakeQuantLinear`([`msmodelslim/ir/w8a8_static.py`](../../../../../msmodelslim/ir/w8a8_static.py)) | ||
| 7 | + | ||
| 8 | +--- | ||
| 9 | + | ||
| 10 | +## 1. 概述 | ||
| 11 | + | ||
| 12 | +W8A8 静态量化 = 对线性层的权重与激活都做 [INT8](../../quantization_basic/term_int8.md) 静态量化。模式名按[量化模式](../README.md)的命名法则解码:W8A8 表示权重(W)与激活(A)均为 8bit([INT8](../../quantization_basic/term_int8.md));「静态」指量化参数(scale/offset)在离线校准阶段确定并固化,推理时直接使用、零在线开销。它是[线性层量化](README.md)中最基础、应用最广的线性层量化模式。 | ||
| 13 | + | ||
| 14 | +--- | ||
| 15 | + | ||
| 16 | +## 2. 词条介绍 | ||
| 17 | + | ||
| 18 | +### 模式规格 | ||
| 19 | + | ||
| 20 | +| 维度 | 取值 | 说明 | | ||
| 21 | +|------|------|------| | ||
| 22 | +| 量化对象 | 权重 W、激活 A | 线性层矩阵乘两侧的张量;权重是静态参数、每个 token 前向都整体读取,激活是逐 token 生成的中间张量 | | ||
| 23 | +| 位宽 | W 8bit,A 8bit | 两者同为 8bit,访存减半,可走 INT8 整数 GEMM | | ||
| 24 | +| 数据类型 | INT8 | 整数格式,权重 1字节/元素;decode 阶段(逐个生成 token 的推理阶段)权重访存占用减半 | | ||
| 25 | +| 参数获取方式 | 静态 | scale/offset 由校准集统计(如 minmax)后固化,推理零在线统计开销;精度依赖校准集与真实分布的匹配 | | ||
| 26 | +| 量化粒度 | 权重 per-channel;激活 per-tensor | 权重每输出通道共享一个 scale,适配通道间数值差异;激活整张量共享 scale/offset,参数开销最小 | | ||
| 27 | +| 对称性 | 权重对称;激活对称或非对称 | 权重分布天然对称免 offset;激活分布常非对称,需 scale + 零点 offset | | ||
| 28 | + | ||
| 29 | +### 量化公式 | ||
| 30 | + | ||
| 31 | +量化与反量化采用标准线性映射。对称量化(仅 scale、无零点): | ||
| 32 | +$$q = \mathrm{round}(x / s), \qquad \hat{x} = q \cdot s, \qquad s = \frac{\max(|x|)}{2^{b-1}}$$ | ||
| 33 | + | ||
| 34 | +非对称量化(含零点 offset): | ||
| 35 | +$$q = \mathrm{round}(x / s) + z, \qquad \hat{x} = (q - z) \cdot s, \qquad s = \frac{\max(x) - \min(x)}{2^b - 1}$$ | ||
| 36 | + | ||
| 37 | +其中 $x$ 为待量化张量,$q$ 为量化后的整数值,$\hat{x}$ 为反量化还原值,$s$ 为 scale,$z$ 为零点 offset,$b$ 为位宽(INT8 取 $b=8$,INT4 取 $b=4$),且 $z = \mathrm{round}(-\min(x)/s)$。量化参数 $s$、$z$ 的获取方式(静态校准或在线动态)与作用粒度(per-channel、per-token、per-tensor 等)见「模式规格」表。 | ||
| 38 | + | ||
| 39 | +### 与其他模式的关系 | ||
| 40 | + | ||
| 41 | +- **与 [W8A8 动态量化](term_w8a8_dynamic.md)(位宽相同,参数获取方式不同)** | ||
| 42 | + - 本模式(静态):优势是激活 scale 离线固化、推理零在线开销;劣势是激活为整张量共享参数的粗粒度,对逐 token 分布变化不敏感,精度上限低于动态方案。 | ||
| 43 | + - 动态:优势是逐 token 在线算 scale、免校准,激活精度更高;劣势是每次前向多一次 min/max 归约,带来少量延迟开销。 | ||
| 44 | + | ||
| 45 | +- **与 [W8A16 静态量化](term_w8a16_static.md)(激活是否量化不同)** | ||
| 46 | + - 本模式:优势是激活亦量化为 INT8,可走 INT8 整数 GEMM,计算吞吐更高、压缩更彻底;劣势是激活引入量化误差,对存在离群值或量化敏感的层精度劣化。 | ||
| 47 | + - W8A16:优势是激活保持 FP16、零量化误差,是激活精度最稳的基线之一;劣势是激活不量化意味着矩阵乘仍需将 INT8 权重反量化回浮点执行,无整数 GEMM 加速,性能较差,整体压缩低于 W8A8。 | ||
| 48 | + | ||
| 49 | +- **与 [W4A4 动态量化](term_w4a4_dynamic.md)(位宽不同)** | ||
| 50 | + - 本模式:优势是 8bit 分辨率高、精度更稳,是通用部署基线;劣势是权重访存仅减半(FP16 的 1/2)。 | ||
| 51 | + - W4A4:优势是权重访存降至 FP16 的 1/4,压缩最彻底;劣势是仅16个量化档位、精度风险高,需动态量化 + per-group 粒度 + 离群值抑制兜底。 | ||
| 52 | + | ||
| 53 | +### 适用场景与限制 | ||
| 54 | + | ||
| 55 | +#### 1. 适用场景 | ||
| 56 | + | ||
| 57 | +- **通用部署基线**:精度与性能最均衡的成熟方案,适用于大多数大语言模型的默认量化。 | ||
| 58 | +- **带宽受限的 decode 阶段(逐个生成 token)**:每 token 全量读取权重,INT8 权重访存减半的收益最明显。 | ||
| 59 | + | ||
| 60 | +#### 2. 使用限制 | ||
| 61 | + | ||
| 62 | +- **依赖校准数据**:校准集分布偏差过大会导致 scale 失真、精度漂移。 | ||
| 63 | +- **激活离群值敏感**:per-tensor 静态量化在激活存在显著离群值时精度劣化,需先做离群值抑制(如 [SmoothQuant](../../quantization_algorithms/smooth_quant/smooth_quant.md))或改用[动态量化](term_w8a8_dynamic.md)。 | ||
| 64 | + | ||
| 65 | +--- | ||
| 66 | + | ||
| 67 | +## 3. 关联流程 | ||
| 68 | + | ||
| 69 | +- 《[一键量化完整指南](../../../user_guide/usage_quick_quantization.md)》:通过 `--quant_type` 或 YAML 配置选择本模式并执行量化。 | ||
| 70 | +- 《[量化精度调优指南](../../../user_guide/process_quantization_precision_tuning.md)》:本模式导致的精度劣化可通过该流程逐层回退与调优。 | ||
| 71 | + | ||
| 72 | +--- | ||
| 73 | + | ||
| 74 | +## 4. 关联词条 | ||
| 75 | + | ||
| 76 | +- [量化模式](../README.md):上位概念,本词条属于[线性层量化](README.md)类别,是该类别下的一种具体模式。 | ||
| 77 | +- [W8A8 动态量化](term_w8a8_dynamic.md):对比模式,激活量化参数在线计算。 | ||
| 78 | +- [W8A16 静态量化](term_w8a16_static.md):同类模式,激活保持 16bit。 | ||
| 79 | +- [W4A4 动态量化](term_w4a4_dynamic.md):同类模式,更低比特的权重+激活量化。 | ||
| 80 | +- 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》:配套术语,本模式的处理器实现。 | ||
| 81 | +- 《[MinMax:最小最大值量化算法说明](../../quantization_algorithms/minmax/minmax.md)》:配套术语,静态量化常用的量化参数统计方法。 | ||
| 82 | + | ||
| 83 | +--- | ||
| 84 | + | ||
| 85 | +## 5. 参考文档 | ||
| 86 | + | ||
| 87 | +1. 《[线性量化算法说明](../../quantization_algorithms/linear_quant/linear_quant.md)》 | ||
| 88 | +2. 《[量化模式](../README.md)》 | ||
| @@ -0,0 +1,52 @@ | |||
| 1 | +# GEMM 量化术语百科词条 | ||
| 2 | + | ||
| 3 | +> **词条类别**:量化基础概念([量化模式](../README.md)) | ||
| 4 | +> **英文名称**:GEMM(General Matrix Multiply) | ||
| 5 | +> **应用领域**:线性层计算、推理加速 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 1. 概述 | ||
| 10 | + | ||
| 11 | +**GEMM**(General Matrix Multiply,通用矩阵乘法)即矩阵乘 $C=A\times B$,是 Transformer 中[线性层](linear_layer_quantization/README.md)计算 $Y=X\cdot W$ 的数学形式。量化使 GEMM 能以整数/低精度输入运行,是量化的主要计算收益来源。 | ||
| 12 | + | ||
| 13 | +--- | ||
| 14 | + | ||
| 15 | +## 2. 词条介绍 | ||
| 16 | + | ||
| 17 | +### 定义 | ||
| 18 | + | ||
| 19 | +GEMM 是 $C=A\times B$ 形式的矩阵乘法。Transformer 中占比最高的计算就是 GEMM:Q/K/V 投影、注意力输出投影、MLP 三层都是线性层,各自做一次矩阵乘。 | ||
| 20 | + | ||
| 21 | +### 整数 GEMM | ||
| 22 | + | ||
| 23 | +**整数 GEMM**(Integer GEMM)指输入为 [INT8](../quantization_basic/term_int8.md)/[INT4](../quantization_basic/term_int4.md) 等低精度整数、乘累加在整数域进行的矩阵乘:权重与激活都量化成整数后,全程整数计算,结果再乘回 scale 还原。整数 GEMM 可调用专用低精度算子,是量化的主要计算收益来源。 | ||
| 24 | + | ||
| 25 | +若只有一侧量化(如 [W8A16 静态量化](linear_layer_quantization/term_w8a16_static.md)),则需把整数反量化回浮点再做浮点 GEMM,没有整数 GEMM 的加速。 | ||
| 26 | + | ||
| 27 | +### 与量化的关系 | ||
| 28 | + | ||
| 29 | +- 前提是[量化与反量化](../quantization_basic/term_quantization.md):权重与激活都量化成整数,才能进入整数域计算。 | ||
| 30 | +- 数据类型的选取([INT8](../quantization_basic/term_int8.md)、[FP8](../quantization_basic/term_fp8.md)、[MXFP8/MXFP4](../quantization_basic/term_mxfp.md))决定整数/低精度 GEMM 的硬件算子与精度表现。 | ||
| 31 | + | ||
| 32 | +--- | ||
| 33 | + | ||
| 34 | +## 3. 关联流程 | ||
| 35 | + | ||
| 36 | +- 《[一键量化完整指南](../../user_guide/usage_quick_quantization.md)》:量化任务的执行入口。 | ||
| 37 | +- 《[量化精度调优指南](../../user_guide/process_quantization_precision_tuning.md)》:数据类型与量化方案导致的精度问题可通过该流程排查与调优。 | ||
| 38 | + | ||
| 39 | +--- | ||
| 40 | + | ||
| 41 | +## 4. 关联词条 | ||
| 42 | + | ||
| 43 | +- [量化模式](README.md):上位概念,本词条所属目录。 | ||
| 44 | +- [量化与反量化](../quantization_basic/term_quantization.md):配套术语,整数 GEMM 的前提。 | ||
| 45 | +- [线性层量化](linear_layer_quantization/README.md):下位概念,GEMM 的量化应用。 | ||
| 46 | +- [W8A8 静态量化](linear_layer_quantization/term_w8a8_static.md):配套模式,整数 GEMM 的典型实现。 | ||
| 47 | + | ||
| 48 | +--- | ||
| 49 | + | ||
| 50 | +## 5. 参考文档 | ||
| 51 | + | ||
| 52 | +1. 《[量化模式](README.md)》 | ||


【review】改为README.md更清晰