---
tags: [CANN]
doc_type: knowledge-note
返回目录: "[[计算机系/昇腾与CANN/大模型与算子专题学习导航|大模型与算子专题学习导航]]"
上一篇: "[[计算机系/昇腾与CANN/MTP投机解码与多流预取|MTP投机解码与多流预取]]"
下一篇: "[[计算机系/昇腾与CANN/多模态视频生成推理优化|多模态视频生成推理优化]]"
前置知识: "[[计算机系/昇腾与CANN/大模型量化原理与部署|大模型量化原理与部署]]"
---

# 低比特量化优化与 AMCT 实践

量化不仅是把浮点数转成整数，还涉及数据格式、Scale 粒度、误差补偿、权重组织与后端算子的共同约定。线性量化和 SmoothQuant 的基础见[大模型量化原理与部署](大模型量化原理与部署.md)，这里重点讨论更低比特的格式与工程链路。

## 1. 比特数相同，格式也可能不同

| 格式 | 组织方式 | 需要关注的问题 |
| --- | --- | --- |
| MXFP8 / MXFP4 | 通常每 32 个元素共享 E8M0 Scale | 分组轴、布局、Scale 编码与算子匹配 |
| NVFP4 | 典型结构为 16 元素一组的 FP8 E4M3 Scale，并配合更高层 FP32 Scale | 双层缩放、误差与物理打包 |
| HiFloat 系列 | 采用自身的数值编码及缩放设计 | 精度分布与实际硬件、工具链支持 |

![低比特浮点与微缩放格式](.assets/CANN推理专题/quant-7.png)

共享 Scale 能扩大局部表示范围，但同组中的异常值仍会影响其余元素。缩小分组可能提高精度，也会增加 Scale 存储、访存和计算成本。标称 4 bit 权重的实际内存占用还包括 Scale、零点、对齐与元数据。

HiF8 等格式的精度分布与固定指数位、尾数位的传统浮点格式不同；更低位宽的分层缩放设计需要按对应规范解释。某种格式被提出，并不意味着当前芯片与推理框架已经具备原生高效执行能力。

## 2. 先区分假量化与真实部署

假量化模拟舍入、截断和反量化误差，但后续运算仍可能使用高精度张量。因此它适合评估数值质量，不能单独证明低比特算子的速度，也不能证明部署后端支持该格式。

![假量化与精度评估](.assets/CANN推理专题/quant-10.png)

建议依次比较三个基线：原始 BF16 模型；替换为适配模块但关闭量化的模型；打开量化后的模型。第二步能把模块替换、权重映射错误与量化误差分开，避免把工程错误误判为低精度的固有损失。

Blockwise 评测可以一次只加载一个 Decoder Block，保存必要的激活、Mask 和位置状态，再逐层推进。它降低的是同时驻留的权重与工作空间，不会减少模型总参数量，也不能省略跨层状态的一致性管理。

## 3. 误差来自哪里，算法就优化哪里

![量化算法与误差补偿](.assets/CANN推理专题/quant-13.png)

LAC 调节激活截断范围，LWC 调节权重截断范围。范围太宽会降低多数元素的分辨率，范围太窄则会严重截断异常值；优化目标是在两种误差之间寻找平衡。

对行向量形式的输入 $X$ 与权重 $W$，可逆对角缩放矩阵 $S$ 满足：

$$
XW=(XS^{-1})(SW).
$$

LET 类变换利用等价缩放调整激活和权重的数值范围，再分别量化。变换能否被融合到前后模块，需要检查计算结构，不能随意穿过非线性函数。

若 $R$ 是正交矩阵，则：

$$
XW=(XR)(R^TW).
$$

旋转可让少数集中异常值分散到更多维度，但旋转本身的计算与融合条件也需要考虑。FlatQuant 等方法进一步学习适合量化的变换，而不是仅选择一个固定截断阈值。

GPTQ 利用二阶信息补偿权重量化误差；AWQ 利用激活信息识别敏感权重通道；AutoRound 优化舍入选择；低秩补偿则用额外结构近似残余误差。算法名称不同，优化对象和部署代价也不同。

