十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CANN AMCT 量化感知训练配置文件参数详解与精度调优指南

CANN AMCT 量化感知训练配置文件参数详解与精度调优指南 CANN AMCT 量化感知训练配置文件参数详解与精度调优指南【免费下载链接】amctAMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。项目地址: https://gitcode.com/cann/amct导读本文系统讲解 CANN AMCT昇腾 AI 处理器亲和的模型压缩工具仓量化感知训练QAT配置文件config.json的全部参数语义、取值约束与推荐配置并给出基于源码的底层机制解读。通过 create_quant_retrain_config 接口自动生成的配置文件在推理精度不满足要求时可依据本文逐项调整version、batch_num、retrain_enable、retrain_data_config、retrain_weight_config及其子参数直至精度收敛。读完本文你将掌握 QAT 配置文件的完整字段体系、ULQ与ARQ两类量化算法的适用场景以及fixed_min、clip_max、clip_min等手动调优参数的正确用法。一、配置文件从哪来接口生成与整体结构量化感知训练配置文件config.json由 create_quant_retrain_config 接口自动生成。该接口会解析模型图结构找出所有可量化层当前支持torch.nn.Linear、torch.nn.Conv2d、torch.nn.ConvTranspose2d并将每层默认的量化配置写入 JSON 文件调用示例import amct_pytorch as amct # 建立待量化的网络图结构 model build_model() model.load_state_dict(torch.load(state_dict_path)) input_data tuple([torch.randn(input_shape)]) # 生成量化配置文件 amct.create_quant_retrain_config(config_file./configs/config.json, modelmodel, input_datainput_data)从源码看入口 quantize_tool.py 会先对模型做ModuleHelper.deep_copy深拷贝、兼容DistributedDataParallel再通过 ONNX 导出解析图结构最后调用RetrainConfig.create_default_retrain_config落盘默认配置。生成的 JSON 文件样例如下{ version:1, batch_num:1, conv1:{ retrain_enable:true, retrain_data_config:{ algo:ulq_quantize, dst_type:INT8 }, retrain_weight_config:{ algo:arq_retrain, channel_wise:true, dst_type:INT8 } }, layer1.0.conv1:{ retrain_enable:true, retrain_data_config:{ algo:ulq_quantize, dst_type:INT8 }, retrain_weight_config:{ algo:arq_retrain, channel_wise:true, dst_type:INT8 } }, fc:{ retrain_enable:true, retrain_data_config:{ algo:ulq_quantize, dst_type:INT8 }, retrain_weight_config:{ algo:arq_retrain, channel_wise:false, dst_type:INT8 } } }从上述样例可见配置文件的整体骨架顶层是version与batch_num两个全局参数每个可量化层以层名为键其值包含retrain_enable、retrain_data_config数据/激活量化配置、retrain_weight_config权重量化配置三个部分。源码 retrain_config_base.py 中对应的字段常量RETRAIN_ENABLE、RETRAIN_DATA_CONFIG、RETRAIN_WEIGHT_CONFIG、BATCH_NUM与 JSON 键名一一对应。注意create_quant_retrain_config每次调用都会覆盖已有配置文件用户手动修改 JSON 时务必确保层名唯一否则会导致配置解析异常。二、全局参数version 与 batch_num1. version配置文件版本号项目说明作用控制量化配置文件版本号类型int取值范围1参数说明目前仅有一个版本号 1推荐配置1必选或可选可选2. batch_num校准数据 batch 数量项目说明作用控制量化感知训练推理阶段使用多少个 batch 的数据类型int取值范围大于 0参数说明如果不配置则使用默认值 1。建议校准集图片数量不超过 50 张根据 batch 的大小 batch_size 计算相应的 batch_num 数值。batch_num * batch_size为量化使用的校准集图片数量其中batch_size为每个 batch 所用的图片数量推荐配置1必选或可选可选batch_num直接决定参与量化参数scale、offset统计的激活数据规模数据量过少会导致统计方差大、量化因子不具代表性数据量过多则拖慢推理校准阶段。实践中建议按校准集图片总数 ≤ 50 张反推例如每个 batch 10 张图片时batch_num配 5 即可。对应地在简易配置文件proto中也有batch_num字段uint32 类型见 qat_config.md。三、层级开关retrain_enable项目说明作用该层是否进行量化感知训练类型bool取值范围true 或 false参数说明true该层需要进行量化感知训练false该层不进行量化感知训练推荐配置true必选或可选可选retrain_enable是逐层粒度per-layer的开关是精度调优最常用的手段之一当发现某层量化后精度损失异常时可先尝试将该层retrain_enable置为false排除影响。源码 retrain_config.py 中的retrain_enable方法会读取该字段若层不在配置中或字段缺失则返回False即该层不做量化感知训练。此外需注意复用层共用 weight 和 bias 参数不支持量化不会出现在配置文件中。四、数据激活量化配置retrain_data_config项目说明作用该层数据量化配置类型object取值范围-参数说明包含如下参数algo量化算法选择默认是 ulq_quantize、clip_max截断量化算法上限默认不选、clip_min截断量化算法下限默认不选、fixed_min截断量化算法最小值固定为 0默认不选、dst_type用以选择 INT8 或 INT4 量化位宽默认为 INT8推荐配置-必选或可选可选该对象仅用于激活数据量化默认算法为ULQ截断上下限量化算法。clip_max、clip_min、fixed_min三个参数与 ULQ 的上下限学习/固定机制紧密相关是手动调优的核心抓手详见第八节。五、权重量化配置retrain_weight_config项目说明作用该层权重量化配置类型object取值范围-参数说明包含如下参数algo量化算法选择默认是 arq_retrain、channel_wise推荐配置-必选或可选可选权重量化默认使用ARQ算法且通过channel_wise控制是否按通道独立量化。仓库源码 custom_op/arq_retrain 与 custom_op/ulq_retrain 目录分别对应 ARQ 与 ULQ 算子在训练图上的实现。六、核心算法选择algo项目说明作用该层选择使用的量化算法类型object取值范围-参数说明ulq_quantizeULQ 截断上下限量化算法arq_retrainARQ 量化算法推荐配置数据量化使用 ulq_quantize权重量化使用 arq_retrain必选或可选可选推荐配置清晰界定了两类算法的分工数据激活量化使用ulq_quantize。ULQ 算法可学习截断上限/下限适合分布范围随输入变化、需在线统计校准的激活张量。权重量化使用arq_retrain。ARQ可参考 algorithm_brief.md 中的 ARQ 权重量化算法章节在训练过程中学习量化步长对静态权重分布更稳健。对应简易配置文件proto中ActULQquantize数据量化仅支持 ULQRetrainWeightQuantConfig则同时提供arq_retrain与ulq_retrain两种权重量化算法详见 qat_config.md说明权重侧算法选择比数据侧更灵活。七、逐通道量化开关channel_wise项目说明作用是否对每个 channel 采用不同的量化因子类型bool取值范围true 或 false参数说明true每个 channel 独立量化量化因子不同false每个 channel 同时量化共享量化因子推荐配置true必选或可选可选channel_wise默认配置为true即每个输出通道使用独立的 scale/offset通常能获得更好的量化精度。从上文 JSON 样例可以看到fc全连接层自动生成时channel_wise为false而卷积层为true——这说明默认配置会根据层类型给出差异化的通道量化策略。源码 retrain_config.py 的get_layer_config会把该字段透传给权重量化参数channel_wise并固定num_bits8、wts_algoarq_quantize与配置文件中当前仅支持 INT8的约束一致。八、手动调优参数fixed_min、clip_max、clip_min以下三个参数对应原文档表 9表 11仅在手动调整量化配置文件时才会使用用于干预 ULQ 数据量化算法的上下限初始化与学习行为。1. fixed_min固定数据量化下限为 0项目说明作用设置数据量化算法下限的开关类型bool取值范围true 或 false参数说明true数据量化算法固定下限并且下限为 0false数据量化算法不固定下限。如果不选此项AMCT 根据图的结构自动设置。如果选择此项并且网络模型量化层的前一层是 relu 层则该参数需要手动设置为 true如果为非 relu 层则要手动设置为 false推荐配置不选此项必选或可选可选fixed_min的语义非常直观ReLU 激活函数的输出恒为非负其数据分布下限天然为 0因此量化下限固定为 0 既准确又能减少一个待学习参数若量化层的前一层是 ReLU 且不设置fixed_mintrue算法可能学习出负的、不符合实际分布的下限。简易配置文件proto中的描述与此一致默认 ReLU 后为 true其他为 false见 qat_config.md。2. clip_max固定截断上限项目说明作用数据量化算法上限类型float取值范围clip_max 0。根据不同层 activation 的数据分布找到最大值 max推荐取值范围为0.3*max ~ 1.7*max参数说明截断上下限数据量化算法如果选择此项则固定算法截断上限。如果不选此项通过 ifmr 算法学习获取上限推荐配置不选此项必选或可选可选3. clip_min固定截断下限项目说明作用数据量化算法下限类型float取值范围clip_min 0。根据不同层 activation 的数据分布找到最小值 min推荐取值范围为0.3*min ~ 1.7*min参数说明截断上下限数据量化算法如果选择此项则固定算法截断下限。如果不选此项通过 ifmr 算法学习获取下限推荐配置不选此项必选或可选可选clip_max与clip_min成对使用将 ULQ 算法的上下限从训练中学习改为直接固定适用于两类典型场景已知激活分布通过观察各层 activation 的真实数据分布得到 max/min将上下限固定为 0.3~1.7 倍范围内可避免极端离群值干扰量化因子计算加速收敛省略 ifmr迭代式上下限学习初始化过程让训练直接从更合理的截断点出发。需要强调的是固定的上下限会直接参与缩放因子scale计算并在其基础上做训练调优因此建议初始值与实际推理数据的上下限保持一致性否则可能导致量化后精度较差。对应简易配置文件中的ClipMaxMin结构clip_max、clip_min均为必填 float 字段含义相同见 qat_config.md。九、量化位宽dst_type项目说明作用量化类型类型string取值范围INT8 或 INT4默认为 INT8。当前版本仅支持 INT8参数说明量化时用于选择是 INT8 量化还是 INT4 量化推荐配置-必选或可选可选dst_type同时出现在retrain_data_config与retrain_weight_config中用于分别指定数据与权重的量化位宽。当前版本仅支持 INT8 量化配置为 INT4 时无法生效源码 retrain_config.py 中get_layer_config固定num_bits8也印证了这一点。在简易配置文件proto中DataType枚举虽然列出了 INT4/INT8/INT16但同样注明当前版本仅支持 INT8 量化见 qat_config.md。十、精度不达标时的调优路径当使用默认配置生成的 QAT 模型推理精度不满足要求时建议按以下顺序迭代调整config.json检查校准数据规模确认batch_num * batch_size校准集图片总数是否过小建议校准集图片数量不超过 50 张且统计充分适当增大batch_num并重新执行量化感知训练推理阶段定位敏感层将疑似问题层retrain_enable置为false逐个排除判断精度损失来源干预数据上下限对敏感层设置clip_max/clip_min参考各层 activation 实际分布的 0.3~1.7 倍范围或依据前层是否为 ReLU 正确设置fixed_min调整通道量化粒度权重量化通道敏感时将retrain_weight_config.channel_wise在true/false间切换对比核对层名校验所有手工修改务必保证层名与生成文件中的键完全一致且唯一否则配置在 parse_retrain_config 解析阶段GraphChecker.check_quant_behaviours即会报错。十一、与简易配置文件proto的关系除config.json外AMCT 还支持通过retrain_config_pytorch.proto生成量化感知训练简易配置文件quant.cfg该文件可作为create_quant_retrain_config的config_defination入参。两者的参数体系高度对应config.json 字段proto 对应结构batch_numAMCTRetrainConfig.batch_numuint32retrain_data_config.algoulq_quantizeRetrainDataQuantConfig.ulq_quantizeActULQquantizeretrain_data_config.clip_max / clip_minActULQquantize.clip_max_minClipMaxMinretrain_data_config.fixed_minActULQquantize.fixed_minboolretrain_data_config.dst_typeActULQquantize.dst_typeDataTyperetrain_weight_config.algoarq_retrainRetrainWeightQuantConfig.arq_retrainARQRetrainretrain_weight_config.channel_wiseARQRetrain.channel_wiseboolretrain_weight_config.dst_typeARQRetrain.dst_typeDataType简易配置还额外提供了按层名/按层类型跳过量化skip_layers、quant_skip_layers等与逐层重写override_layer_configs、override_layer_types等全局配置能力其参数优先级为override_layer_configs override_layer_types retrain_data_quant_config/retrain_weight_quant_config完整说明与样例请参见 量化感知训练简易配置文件。小结量化感知训练配置文件的调优本质是对ULQ数据侧与ARQ权重侧两类量化算法在学习与固定之间做取舍batch_num决定统计样本量retrain_enable决定逐层开关channel_wise决定权重通道粒度clip_max/clip_min/fixed_min决定激活上下限的来源ifmr 学习或手动固定dst_type决定位宽当前仅支持 INT8。按文中顺序逐项排查与调整即可在精度与压缩率之间找到满足业务要求的平衡点。【免费下载链接】amctAMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。项目地址: https://gitcode.com/cann/amct创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表