quantize
产品支持情况
| 产品 |
是否支持 |
| Ascend 950PR/Ascend 950DT |
√ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 |
√ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 |
√ |
功能说明
基于torch module的训练后量化接口,高精度模型转换为校准模型,得到量化校准模型,推理后计算得到量化参数。
函数原型
quantize(model, config)
参数说明
参数名
|
输入/输出
|
说明
|
model
|
输入/输出
|
输入含义:待量化的高精度模型
输出含义:量化校准模型
数据类型:torch.nn.Module
|
config
|
输入
|
含义:量化配置。
数据类型:自定义dict,其中包含weight/input/algorithm/skip_layers的配置,详细配置参数请参见config详细配置。
|
全量化支持的层
原始模型中数据类型为float32(fp32)、float16(fp16)、bfloat16(bf16)时,可以通过本节介绍的内容,量化后转换为HiFloat8(HiF8)、float8(fp8)、MXFP8、float4数据格式,通过对数据格式的压缩,实现模型轻量化。
该特性支持的层如下。
表 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_TOKEN量化,权重支持PER_TENSOR/PER_CHANNEL量化
act_type: HIFLOAT8 wts_type: HIFLOAT8时,支持OFMR量化算法、Cast数据直转算法、Quantile分位量化算法,config详细配置中必须分别配置ofmr、cast、quantile选项
act_type: FLOAT8_E4M3FN wts_type: FLOAT8_E4M3FN时,支持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
|
- 支持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)量化类型。
仅权重量化支持的层
本章节介绍仅权重量化特性,以及对应的优化算法:AWQ、GPTQ等权重量化算法。
原始模型中数据类型为float16(fp16)、bfloat16(bf16)时,可以通过本节介绍的内容,仅权重量化后转换为HIFloat8(HiF8)、float8(fp8)、MXFP4、float4数据格式,通过对权重的压缩,实现模型轻量化。
注意: 由于torch_npu暂不支持Ascend 950PR/Ascend 950DT,以下功能特性暂时只支持wts_type: INT8 或 wts_type: INT4。
该特性支持的层如下:
表 2 支持量化的层以及约束
支持的层类型
|
原始数据类型
|
支持的量化类型组合
|
约束
|
torch.nn.Linear
|
float16(fp16)、bfloat16(bf16)
|
wts_type: HIFLOAT8
wts_type: FLOAT8_E4M3FN
|
- 支持PER_TENSOR/PER_CHANNEL量化,支持对称量化
- 支持2~6维数据输入
- wts_type: HIFLOAT8时,支持OFMR量化算法、GPTQ量化算法、Cast数据直转算法、Quantile分位量化算法(config详细配置中必须配置ofmr、gptq、cast、quantile选项)
- wts_type: FLOAT8_E4M3FN时,支持OFMR量化算法、GPTQ量化算法(config详细配置中必须配置ofmr、gptq选项)
|
wts_type: MXFP4_E2M1
|
|
wts_type: FLOAT4_E2M1
|
- 支持PER_GROUP量化,支持对称量化
- 支持2~6维数据输入
- 支持MIN-MAX量化算法、GPTQ量化算法、AWQ量化算法(config详细配置中必须配置minmax、gptq、awq选项)
|
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元素对齐
|
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时,原始模型weight需要K,N轴64元素对齐
|
返回值说明
无
调用示例
ori_model = build_model()
model = copy.deepcopy(ori_model)
cfg = {
'batch_num': 1,
'quant_cfg': {
'weights': {
'type': 'int8',
'symmetric': True,
'strategy': 'tensor',
},
},
'algorithm': {'minmax'},
}
quantize(model, cfg)
config详细配置
key
|
-
|
-
|
value
|
batch_num
|
-
|
-
|
uint32类型,量化使用的batch数量。
|
quant_cfg
|
-
|
-
|
量化配置。
|
-
|
weights
|
-
|
仅权重量化配置。
|
-
|
-
|
type
|
string类型,权重(weight)量化粒度。当前支持如下类型:
- hifloat8
- float8_e4m3fn
- mxfp4_e2m1
- float4_e2m1
- int4
- int8
|
-
|
-
|
symmetric
|
bool类型,权重是否为对称量化。
|
-
|
-
|
strategy
|
string类型,权重量化粒度。
- tensor,对应per-tensor。
- channel,对应per-channel。
- group,对应per-group。
量化粒度介绍请参见压缩概念。
|
-
|
-
|
group_size
|
仅权重量化场景配置,per-group量化粒度下group的大小,该参数只有配置了per-group后,才能配置。
要求传入值的范围为[32, K-1]且必须是32的倍数。
|
-
|
inputs
|
-
|
数据量化配置。
|
-
|
-
|
type
|
string类型,数据(activation)量化粒度。目前支持如下类型:
- hifloat8
- float8_e4m3fn
- mxfp8_e4m3fn
- int8
|
-
|
-
|
symmetric
|
bool类型,数据是否为对称量化。
|
-
|
-
|
strategy
|
string类型,数据量化粒度。
- tensor,对应per-tensor。
- token,对应per-token。
- group,对应per-group,该参数只支持量化数据类型为mxfp8_e4m3fn时配置。
|
algorithm
|
-
|
-
|
string类型,量化算法,支持如下配置:
- awq:grids_num,uint32类型,搜索格点数量,默认为20。
- gptq。
- minmax。
- smoothquant:smooth_strength,float类型,迁移强度,默认值0.5。
- ofmr。
- mxquant:仅做mx数据类型转换。
- cast:HiFloat8数据直转算法,用于将权重和激活直接转换为HiFloat8类型。
- quantile:HiFloat8分位量化算法,用于根据分位统计计算HiFloat8量化参数。
具体请参见量化算法介绍。
|
skip_layers
|
-
|
-
|
string类型,按层名跳过哪些层不做量化,全局配置参数。指定层名后,只要层名包括用户设置的字符串,就跳过该层不做量化。
|