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详细配置中必须配置ofmrgptqcastquantile选项)
  • wts_type: FLOAT8_E4M3FN时,支持OFMR量化算法、GPTQ量化算法(config详细配置中必须配置ofmrgptq选项)

wts_type: MXFP4_E2M1

  • 支持PER_GROUP量化,支持对称量化
  • 支持2~6维数据输入
  • 支持不配置量化算法(即config详细配置中配置mxquant选项)、GPTQ量化算法(config详细配置中必须配置gptq选项)、AWQ量化算法(config详细配置中必须配置awq选项)

wts_type: FLOAT4_E2M1

  • 支持PER_GROUP量化,支持对称量化
  • 支持2~6维数据输入
  • 支持MIN-MAX量化算法、GPTQ量化算法、AWQ量化算法(config详细配置中必须配置minmaxgptqawq选项)

wts_type: INT8

  • 支持PER_TENSOR/PER_CHANNEL/PER_GROUP量化,支持对称量化/非对称量化
  • 支持MIN-MAX量化算法、GPTQ量化算法、AWQ量化算法(config详细配置中必须配置minmaxgptqawq选项)
  • 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详细配置中必须配置minmaxgptqawq选项)
  • 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类型,权重是否为对称量化。

  • True:对称量化。
  • False:非对称量化。

-

-

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类型,数据是否为对称量化。

  • True:对称量化。
  • False:非对称量化。

-

-

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类型,按层名跳过哪些层不做量化,全局配置参数。指定层名后,只要层名包括用户设置的字符串,就跳过该层不做量化。