---
title: 量化流程
description: "本节介绍全量化场景下支持的层类型，并给出详细接口调用流程和调用示例。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/devaids/amct/atlasamct_16_0421.html
sourcePath: /source/zh/canncommercial/900/devaids/amct/atlasamct_16_0421.html
indexId: 542983afdf70de80f76039caede230e690f82316536bff13e0142627ceedf7b365
---
# 量化流程

本节介绍全量化场景下支持的层类型，并给出详细接口调用流程和调用示例。

该特性支持的层如下，样例请参见样例列表。

本章节根据量化对象不同，分为两个场景，不同场景支持的量化类型及约束不同：

- 若权重（weight）和数据（activation）都进行量化，则为全量化，详情参见  全量化支持的层
。
- 若仅对权重（weight）进行量化， 则为仅权重量化，详情参见  仅权重量化支持的层


#### 全量化支持的层

原始模型中数据类型为float32（fp32）、float16（fp16）、bfloat16（bf16）时，可以通过本节介绍的内容，量化后转换为HiFloat8（HiF8）、float8（fp8）、MXFP8，float4等数据类型，通过对数据格式的压缩，实现模型轻量化。其中：

HIFloat8（HiF8）、FLOAT8（float8）、MXFP8、MXFP4、FP4_E2M1、FP4_E1M2：仅在Atlas 350 加速卡支持。

其他产品型号仅支持INT8、INT4量化数据类型。


**表1 支持量化的层以及约束**

| 支持的层类型 | 原始数据类型 | 支持的量化数据类型组合 | 约束 |
| --- | --- | --- | --- |
| torch.nn.Linear | float32（fp32）、float16（fp16）、bfloat16（bf16） | act\_type: HIFLOAT8 wts\_type: HIFLOAT8 act\_type: FLOAT8\_E4M3FN wts\_type: FLOAT8\_E4M3FN | 激活（数据）支持PER\_TENSOR量化，权重支持PER\_TENSOR/PER\_CHANNEL量化 量化算法为OFMR，config详细配置中必须配置ofmr选项 |
| torch.nn.Linear | bfloat16（bf16） | act\_type: MXFP8\_E4M3FN wts\_type: MXFP8\_E4M3FN | 支持2~6维数据输入、PER\_GROUP量化、支持对称量化、cin长度除以32向上取整后是2的整数倍 不使用量化算法，即只做mx数据类型转换，config详细配置中必须配置mxquant选项 |
| torch.nn.Linear | bfloat16（bf16） | act\_type: FLOAT8\_E4M3FN wts\_type: FLOAT4\_E2M1 | 支持2~6维数据输入、bias为false 激活（数据）支持shape为(m,k)，权重支持shape为(n,k)，其中k是64整数倍 激活（数据）支持PER\_TENSOR量化，权重支持PER\_GROUP量化 激活和权重都仅支持对称量化 支持MIN\-MAX量化算法，SmoothQuant算法，config详细配置中必须分别配置minmax、smoothquant选项 |
| torch.nn.Linear | float16（fp16）、bfloat16（bf16） | act\_type: INT8 wts\_type: INT8 | 支持2~6维数据输入 激活（数据）支持PER\_TENSOR量化，支持对称非对称量化，bias量化为INT32；权重支持PER\_TENSOR/PER\_CHANNEL量化，支持对称量化 激活（数据）支持PER\-TOKEN对称量化，bias不量化，k是16的倍数，n是8的倍数；权重支持PER\_TENSOR/PER\_CHANNEL对称量化 支持MIN\-MAX量化算法、SmoothQuant算法，config详细配置中必须分别配置minmax、smoothquant选项 |
| torch.nn.Conv2d | float32（fp32）、float16（fp16）、bfloat16（bf16） | act\_type: HIFLOAT8 wts\_type: HIFLOAT8 act\_type: FLOAT8\_E4M3FN wts\_type: FLOAT8\_E4M3FN | padding\_mode为zeros、支持PER\_TENSOR/PER\_CHANNEL量化 量化算法为OFMR，config详细配置中必须配置ofmr选项 |


注：act_type和wts_type参数分别指config详细配置中的激活（activation）和权重（weight）量化类型。关于量化数据类型以及PER_TENSOR/PER_CHANNEL等量化概念解释请参见压缩概念。


#### 仅权重量化支持的层

本章节介绍仅权重量化特性，以及对应的优化算法：AWQ、GPTQ等权重量化算法。

原始模型中数据类型为float16（fp16）、bfloat16（bf16）时，可以通过本节介绍的内容，仅权重量化后转换为HIFloat8（HiF8）、float8（fp8）、MXFP4、float4数据类型，通过对权重的压缩，实现模型轻量化。


**表2 支持量化的层以及约束**

