下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

手工调优

执行完量化后,精度如果不满足要求,可以尝试手动调整config.json文件中的参数,本节给出调整的原则,以及参数解释。

调优流程

通过create_quant_config_ascend接口生成的config.json文件中的默认配置进行量化,若量化后的推理精度不满足要求,则按照如下步骤调整量化配置文件中的参数。

  1. 根据create_quant_config_ascend接口生成的默认配置进行量化。若精度满足要求,则调参结束,否则进行下一步。
  2. 手动修改quant_enable,跳过量化某些层。

    quant_enable可以指定该层是否量化,取值为true时量化该层,取值为false时不量化该层,将该层的配置删除也可跳过该层量化。

    在整网精度不达标的时候需要识别出网络中的量化敏感层(量化后误差显著增大),然后取消对量化敏感层的量化动作,识别量化敏感层有两种方法:

    1. 依据网络模型结构,一般网络中首层、尾层以及参数量偏少的层,量化后精度会有较大的下降。
    2. 通过精度比对工具,逐层比对原始模型和量化后模型输出误差(例如以余弦相似度作为标准,需要相似度达到0.99以上),找到误差较大的层,优先对其进行回退。
  3. 若按照2中的量化配置进行量化后,精度满足要求,则调参结束,否则进行4
  4. 手动修改activation_quant_params和weight_quant_params,调整量化算法及参数:

    算法参数的意义请分别参见IFMR数据量化算法ARQ权重量化算法

  5. 若按照4中的量化配置进行量化后,精度满足要求,则调参结束,否则表明量化对精度影响很大,不能进行量化,去除量化配置。
图1 调参流程

量化配置文件

如果通过create_quant_config_ascend接口生成的config_ascend.json量化配置文件,推理精度不满足要求,则需要参见该章节不断调整config_ascend.json文件中的内容,直至精度满足要求,该文件部分内容样例如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{
    "version":1,
    "activation_offset":true,
    "do_fusion":true,
    "skip_fusion_layers":[],
    "MobilenetV2/Conv/Conv2D":{
        "quant_enable":true,
        "activation_quant_params":{
            "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":{
            "wts_algo":"arq_quantize",
            "channel_wise":true
        }
    },
    "MobilenetV2/Conv_1/Conv2D":{
        "quant_enable":true,
        "activation_quant_params":{
            "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":{
            "wts_algo":"arq_quantize",
            "channel_wise":true
        }
    }
}

参数说明

配置文件中参数说明如下:

表1 version参数说明

作用

控制量化配置文件版本号。

类型

int

取值范围

1

参数说明

目前仅有一个版本号1。

推荐配置

1

可选或者必选

可选

表2 activation_offset参数说明

作用

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

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

类型

bool

取值范围

true或false

参数说明

  • true:数据量化时为非对称量化。
  • false:数据量化时为对称量化。

推荐配置

true

必选或可选

可选

表3 do_fusion参数说明

作用

是否开启融合功能。

类型

bool

取值范围

true或false

参数说明

  • true:开启融合功能。
  • false:不开启融合功能。

当前支持融合的层以及融合规则请参见工具实现的融合功能

推荐配置

true

可选或必选

可选

表4 skip_fusion_layers参数说明

作用

跳过bn融合的层。

类型

string

取值范围

可融合层的层名。

当前支持融合的层以及融合规则请参见工具实现的融合功能

参数说明

不需要做融合的层。

推荐配置

-

可选或必选

可选

表5 layer_config参数说明

作用

指定某个网络层的量化配置。

类型

object

取值范围

-

参数说明

参数内部包含如下参数:

  • quant_enable
  • activation_quant_params
  • weight_quant_params

推荐配置

-

必选或可选

可选

表6 quant_enable参数说明

作用

该层是否做量化。

类型

bool

取值范围

true或false

参数说明

  • true:量化该层
  • false:不量化该层。

推荐配置

true

必选或可选

可选

表7 activation_quant_params参数说明

作用

该层数据量化的参数。

类型

object

取值范围

-

参数说明

activation_quant_params内部包含如下参数:
  • max_percentile
  • min_percentile
  • search_range
  • search_step
  • act_algo
  • asymmetric

推荐配置

-

必选或可选

可选

表8 weight_quant_params参数说明

作用

该层权重量化的参数。

类型

object

取值范围

-

参数说明

均匀量化场景,包括如下参数:

  • wts_algo
  • channel_wise

推荐配置

-

必选或可选

可选

表9 act_algo参数说明

作用

数据量化算法。

类型

string

取值范围

ifmr

参数说明

当前仅支持IFMR数据量化算法

推荐配置

-

必选或可选

可选

表10 asymmetric参数说明

作用

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

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

类型

bool

取值范围

true或false

参数说明

  • true:数据量化时为非对称量化。
  • false:数据量化时为对称量化。

推荐配置

true

必选或可选

可选

表11 max_percentile参数说明

作用

最大值搜索位置

类型

float

取值范围

(0.5,1]

参数说明

在从大到小排序的一组数中,决定取第多少大的数,比如有100个数,1.0表示取第100-100*1.0=0,对应的就是第一个大的数。

对待量化的数据做截断处理时,该值越大,说明截断的上边界越接近待量化数据的最大值。

推荐配置

0.999999

必选或可选

可选

表12 min_percentile参数说明

作用

最小值搜索位置

类型

float

取值范围

(0.5,1]

参数说明

在从小到大排序的一组数中,决定取第多少小的数,比如有100个数,1.0表示取第100-100*1.0=0,对应的就是第一个小的数。

对待量化的数据做截断处理时,该值越大,说明截断的下边界越接近待量化数据的最小值。

推荐配置

0.999999

必选或可选

可选

表13 search_range参数说明

作用

控制量化因子的搜索范围[search_range_start, search_range_end]。

类型

list,列表中两个元素类型为float。

取值范围

0<search_range_start<search_range_end

参数说明

控制截断的上边界的浮动范围。

  • search_range_start:决定搜索开始的位置
  • search_range_end:决定搜索结束的位置

推荐配置

[0.7,1.3]

必选或可选

可选

表14 search_step参数说明

作用

控制量化因子的搜索步长。

类型

float

取值范围

(0, (search_range_end-search_range_start)]

参数说明

控制截断的上边界的浮动范围步长,值越小,浮动步长越小。

推荐配置

0.01

必选或可选

可选

表15 wts_algo参数说明

作用

权重量化算法。

类型

string

取值范围

arq_quantize

参数说明

基础权重量化取值:arq_quantize

推荐配置

-

必选或可选

可选

表16 channel_wise搜索相关参数说明

作用

是否对每个channel采用不同的量化因子。

类型

bool

取值范围

true或false

参数说明

  • true:每个channel独立量化,量化因子不同。
  • false:所有channel同时量化,共享量化因子。

推荐配置

true

必选或可选

可选

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词