使用 vai_q_onnx API 执行量化 - 3.5 简体中文

Vitis AI 用户指南 (UG1414)

Document ID
UG1414
Release Date
2023-09-28
Version
3.5 简体中文

静态量化方法首先使用一组称为校准数据的输入来运行模型。在这些运行期间,会为每次激活计算量化参数。这些量化参数作为常量写入量化模型并用于所有输入。

Vai_q_onnx 量化工具已将校准方法扩展至 2 的幂值比例/浮点比例量化方法。浮点比例量化方法包括 MinMax、Entropy 和 Percentile。2 的幂值比例量化方法包括 MinMax 和 MinMSE:


import vai_q_onnx

vai_q_onnx.quantize_static(
    model_input,
    model_output,
    calibration_data_reader,
    quant_format=vai_q_onnx.VitisQuantFormat.FixNeuron,
    calibrate_method=vai_q_onnx.PowerOfTwoMethod.MinMSE,
    input_nodes=[],
    output_nodes=[],
    extra_options=None,)
model_input
要量化的模型的文件路径。
model_output
已量化的模型的文件路径。
calibration_data_reader
校准数据读取器。它用于枚举校准数据并为原始模型生成输入。
quant_format
  • QOperator:利用已量化的运算符直接量化该模型。
  • QDQ:通过在张量上插入 QuantizeLinear/DeQuantizeLinear 来量化该模型。仅支持 8 位量化。
  • VitisQuantFormat.QDQ:通过在张量上插入 VAIQuantizeLinear/VAIDeQuantizeLinear 来量化该模型。支持更大位宽和更多配置。
  • VitisQuantFormat.FixNeuron:通过在张量上插入 FixNeuron(QuantizeLinear 与 DeQuantizeLinear 组合)来量化该模型。
calibrate_method
对于 DPU 器件,请将 calibrate_method 设为 vai_q_onnx.PowerOfTwoMethod.NonOverflow 或 vai_q_onnx.PowerOfTwoMethod.MinMSE 以便应用 2 的幂值比例量化。PowerOfTwoMethod 当前支持两种方法:MinMSE 和 NonOverflow。默认方法是 MinMSE。
input_nodes
list(string) 对象。要量化的起始节点的名称。模型中位于这些起始节点之前的节点不进行最优化或量化。例如,此实参可用于跳过某些预处理节点或停止量化第一个节点。默认值为 []。
output_nodes
list(string) 对象。要量化的结束节点的名称。模型中位于这些节点之后的节点不进行最优化或量化。例如,此实参可用于跳过某些后处理节点或停止量化最后一个节点。默认值为 []。