静态量化方法首先使用一组称为校准数据的输入来运行模型。在这些运行期间,会为每次激活计算量化参数。这些量化参数作为常量写入量化模型并用于所有输入。
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) 对象。要量化的结束节点的名称。模型中位于这些节点之后的节点不进行最优化或量化。例如,此实参可用于跳过某些后处理节点或停止量化最后一个节点。默认值为 []。