create_quant_config

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明

训练后量化接口,根据图的结构找到所有可量化的层,自动生成量化配置文件,并将可量化层的量化配置信息写入文件。

函数原型

create_quant_config(config_file, model, input_data, skip_layers=None, batch_num=1, activation_offset=True, config_defination=None)

参数说明

参数名

输入/输出

说明

config_file

输入

含义:待生成的量化配置文件存放路径及名称。如果存放路径下已经存在该文件,则调用该接口时会覆盖已有文件。

数据类型:string

model

输入

含义:待量化的模型,已加载权重。

数据类型:torch.nn.Module

input_data

输入

含义:模型的输入数据。一个torch.tensor会被等价为tuple(torch.tensor

数据类型:tuple

skip_layers

输入

含义:可量化但不需要量化的层名。

默认值:None

数据类型:list,列表中元素类型为string

使用约束:如果使用简易配置文件作为入参,则该参数需要在简易配置文件中设置,此时输入参数中该参数配置不生效。

batch_num

输入

含义:量化使用的batch数量,即使用多少个batch的数据生成量化因子。

数据类型:int

取值范围:大于0的整数,默认值为1。

使用约束:

  • batch_num不宜过大,batch_num与batch_size的乘积为量化过程中使用的图片数量,过多的图片会占用较大的内存。
  • 如果使用简易配置文件作为入参,则该参数需要在简易配置文件中设置,此时输入参数中该参数配置不生效。

activation_offset

输入

含义:数据量化是否带offset。

默认值:True

数据类型:bool

使用约束:如果使用简易配置文件作为入参,则该参数需要在简易配置文件中设置,此时输入参数中该参数配置不生效。

config_defination

输入

含义:基于calibration_config_pytorch.proto文件生成的简易量化配置文件quant.cfg,*.proto文件所在路径为:AMCT安装目录/amct_pytorch/proto/。

*.proto文件参数解释以及生成的quant.cfg简易量化配置文件样例请参见训练后量化简易配置文件

默认值:None

数据类型:string

使用约束:当取值为None时,使用输入参数生成配置文件;否则,忽略输入的其他量化参数(skip_layers,batch_num,activation_offset),根据简易量化配置文件参数config_defination生成JSON格式的配置文件。

训练后量化支持的层及约束

支持的层类型

约束

备注

torch.nn.Linear

-

复用层(共用weight和bias参数)不支持量化。

torch.nn.Conv2d

  • padding_mode为zeros
  • 只支持input data的shape为(N, Cin, Hin, Win)

torch.nn.Conv3d

  • dilation_d为1,dilation_h/dilation_w >= 1
  • 只支持input data的shape为(N, Cin, Din, Hin, Win)

torch.nn.ConvTranspose2d

  • padding_mode为zeros
  • 只支持input data的shape为(N, Cin, Hin, Win)

torch.nn.AvgPool2d

-

-

量化均衡预处理支持的层及约束

支持的层类型

约束

备注

torch.nn.Linear

-

复用层(共用weight和bias参数)不支持量化。

torch.nn.Conv2d

padding_mode为zeros

torch.nn.Conv3d

dilation_d为1,dilation_h/dilation_w >= 1

padding_mode为zeros

torch.nn.ConvTranspose2d

padding_mode为zeros

返回值说明

调用示例

import amct_pytorch as amct
# 建立待量化的网络图结构
model = build_model()
model.load_state_dict(torch.load(state_dict_path))
input_data = tuple([torch.randn(input_shape)])
model.eval()

# 生成量化配置文件
amct.create_quant_config(config_file="./configs/config.json",
                         model=model,
                         input_data=input_data,
                         skip_layers=None,
                         batch_num=1,
                         activation_offset=True)

落盘文件说明:生成JSON格式的量化配置文件,样例如下(重新执行量化时,该接口生成的量化配置文件将会被覆盖),参数解释请参见训练后量化配置参数.

  • 训练后量化配置文件(数据量化使用IFMR数据量化算法

    {
        "version":1,
        "batch_num":2,
        "activation_offset":true,
        "do_fusion":true,
        "skip_fusion_layers":[],
        "conv1":{
            "quant_enable":true,
            "dmq_balancer_param":0.5,
            "activation_quant_params":{
                "num_bits":8,
                "max_percentile":0.999999,
                "min_percentile":0.999999,
                "search_range":[
                    0.7,
                    1.3
                ],
                "search_step":0.01,
                "act_algo":"ifmr",
                "asymmetric":false
            },
            "weight_quant_params":{
                "num_bits":8,
                "wts_algo":"arq_quantize",
                "channel_wise":true
            }
        },
        "fc":{
            "quant_enable":true,
            "dmq_balancer_param":0.5,
            "activation_quant_params":{
                "num_bits":8,
                "max_percentile":0.999999,
                "min_percentile":0.999999,
                "search_range":[
                    0.7,
                    1.3
                ],
                "search_step":0.01,
                "act_algo":"ifmr",
                "asymmetric":false
            },
            "weight_quant_params":{
                "num_bits":8,
                "wts_algo":"arq_quantize",
                "channel_wise":false
            }
        }
    }
    
  • 训练后量化配置文件(数据量化使用HFMG数据量化算法

    {
        "version":1,
        "batch_num":2,
        "activation_offset":true,
        "do_fusion":true,
        "skip_fusion_layers":[],
        "conv1":{
            "quant_enable":true,
            "dmq_balancer_param":0.5,
            "activation_quant_params":{
                "num_bits":8,
                "act_algo":"hfmg",
                "num_of_bins":4096,
                "asymmetric":false
            },
            "weight_quant_params":{
                "num_bits":8,
                "wts_algo":"arq_quantize",
                "channel_wise":true
            }
        }
    }
    
  • 自适应舍入量化简易配置文件(权重量化使用ADA权重量化算法

    "layer_name1":{
            "quant_enable":true,
            "weight_quant_params":{
                "wts_algo":"ada_quantize",
                "num_iteration":10000,
                "reg_param":0.1,
                "beta_range":[20,2], 
    		"warm_start":0.2,
    		"num_bits":8,
    		"channel_wise":true
            }
        }