---
title: QuantCalibrationOp
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/devaids/amct/atlasamct_16_0128.html
sourcePath: /source/zh/canncommercial/900/devaids/amct/atlasamct_16_0128.html
indexId: 2d668caae20d0561f5db3970fc1d44a8bdfa3385a5d5ae7781b86291ca13464c65
---
# QuantCalibrationOp

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | x |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | x |


注：标记“x”的产品，调用接口不会报错，但是获取不到性能收益。


#### 功能说明

KV Cache量化接口，用于用户构图，在前向传播时，根据用户的量化算法配置调用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算法支持。 | 不支持 | 支持 |


#### 返回值说明

无


#### 调用示例

```
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)

# 保存量化因子的record文件路径
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)
```
