vai_q_onnx 用法 - 3.5 简体中文

Vitis AI 用户指南 (UG1414)

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

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=[],
    op_types_to_quantize=None,
    per_channel=False,
    reduce_range=False,
    activation_type=QuantType.QInt8,
    weight_type=QuantType.QInt8,
    nodes_to_quantize=None,
    nodes_to_exclude=None,
    optimize_model=True,
    use_external_data_format=False,
    calibrate_method=CalibrationMethod.MinMax,
    extra_options=None)

实参

model_input
要量化的模型的文件路径。
model_output
已量化的模型的文件路径。
calibration_data_reader
校准数据读取器。它用于枚举校准数据并为原始模型生成输入。要使用随机数据进行快速测试,可将 calibration_data_reader 设为 None。
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) 对象。要量化的结束节点的名称。模型中位于这些节点之后的节点不进行最优化或量化。例如,此实参可跳过某些后处理节点或停止量化最后一个节点。默认值为 []。
op_types_to_quantize
指定要量化的运算符的类型,例如,指定 ['Conv'] 表示仅量化 Conv。默认情况下,它会量化所有受支持的运算符。
per_channel
按通道量化权重。DPU 当前不支持逐通道量化,因此对于 DPU,此项必须设为 False。
reduce_range
量化含 7 位的权重。DPU 不支持 reduce_range,因此对于 DPU,此项必须设置为 False。
weight_type
权重的量化数据类型。对于 DPU,此项必须设置为 QuantType.QInt8。如需了解有关数据类型选择的更多详细信息,请参阅 https://onnxruntime.ai/docs/performance/quantization.html
nodes_to_quantize
要量化的节点的名称列表。仅当该列表为“None”时,才量化其中的节点。
nodes_to_exclude
要排除的节点的名称列表。如果此项值为 None,那么量化时会排除此列表中的节点。
optimize_model
模型量化前先执行最优化的操作即将被弃用。不建议执行此操作,因为最优化会更改计算图,导致难以对量化损失进行调试。
use_external_data_format
该选项用于大小较大 (>2 GB) 的模型。默认值为 False。
extra_options
此键值对词典适用于不同场景下的各种选项。目前使用的配对:
ActivationSymmetric
对用于激活的校准数据加以对称处理(默认设为 False)。如果采用 PowerOfTwoMethod calibrate_method,那么应始终将 ActivationSymmetric 设为 True。
WeightSymmetric
对用于权重的校准数据加以对称处理(默认值为 True)。如果采用 PowerOfTwoMethod calibrate_method,那么应始终将 WeightSymmetric 设为 True。
ForceQuantizeNoInputCheck
默认情况下,诸如 maxpool 和 transpose 等隐性运算符的输入如果尚未量化,那么这些运算符就不会执行量化。将此项设为 True 即可强制此类运算符始终量化输入,生成量化输出。并且,可使用 nodes_to_exclude 来按节点禁用 True 行为。
MatMulConstBOnly
默认值为 False,表示静态模式。如果启用此项,那么仅对含 const B 的 MatMul 执行量化。
AddQDQPairToWeight
默认值为 False,表示量化浮点权重,并将其馈送给单独插入的 DeQuantizeLinear 节点。如果设为 True,那么它会保留浮点权重,并将 QuantizeLinear/DeQuantizeLinear 节点插入权重。如果采用 PowerOfTwoMethod calibrate_method,那么 QDQ 应始终成对显示。因此,您需将成对 qdq 添加到权重,并且它应始终将 AddQDQPairToWeight 设为 True。