| 支持的层类型 | 原始数据类型 | 支持的量化类型组合 | 约束 |
| --- | --- | --- | --- |
| torch.nn.Linear | float16（fp16）、bfloat16（bf16） | wts\_type: HIFLOAT8 wts\_type: FLOAT8\_E4M3FN | 支持PER\_TENSOR/PER\_CHANNEL量化，支持对称量化 支持2~6维数据输入 支持OFMR量化算法、GPTQ量化算法，config详细配置中必须分别配置ofmr、gptq选项 |
| torch.nn.Linear | float16（fp16）、bfloat16（bf16） | wts\_type: MXFP4\_E2M1 | 支持PER\_GROUP量化，支持对称量化 支持2~6维数据输入 支持不配置算法，config详细配置中必须配置mxquant选项 支持配置GPTQ量化算法、AWQ量化算法，config详细配置中必须分别配置gptq、awq选项 |
| torch.nn.Linear | float16（fp16）、bfloat16（bf16） | wts\_type: FLOAT4\_E2M1 | 支持PER\_GROUP量化，支持对称量化 支持2~6维数据输入 支持MIN\-MAX量化算法、GPTQ量化算法、AWQ量化算法，config详细配置中必须分别配置minmax、gptq、awq选项 |
| torch.nn.Linear | float16（fp16）、bfloat16（bf16） | wts\_type: INT8 | 支持PER\_TENSOR/PER\_CHANNEL/PER\_GROUP量化，支持对称量化/非对称量化 支持MIN\-MAX量化算法、GPTQ量化算法、AWQ量化算法，config详细配置中必须分别配置minmax、gptq、awq选项 wts\_type为INT8时，原始模型weight需要K、N轴32元素对齐；wts\_type为INT4时，需要K、N轴64元素对齐 |
| torch.nn.Linear | float32（fp32）、float16（fp16）、bfloat16（bf16） | wts\_type: INT4 | 支持PER\_TENSOR/PER\_CHANNEL/PER\_GROUP量化，支持对称量化/非对称量化 支持MIN\-MAX量化算法、GPTQ量化算法、AWQ量化算法，config详细配置中必须分别配置minmax、gptq、awq选项 wts\_type为INT4时，需要K、N轴64元素对齐 |


#### 接口调用流程

图1 调用流程

蓝色部分为用户实现，灰色部分为用户调用AMCT提供的API实现，简要流程如下：1. 用户首先构造PyTorch的原始模型（请确保原始模型可以正常推理）和量化配置，然后调用quantize接口对原始模型进行修改，生成量化校准模型；修改过程中，使用的数据类别不同，量化算法不同。

  - 全量化场景

    - HIFLOAT8和FLOAT8_E4M3FN：将模型中将待量化算子替换成OFMRQuant量化算子，生成量化校准模型。OFMR量化算法原理请参见      OFMR算法
。
    - MXFP8_E4M3FN和MXFP4_E2M1：不使用量化算法，根据转换公式直接转换。
    - 激活配置FLOAT8_E4M3FN，权重配置FLOAT4_E2M1：未配置SmoothQuant量化算法，则将模型中将待量化算子替换成MinMaxCalibrator量化算子，生成量化校准模型。MIN-MAX量化算法原理请参见      MIN-MAX量化算法
。若配置SmoothQuant量化算法，则将模型中将待量化算子替换成SmoothQuant量化算子，生成量化校准模型。SmoothQuant量化算法原理请参见      SmoothQuant量化算法
。
    - 激活配置INT8，权重配置INT8：未配置SmoothQuant量化算法，则将模型中将待量化算子替换成MinMaxCalibrator量化算子，生成量化校准模型。若配置SmoothQuant量化算法，则将模型中将待量化算子替换成SmoothQuant量化算子，生成量化校准模型。
  - 仅权重量化场景

    - 仅权重量化配置的是HIFLOAT8、FLOAT8_E4M3FN、MXFP4_E2M1、FLOAT4_E2M1、FLOAT4_E1M2、INT8、INT4量化类型，不配置任何量化算法，则量化时将模型中待量化算子替换成MinMaxCalibrator量化算子，生成量化校准模型。MIN-MAX量化算法原理请参见      MIN-MAX量化算法
。若配置了GPTQ量化算法，则将模型中待量化Linear算子替换成GPTQuant量化算子，生成量化校准模型。
    - 仅权重量化配置的是MXFP4_E2M1、FLOAT4_E2M1、FLOAT4_E1M2、INT8、INT4量化类型，若配置AWQ量化算法，则将模型中待量化Linear算子替换成LinearAWQuant量化算子，生成量化校准模型。
2. 用户调用  convert
接口，将量化校准算子转换为NPU对应的量化部署算子，并输出量化部署模型（类型为torch.nn.Module）。
  生成的部署模型如果要执行推理，需要使用torch_npu，详情请参见《PyTorch图模式使用指南(TorchAir)(https://www.hiascend.com/document/detail/zh/Pytorch/2600/modthirdparty/torchairuseguide/docs/zh/overview.md)》。


#### 调用示例

以下是关键步骤的代码示例，不能直接拷贝编译运行，仅供参考。

```
# 1.导入AMCT包
import amct_pytorch as amct
# 2.调用AMCT，量化模型
# 2.1 生成量化校准模型
# 建立待进行量化的网络图结构
ori_model = build_model()
model = copy.deepcopy(ori_model)
# 量化配置
cfg = {
'batch_num': 1,
'quant_cfg': {
'weights': {
'type': 'int8',
'symmetric': True,
'strategy': 'tensor',
},
},
'algorithm': {'minmax'},
}
# 调用量化接口生成量化校准模型
amct.quantize(model, cfg)
# 2.2 生成量化部署模型
# 调用接口将量化校准模型转换为量化部署模型
amct.convert(model)
```
