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。