量化流程
本节介绍全量化场景下支持的层类型,并给出详细接口调用流程和调用示例。
该特性支持的层如下,样例请参见样例列表。
本章节根据量化对象不同,分为两个场景,不同场景支持的量化类型及约束不同:
全量化支持的层
原始模型中数据类型为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量化数据类型。
支持的层类型 |
原始数据类型 |
支持的量化数据类型组合 |
约束 |
|---|---|---|---|
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选项 |
bfloat16(bf16) |
act_type: MXFP8_E4M3FN wts_type: MXFP8_E4M3FN |
支持2~6维数据输入、PER_GROUP量化、支持对称量化、cin长度除以32向上取整后是2的整数倍 不使用量化算法,即只做mx数据类型转换,config详细配置中必须配置mxquant选项 |
|
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选项 |
|
float16(fp16)、bfloat16(bf16) |
act_type: INT8 wts_type: INT8 |
|
|
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数据类型,通过对权重的压缩,实现模型轻量化。
支持的层类型 |
原始数据类型 |
支持的量化类型组合 |
约束 |
|---|---|---|---|
torch.nn.Linear |
float16(fp16)、bfloat16(bf16) |
wts_type: HIFLOAT8 wts_type: FLOAT8_E4M3FN |
|
wts_type: MXFP4_E2M1 |
|
||
wts_type: FLOAT4_E2M1 |
|
||
wts_type: INT8 |
|
||
float32(fp32)、float16(fp16)、bfloat16(bf16) |
wts_type: INT4 |
|
接口调用流程

- 用户首先构造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量化算子,生成量化校准模型。
- 全量化场景
- 用户调用convert接口,将量化校准算子转换为NPU对应的量化部署算子,并输出量化部署模型(类型为torch.nn.Module)。
生成的部署模型如果要执行推理,需要使用torch_npu,详情请参见《PyTorch图模式使用指南(TorchAir)》。
调用示例
以下是关键步骤的代码示例,不能直接拷贝编译运行,仅供参考。
# 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)