(可选)浮点模型预处理 - 3.5 简体中文

Vitis AI 用户指南 (UG1414)

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

对 float32 模型进行预处理即对该模型进行变换,使其做好量化准备。其中包含以下 3 个可选步骤:

  • 符号形状推断:此步骤最适合 Transformer 模型。
  • 模型最优化:此步骤使用 ONNX Runtime 原生库来重写计算图,包括合并计算节点和消除冗余以改善运行时效率。
  • ONNX 形状推断。

这些步骤的主对象是增强量化质量。张量形状已知时,ONNX Runtime 量化工具执行性能最佳。符号形状推断和 ONNX 形状推断对于明确张量形状都同样至关重要。符号形状推断对于基于 Transformer 的模型特别有效,而 ONNX 形状推断则适合其他模型。

模型最优化会执行某些运算符融合,以简化量化工具的工作。例如,在最优化期间,Convolution 运算符后接 BatchNormalization 可融合为一,从而实现有效量化。

ONNX Runtime 存在如下已知问题:模型最优化无法输出大小超过 2 GB 的模型。因此,对于大型模型,必须跳过最优化。

预处理 API 可在 quant_pre_process() 函数的 onnxruntime.quantization.shape_inference Python 模块中找到:

from onnxruntime.quantization import shape_inference

shape_inference.quant_pre_process(
    input_model_path: str,
    output_model_path: str,
    skip_optimization: bool = False,
    skip_onnx_shape: bool = False,
    skip_symbolic_shape: bool = False,
    auto_merge: bool = False,
    int_max: int = 2**31 - 1,
    guess_output_rank: bool = False,
    verbose: int = 0,
    save_as_external_data: bool = False,
    all_tensors_to_one_file: bool = False,
    external_data_location: str = "./",
    external_data_size_threshold: int = 1024,)
 
input_model_path
输入模型文件的路径。
output_model_path
输出模型文件的路径。
skip_optimization
如果此项设为 true,则跳过模型最优化步骤。对于某些模型,这可能导致 ONNX 形状推断失败。
skip_onnx_shape
跳过 ONNX 形状推断。符号形状推断对于基于 Transformer 的模型最有效。跳过所有形状推断可能降低量化有效性,因为含有未知形状的张量无法进行量化。
skip_symbolic_shape
跳过符号形状推断。符号形状推断对于基于 Transformer 的模型最有效。跳过所有形状推断可能降低量化有效性,因为含有未知形状的张量无法进行量化。
auto_merge
适用于符号形状推断。发生冲突时会自动合并符号维度。
int_max
对于符号形状推断,指定最大值,这样对于诸如 slice 等运算符,即可将整数作为无边界来处理。
guess_output_rank
对于未知运算符,猜测输出等级与输入 0 相同。
verbose
记录推断的详细信息。选项包括 0:关闭,1:警告,3:详细。
save_as_external_data
将 ONNX 模型保存到外部数据。
all_tensors_to_one_file
将所有外部数据都保存到单个文件。
external_data_location
用于保存外部文件的文件位置。
external_data_size_threshold
外部数据的大小阈值。