您现在的位置是:首页 >学无止境 >Qairt 量化器 使用手册网站首页学无止境

Qairt 量化器 使用手册

weixin_38498942 2025-03-16 12:01:04
简介Qairt 量化器 使用手册

注意: 此工具仍处于 Beta 发布状态。

qairt-converter 工具将非量化模型转换为非量化的 DLC 文件。量化需要另一步。qairt-quantizer 工具用于将模型量化为支持的定点格式之一。

例如,以下命令将把 Inception v3 DLC 文件转换为量化的 Inception v3 DLC 文件:

$ qairt-quantizer --input_dlc inception_v3.dlc --input_list image_file_list.txt 
                  --output_dlc inception_v3_quantized.dlc

为了正确计算量化参数的范围,需要使用代表性的输入数据集作为输入通过 --input_list 参数传递给 qairt-quantizer。输入列表指定用于量化的原始图像文件的路径。有关 --input_list 的指定,请参考 snpe-net-run 中的 input_list 参数,以获取支持的输入格式(为了计算所有层的输出激活编码信息,请勿包含指定所需输出的行)。

该工具要求在模型转换期间 DLC 输入文件的批次维度设置为 1。通过在初始化期间调整网络,可以将批次维度更改为不同的值以进行推理。

更多细节

  • qairt-quantizer 在主要功能上与 snpe-dlc-quant 相似,但有以下不同之处:

    • 在转换阶段,外部覆盖和源模型编码(QAT)会缓存到浮点 DLC 中,并默认应用。使用命令行参数 “–ignore_encodings” 来忽略覆盖和源模型编码,并使用量化器运行时通过 “–input_list” 提供的校准数据集生成编码。
    • Float_Fallback 特性: 添加了命令行选项 “–float_fallback” 以启用此功能。当指定此命令行选项时,Qairt 量化器通过应用编码覆盖或源模型编码生成完全量化或混合精度图形,跨数据不变操作传播编码,并将缺失的张量回退为浮点数据类型。
      注意: float_fallback 和 input_list 是互斥选项。对于量化器,必须至少提供其中一个。
  • 可以通过以下方式修改 input_list 来为 qairt-quantizer 指定输出:

    #<output_layer_name>[<space><output_layer_name>]
    %<output_tensor_name>[<space><output_tensor_name>]
    <input_layer_name>:=<input_layer_path>[<space><input_layer_name>:=<input_layer_path>]
    

    注意: 输出张量和层可以单独指定,但在同时指定两者时,必须使用所示的顺序来指定每个。

  • qairt-quantizer 还支持使用 AIMET 进行量化,取代默认量化器,当提供 “–use_aimet_quantizer”
    命令行选项时。要使用 AIMET 量化器,请运行设置脚本以创建 AIMET 特定环境,执行以下命令:

    $ source {SNPE_ROOT}/bin/aimet_env_setup.sh --env_path <需要创建 AIMET venv 的路径> 
    	                                        --aimet_sdk_tar <AIMET Torch SDK tarball>
    
  • qairt-quantizer 还支持高级 AIMET 算法 - AdaRound 和 AMP。用户需要通过命令行选项 “–config_file” 提供 YAML 配置文件,并通过 “–algorithms” 指定算法 “adaround” 或 “amp”,同时使用 “–use_aimet_quantizer” 标志。

  • AMP 的 YAML 文件模板如下所示:

    aimet_quantizer:
       datasets:
           <dataset_name>:
               dataloader_callback: '<path/to/unlabled/dataloader/callback/function>'
               dataloader_kwargs: {arg1: val, arg2: val2}
    
       amp:
           dataset: <dataset_name>,
           candidates: [[[8, 'int'], [16, 'int']], [[16, 'float'], [16, 'float']]],
           allowed_accuracy_drop: 0.02
    	   eval_callback_for_phase2: '<path/to/evaluator/callback/function>'
    

dataloader_callback 用于设置返回类型为 torch.DataLoader 的标记数据加载器的回调函数路径。数据应符合源网络输入格式。dataloader_kwargs 是一个可选字典,用户可以通过它提供上述定义的回调函数的关键字参数。dataset 用于指定上述定义的数据集的名称。candidates 是一个包含所有可能的激活和参数位宽值的列表。allowed_accuracy_drop 用于指定与 FP32 基线允许的最大准确度下降。只有在满足允许的准确度下降点时,才绘制帕累托前沿曲线。eval_callback_for_phase2 用于设置评估函数的路径,该函数将预测值批次作为第一个参数,真实值批次作为第二个参数,并返回计算的指标浮点值。

  • AdaRound 的 YAML 文件模板如下所示:

    aimet_quantizer:
        datasets:
            <dataset_name>:
                dataloader_callback: '<path/to/unlabled/dataloader/callback/function>'
                dataloader_kwargs: {arg1: val, arg2: val2}
    
        adaround:
            dataset: <dataset_name>
            num_batches: 1
    

dataloader_callback 用于设置返回类型为 torch.DataLoader 的未标记数据加载器的回调函数路径。数据应符合源网络输入格式。dataloader_kwargs 是一个可选字典,用户可以通过它提供上述定义的回调函数的关键字参数。dataset 用于指定上述定义的数据集的名称。num_batches 用于指定用于 AdaRound 迭代的批次数。

  • AdaRound 还可以在默认模式下运行,无需配置文件,只需在命令行选项 “–algorithms” 中传递 “adaround”,同时使用 “–use_aimet_quantizer” 标志。此流程使用通过 input_list 选项提供的数据来做出取整决策。

    注意:

    1. AIMET Torch Tarball 的命名约定应如下 - aimetpro-release-<VERSION(可选的构建 ID)>.torch-<cpu/gpu>-.*.tar.gz。例如,aimetpro-release-x.xx.x.torch-xxx-release.tar.gz。

    2. 一旦运行设置脚本,请确保 AIMET_ENV_PYTHON 环境变量设置为 <AIMET 虚拟环境路径>/bin/python。

    3. 支持的最低 AIMET 版本为 AIMET-1.33.0。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。