PTQ 可以在校准数据上学习 Scale、截断或变换参数，不等于完全没有优化过程；QAT 则让训练过程显式感知量化影响，也不意味着必须重新使用完整预训练语料。4 bit 精度是否可接受必须通过任务评测确定。

## 4. AMCT 的完整链路

![AMCT 适配与量化流程](.assets/CANN推理专题/quant-15.png)

**Adapt → Evaluate → Quantize → Deploy** 分别解决模型结构适配、基线评测、量化参数生成和推理后端执行。

适配要识别注意力投影、MLP、MoE 专家与 KV Cache 等目标。量化配置应明确处理哪些模块、保留哪些高精度模块、使用什么格式和分组方式。把敏感模块加入排除列表会改变精度与性能，必须作为配置的一部分保存。

对 MoE，推理算子可能偏好将多个专家权重堆成三维张量，而量化算法可能按专家分别处理。打包与拆包要保持专家顺序、转置方向和 Scale 的对应关系，否则形状正确也可能产生错误计算。

## 5. 从基线到低比特校准

以下命令以已适配的 `qwen3_moe` 模型和相应 AMCT 命令行版本为前提；模型路径、配置路径和设备编号对应本地部署环境。

```bash
python -m amct_pytorch.eval \
  --model ./Qwen3-235B --model_name qwen3_moe \
  --seq_len 4096 --granularity block --device npu:0 \
  --eval_mode bf16

python -m amct_pytorch.eval \
  --model ./Qwen3-235B --model_name qwen3_moe \
  --seq_len 4096 --granularity block --device npu:0 \
  --eval_mode quant --quant_target moe --quant_dtype mxfp \
  --bit_config amct_pytorch/configs/bf16.yaml

python -m amct_pytorch.eval \
  --model ./Qwen3-235B --model_name qwen3_moe \
  --seq_len 4096 --granularity block --device npu:0 \
  --eval_mode quant --quant_target moe --quant_dtype mxfp \
  --bit_config amct_pytorch/configs/w4a4.yaml
```

第二组通过量化模块路径配合 BF16 配置检查适配，第三组再启用 W4A4。实际是否关闭了全部量化，应以配置内容为准，不能仅凭文件名判断。

PTQ 量化阶段可使用 `python -m amct_pytorch.ptq`，并按对应版本的参数约定配置 `--algos lac lwc flatquant` 等算法。校准样本应覆盖实际输入的长度、领域和激活分布，过于单一的数据可能掩盖线上误差。

![模型评测与量化实践](.assets/CANN推理专题/quant-22.png)

困惑度常用：

$$
\operatorname{PPL}=\exp\left(-\frac{1}{N}\sum_{t=1}^{N}\log p(x_t\mid x_{<t})\right).
$$

比较时需要一致的 Tokenizer、数据集、窗口划分和计分规则。PPL 只是语言建模指标，不能替代代码、数学、对话或长上下文任务上的质量评测。

## 6. 量化产物与后端必须一致

导出不仅包含权重，还应包含 Scale 的类型和布局、量化目标、排除列表、分组大小、权重名称映射以及分片规则。某些接口以 `uint64` 存储打包的 Scale 参数，这是物理接口表示，不能解释为数学上的 Scale 一定是无符号整数。

![量化部署与后端适配](.assets/CANN推理专题/quant-30.png)

后端支持需要落实到具体框架、版本、芯片和算子组合。处于适配中的路径或下一代格式不能作为当前已经可部署的功能。导出成功之后，还要检查加载、精度、原生低比特核调用、显存与端到端速度。

## 7. Agent 能自动化哪些工作

模型适配 Agent 可以辅助识别模块与生成映射，量化编排 Agent 可以组织评测、参数搜索与产物管理。历史案例库能提供起点，但不能代替当前模型的精度与性能测量。

最小可追溯记录应包含原模型版本、工具链版本、校准数据、算法参数、量化配置、质量结果和部署后端。只有这一整条链路一致，量化结果才可复用、可比较。
