下载
中文
注册

QuantCalibrationOp

功能说明

用于用户构图,在前向传播时,根据用户的量化算法配置调用IFMR/HFMG量化算法对输出做校准,校准后,将量化因子依据对应格式输出到record_file文件指定层名中。

在进行前向传播时,算子对原始输出会做透传,不修改activation输入信息:

  • 若当前传入数据个数小于batch_num时,使用IFMR/HFMG算子中的积攒数据方法,将数据集进行保存。
  • 若当前传入收据个数等于batch_num时,会调用IFMR/HFMG算法计算量化因子,根据quant_method参数进行区分写出来的量化因子格式,按照格式写入对应record文件;quant_method目前仅支持“kv_cache_quant”方式。

写入时,对record文件进行增量写入,如果进行了覆盖写入,则会提示哪个层哪些参数被覆盖。

函数原型

QuantCalibrationOp (record_file,quant_algo_params, quant_method)

参数说明

参数名

输入/返回值

含义

使用限制

record_file

输入

保存量化因子的record文件路径。

数据类型:string

quant_algo_params

输入

指定量化使用的量化算法,以及添加对应量化配置,格式如下:

{
  "act_algo": "hfmg",
  "num_bits": 8,
  "quant_granularity": "1",
  "with_offset": true,
  "batch_num": 1
}

act_algo配置的算法不同,配置的字段不同,算法支持字段和解释如表1所示。

数据类型:dict

quant_method

输入

量化方式。默认为'kv_cache_quant',用于指定输出量化因子的格式。

数据类型:string

表1 quant_algo_params参数支持配置的字段

字段

含义

IFMR算法支持配置的字段

HFMG算法支持配置的字段

act_algo

数据量化算法,支持如下两种:

  • IFMR数据量化算法:ifmr,默认为ifmr。
  • HFMG数据量化算法:hfmg。

-

-

num_bits

量化位宽,当前仅支持配置为8,表示采用INT8量化位宽。

IFMR/HFMG两种算法都支持。

支持

支持

with_offset

控制数据量化是对称量化还是非对称量化,全局配置参数。

  • true:数据量化时为非对称量化,默认为true.
  • false:数据量化时为对称量化。

若配置文件中同时存在with_offset和asymmetric参数,asymmetric参数优先级>with_offset参数。

IFMR/HFMG两种算法都支持。

支持

支持

batch_num

控制量化使用多少个batch的数据。取值范围大于0,默认为1。

IFMR/HFMG两种算法都支持。

支持

支持

asymmetric

控制数据量化是对称量化还是非对称量化,用于控制逐层量化算法的选择。

  • true:非对称量化,默认为true。
  • false:对称量化。

IFMR/HFMG两种算法都支持。

支持

支持

quant_granularity

量化粒度,支持如下两种方式:

  • 0:per_tensor,默认为per_tensor。
  • 1:per_channel。

IFMR/HFMG两种算法都支持。

支持

支持

max_percentile

IFMR数据量化算法中,最大值搜索位置参数。

取值范围为(0.5,1],默认为0.999999。

IFMR算法支持。

支持

不支持

min_percentile

IFMR数据量化算法中,最小值搜索位置参数。

取值范围为(0.5,1],默认为0.999999。

IFMR算法支持。

支持

不支持

search_range

IFMR数据量化算法中,控制量化因子的搜索范围[search_range_start, search_range_end]。

取值范围为 0<search_range_start<search_range_end,推荐配置为[0.7,1.3]。

IFMR算法支持。

支持

不支持

search_step

IFMR数据量化算法中,控制量化因子的搜索步长。

取值范围为 (0, (search_range_end-search_range_start)],默认为0.01。

IFMR算法支持。

支持

不支持

num_of_bins

直方图的bin(直方图中的一个最小单位直方图形)数目,支持的范围为{1024, 2048, 4096, 8192}。默认值为4096。

仅HFMG算法支持。

不支持

支持

返回值说明

无。

函数输出

量化因子文件。

调用示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import amct_pytorch as amct
from amct_pytorch.nn.module.quantization.quant_calibration_op import QuantCalibrationOp

class LinearNet(nn.Module):
    def __init__(self, quant_algo_params):

        super(LinearNet,self).__init__()
        self.quant_algo_params = quant_algo_params
        self.layer1 = nn.Linear(28, 1024, bias=False)
        self.ptq_1 = QuantCalibrationOp(record_file, quant_algo_params=self.quant_algo_params, quant_method="kv_cache_quant")

    def forward(self, layer_name, x):
        x = self.layer1(x)
        x = self.ptq_1(layer_name, x)

temp_folder = "./"
record_file = os.path.join(temp_folder, 'kv_cache.txt')
input_data = torch.randn((2, 2, 28, 28))

quant_algo_params = {"act_algo": "hfmg"}
model = LinearNet(quant_algo_params).to(torch.device("cpu"))
model.eval()

ans_2 = model("qat_1", input_data)