Optimum 文档

配置

您正在查看 main 版本,该版本需要从源代码安装。如果您想使用常规 pip 安装,请查看最新的稳定版本 (v1.23.1)。
Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

配置

配置类是指定任务应如何完成的方式。ONNX Runtime 包支持两个任务

  1. 优化:由 ORTOptimizer 执行,此任务可以使用 OptimizationConfig 进行调整。

  2. 量化:由 ORTQuantizer 执行,可以使用 QuantizationConfig 设置量化。在某些情况下(训练后静态量化)需要校准步骤,可以使用 CalibrationConfig 指定。

OptimizationConfig

class optimum.onnxruntime.OptimizationConfig

< >

( optimization_level: int = 1 optimize_for_gpu: bool = False fp16: bool = False optimize_with_onnxruntime_only: typing.Optional[bool] = None enable_transformers_specific_optimizations: bool = True disable_gelu: typing.Optional[bool] = None disable_gelu_fusion: bool = False disable_layer_norm: typing.Optional[bool] = None disable_layer_norm_fusion: bool = False disable_attention: typing.Optional[bool] = None disable_attention_fusion: bool = False disable_skip_layer_norm: typing.Optional[bool] = None disable_skip_layer_norm_fusion: bool = False disable_bias_skip_layer_norm: typing.Optional[bool] = None disable_bias_skip_layer_norm_fusion: bool = False disable_bias_gelu: typing.Optional[bool] = None disable_bias_gelu_fusion: bool = False disable_embed_layer_norm: bool = True disable_embed_layer_norm_fusion: bool = True enable_gelu_approximation: bool = False use_mask_index: bool = False no_attention_mask: bool = False disable_shape_inference: bool = False use_multi_head_attention: bool = False enable_gemm_fast_gelu_fusion: bool = False use_raw_attention_mask: bool = False disable_group_norm_fusion: bool = True disable_packed_kv: bool = True disable_rotary_embeddings: bool = False )

参数

  • optimization_level (int, 默认为 1) — ONNX Runtime 对加载的图执行的优化级别。支持的优化级别为 0、1、2 和 99。
    • 0:将禁用所有优化
    • 1:将启用基本优化
    • 2:将启用基本和扩展优化,包括应用于分配给 CPU 或 CUDA 执行提供程序的节点的复杂节点融合,使生成的优化图依赖于硬件
    • 99:将启用所有可用的优化,包括布局优化
  • optimize_for_gpu (bool, 默认为 False) — 是否针对 GPU 推理优化模型。当 optimization_level > 1 时,优化后的图可能仅包含 GPU 或 CPU 的运算符。
  • fp16 (bool, 默认为 False) — 是否应将所有权重和节点从 float32 转换为 float16。
  • enable_transformers_specific_optimizations (bool, 默认为 True) — 是否仅在 ONNX Runtime 常规优化之上使用 transformers 特定的优化。
  • disable_gelu_fusion (bool, 默认为 False) — 是否禁用 Gelu 融合。
  • disable_layer_norm_fusion (bool, 默认为 False) — 是否禁用层归一化融合。
  • disable_attention_fusion (bool, 默认为 False) — 是否禁用 Attention 融合。
  • disable_skip_layer_norm_fusion (bool, 默认为 False) — 是否禁用 SkipLayerNormalization 融合。
  • disable_bias_skip_layer_norm_fusion (bool, 默认为 False) — 是否禁用添加 Bias 和 SkipLayerNormalization 融合。
  • disable_bias_gelu_fusion (bool, 默认为 False) — 是否禁用添加 Bias 和 Gelu / FastGelu 融合。
  • disable_embed_layer_norm_fusion (bool, 默认为 True) — 是否禁用 EmbedLayerNormalization 融合。默认值设置为 True,因为此融合与 ONNX Runtime 量化不兼容。
  • enable_gelu_approximation (bool, 默认为 False) — 是否启用 Gelu / BiasGelu 到 FastGelu 的转换。默认值设置为 False,因为此近似可能会略微影响模型的准确性。
  • use_mask_index (bool, 默认为 False) — 是否在 attention 运算符中使用掩码索引而不是原始 attention 掩码。
  • no_attention_mask (bool, 默认为 False) — 是否不使用 attention 掩码。仅适用于 bert 模型类型。
  • disable_embed_layer_norm (bool, 默认为 True) — 是否禁用 EmbedLayerNormalization 融合。默认值设置为 True,因为此融合与 ONNX Runtime 量化不兼容
  • disable_shape_inference (bool, 默认为 False) — 是否禁用符号形状推断。默认值设置为 False,但符号形状推断有时可能会导致问题。
  • use_multi_head_attention (bool, 默认为 False) — 实验性参数。使用 MultiHeadAttention 而不是 Attention 运算符,后者合并了 Q/K/V 投影的权重,在某些情况下可能会更快,因为 3 个 MatMul 合并为一个。” “请注意,当 qkv 未打包时,MultiHeadAttention 可能比 Attention 慢。”
  • enable_gemm_fast_gelu_fusion (bool, 默认为 False) — 启用 GemmfastGelu 融合。
  • use_raw_attention_mask (bool, 默认为 False) — 使用原始 attention 掩码。如果您的输入不是右侧填充,请使用此选项。这可能会停用融合的 attention 并导致性能下降。
  • disable_group_norm_fusion (bool, 默认为 True) — 不要融合 GroupNorm。仅适用于 model_type=unet。
  • disable_packed_kv (bool, 默认值为 True) — 在交叉注意力中不使用 packed kv。仅适用于 model_type=unet。
  • disable_rotary_embeddings (bool, 默认值为 False) — 是否禁用 Rotary Embedding 融合。

OptimizationConfig 是处理所有 ONNX Runtime 优化参数的配置类。这里有两类优化堆栈:

  1. ONNX Runtime 通用优化工具:它可以处理任何 ONNX 模型。
  2. ONNX Runtime transformers 优化工具:它仅可处理 transformers 模型的一个子集。

class optimum.onnxruntime.AutoOptimizationConfig

< >

( )

用于创建通用 OptimizationConfig 的工厂。

O1

< >

( for_gpu: bool = False **kwargs ) OptimizationConfig

参数

  • for_gpu (bool, 默认值为 False) — 模型是否将在 GPU 上运行以进行优化,某些优化取决于模型将在其上运行的硬件。仅当 optimization_level > 1 时才需要。
  • kwargs (Dict[str, Any]) — 提供给 ~OptimizationConfig 构造函数的参数。

返回值

OptimizationConfig

与 O1 优化级别对应的 OptimizationConfig

创建 O1 ~OptimizationConfig

O2

< >

( for_gpu: bool = False **kwargs ) OptimizationConfig

参数

  • for_gpu (bool, 默认值为 False) — 模型是否将在 GPU 上运行以进行优化,某些优化取决于模型将在其上运行的硬件。仅当 optimization_level > 1 时才需要。
  • kwargs (Dict[str, Any]) — 提供给 ~OptimizationConfig 构造函数的参数。

返回值

OptimizationConfig

与 O2 优化级别对应的 OptimizationConfig

创建 O2 ~OptimizationConfig

O3

< >

( for_gpu: bool = False **kwargs ) OptimizationConfig

参数

  • for_gpu (bool, 默认值为 False) — 模型是否将在 GPU 上运行以进行优化,某些优化取决于模型将在其上运行的硬件。仅当 optimization_level > 1 时才需要。
  • kwargs (Dict[str, Any]) — 提供给 ~OptimizationConfig 构造函数的参数。

返回值

OptimizationConfig

与 O3 优化级别对应的 OptimizationConfig

创建 O3 ~OptimizationConfig

O4

< >

( for_gpu: bool = True **kwargs ) OptimizationConfig

参数

  • for_gpu (bool, 默认值为 False) — 模型是否将在 GPU 上运行以进行优化,某些优化取决于模型将在其上运行的硬件。仅当 optimization_level > 1 时才需要。
  • kwargs (Dict[str, Any]) — 提供给 ~OptimizationConfig 构造函数的参数。

返回值

OptimizationConfig

与 O4 优化级别对应的 OptimizationConfig

创建 O4 ~OptimizationConfig

with_optimization_level

< >

( optimization_level: str for_gpu: bool = False **kwargs ) OptimizationConfig

参数

  • optimization_level (str) — 优化级别,允许的值如下:
    • O1:基本通用优化
    • O2:基本和扩展通用优化,transformers-specific 融合。
    • O3:与 O2 相同,但使用 Fast Gelu 近似。
    • O4:与 O3 相同,但使用混合精度。
  • for_gpu (bool, 默认值为 False) — 模型是否将在 GPU 上运行以进行优化,某些优化取决于模型将在其上运行的硬件。仅当 optimization_level > 1 时才需要。
  • kwargs (Dict[str, Any]) — 提供给 ~OptimizationConfig 构造函数的参数。

返回值

OptimizationConfig

与请求的优化级别对应的 OptimizationConfig

使用根据优化级别预定义的参数创建 ~OptimizationConfig

QuantizationConfig

class optimum.onnxruntime.QuantizationConfig

< >

( is_static: bool format: QuantFormat mode: QuantizationMode = <QuantizationMode.QLinearOps: 1> activations_dtype: QuantType = <QuantType.QUInt8: 1> activations_symmetric: bool = False weights_dtype: QuantType = <QuantType.QInt8: 0> weights_symmetric: bool = True per_channel: bool = False reduce_range: bool = False nodes_to_quantize: typing.List[str] = <factory> nodes_to_exclude: typing.List[str] = <factory> operators_to_quantize: typing.List[str] = <factory> qdq_add_pair_to_weight: bool = False qdq_dedicated_pair: bool = False qdq_op_type_per_channel_support_to_axis: typing.Dict[str, int] = <factory> )

参数

  • is_static (bool) — 是否应用静态量化或动态量化。
  • format (QuantFormat) — 目标 ONNX Runtime 量化表示格式。对于面向算子的 (QOperator) 格式,所有量化的算子都有其自己的 ONNX 定义。对于面向张量的 (QDQ) 格式,模型通过插入 QuantizeLinear / DeQuantizeLinear 算子进行量化。
  • mode (QuantizationMode, 默认值为 QuantizationMode.QLinearOps) — 目标 ONNX Runtime 量化模式,默认值为 QLinearOps 以匹配 QDQ 格式。当以动态量化模式为目标时,默认值为 QuantizationMode.IntegerOps,而静态量化模式的默认值为 QuantizationMode.QLinearOps
  • activations_dtype (QuantType, 默认值为 QuantType.QUInt8) — 用于激活量化的数据类型。
  • activations_symmetric (bool, defaults to False) — 是否对激活函数应用对称量化。
  • weights_dtype (QuantType, defaults to QuantType.QInt8) — 用于权重量化的数据类型。
  • weights_symmetric (bool, defaults to True) — 是否对权重应用对称量化。
  • per_channel (bool, defaults to False) — 是否应按通道(也称为“逐行”)进行量化。 启用此功能可以提高整体准确性,同时使量化模型更重。
  • reduce_range (bool, defaults to False) — 是否使用缩减范围的 7 位整数而不是 8 位整数。
  • nodes_to_quantize (List[str], defaults to []) — 要量化的节点名称列表。 如果未指定,将量化所有节点。 如果为空,则将量化来自 operators_to_quantize 的所有运算符的节点。
  • nodes_to_exclude (List[str], defaults to []) — 应用量化时要排除的节点名称列表。 模型中的节点列表可以通过加载 ONNX 模型 (使用 onnx.load) 找到,或者通过使用 netron 进行可视化检查找到。
  • operators_to_quantize (List[str]) — 要量化的运算符类型列表。 默认为给定量化模式和格式的所有可量化运算符。 可量化运算符可以在 https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/python/tools/quantization/registry.py 中找到。
  • qdq_add_pair_to_weight (bool, defaults to False) — 默认情况下,浮点权重被量化并馈送到唯一插入的 DeQuantizeLinear 节点。 如果设置为 True,则浮点权重将保留,并且将同时插入 QuantizeLinear / DeQuantizeLinear 节点。
  • qdq_dedicated_pair (bool, defaults to False) — 插入 QDQ 对时,多个节点可以共享单个 QDQ 对作为其输入。 如果为 True,它将为每个节点创建一个相同且专用的 QDQ 对。
  • qdq_op_type_per_channel_support_to_axis (Dict[str, int]) — 设置特定运算符类型的通道轴。 仅当支持逐通道量化并将 per_channel 设置为 True 时才有效。

QuantizationConfig 是处理所有 ONNX Runtime 量化参数的配置类。

AutoQuantizationConfig

class optimum.onnxruntime.AutoQuantizationConfig

< >

( )

arm64

< >

( is_static: bool use_symmetric_activations: bool = False use_symmetric_weights: bool = True per_channel: bool = True nodes_to_quantize: typing.Optional[typing.List[str]] = None nodes_to_exclude: typing.Optional[typing.List[str]] = None operators_to_quantize: typing.Optional[typing.List[str]] = None )

参数

  • is_static (bool) — 布尔标志,指示我们是否以静态或动态量化为目标。
  • use_symmetric_activations (bool, defaults to False) — 是否对激活函数使用对称量化。
  • use_symmetric_weights (bool, defaults to True) — 是否对权重使用对称量化。
  • per_channel (bool, defaults to True) — 是否应按通道(也称为“逐行”)进行量化。 启用此功能可以提高整体准确性,同时使量化模型更重。
  • nodes_to_quantize (Optional[List[str]], defaults to None) — 要量化的特定节点。 如果为 None,则将量化来自 operators_to_quantize 的所有运算符的节点。
  • nodes_to_exclude (Optional[List[str]], defaults to None) — 要从量化中排除的特定节点。 模型中的节点列表可以通过加载 ONNX 模型 (使用 onnx.load) 找到,或者通过使用 netron 进行可视化检查找到。
  • operators_to_quantize (Optional[List[str]], defaults to None) — 要对其执行量化的节点类型。 默认情况下,将量化所有可量化的运算符。 可量化运算符可以在 https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/python/tools/quantization/registry.py 中找到。

创建适合 ARM64 的 QuantizationConfig

avx2

< >

( is_static: bool use_symmetric_activations: bool = False use_symmetric_weights: bool = True per_channel: bool = True reduce_range: bool = False nodes_to_quantize: typing.Optional[typing.List[str]] = None nodes_to_exclude: typing.Optional[typing.List[str]] = None operators_to_quantize: typing.Optional[typing.List[str]] = None )

参数

  • is_static (bool) — 布尔标志,指示我们是否以静态或动态量化为目标。
  • use_symmetric_activations (bool, defaults to False) — 是否对激活函数使用对称量化。
  • use_symmetric_weights (bool, defaults to True) — 是否对权重使用对称量化。
  • per_channel (bool, defaults to True) — 是否应按通道(也称为“逐行”)进行量化。 启用此功能可以提高整体准确性,同时使量化模型更重。
  • reduce_range (bool, 默认为 False) — 指示是否使用 8 位整数 (False) 或 缩减范围的 7 位整数 (True)。 作为基线,始终建议先使用全范围 (reduce_range = False) 进行测试,然后,如果精度下降明显,则尝试使用缩减范围 (reduce_range = True)。 当调用 VPMADDUBSW 指令时,使用 AVX512 (非 VNNI) 的 Intel CPU 可能会遇到饱和问题。 为了解决这个问题,应该使用 7 位而不是 8 位整数。
  • nodes_to_quantize (Optional[List[str]], 默认为 None) — 要量化的特定节点。 如果为 None,则将量化来自 operators_to_quantize 的所有运算符的节点。
  • nodes_to_exclude (Optional[List[str]], 默认为 None) — 从量化中排除的特定节点。 模型中的节点列表可以通过加载 ONNX 模型 (使用 onnx.load) 找到,或者通过使用 netron 进行可视化检查找到。
  • operators_to_quantize (Optional[List[str]], 默认为 None) — 要对其执行量化的节点类型。 默认情况下,将量化所有可量化的运算符。 可量化的运算符可以在 https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/python/tools/quantization/registry.py 中找到。

创建一个适用于具有 AVX2 指令集的 CPU 的 QuantizationConfig

avx512

< >

( is_static: bool use_symmetric_activations: bool = False use_symmetric_weights: bool = True per_channel: bool = True reduce_range: bool = False nodes_to_quantize: typing.Optional[typing.List[str]] = None nodes_to_exclude: typing.Optional[typing.List[str]] = None operators_to_quantize: typing.Optional[typing.List[str]] = None )

参数

  • is_static (bool) — 布尔标志,指示我们是否以静态或动态量化为目标。
  • use_symmetric_activations (bool, 默认为 False) — 是否对激活使用对称量化。
  • use_symmetric_weights (bool, 默认为 True) — 是否对权重使用对称量化。
  • per_channel (bool, 默认为 True) — 是否应按通道(也称为“按行”)进行量化。 启用此功能可以提高整体准确性,但会使量化模型更大。
  • reduce_range (bool, 默认为 False) — 指示是否使用 8 位整数 (False) 或 缩减范围的 7 位整数 (True)。 作为基线,始终建议先使用全范围 (reduce_range = False) 进行测试,然后,如果精度下降明显,则尝试使用缩减范围 (reduce_range = True)。 当调用 VPMADDUBSW 指令时,使用 AVX512 (非 VNNI) 的 Intel CPU 可能会遇到饱和问题。 为了解决这个问题,应该使用 7 位而不是 8 位整数。
  • nodes_to_quantize (Optional[List[str]], 默认为 None) — 要量化的特定节点。 如果为 None,则将量化来自 operators_to_quantize 的所有运算符的节点。
  • nodes_to_exclude (Optional[List[str]], 默认为 None) — 从量化中排除的特定节点。 模型中的节点列表可以通过加载 ONNX 模型 (使用 onnx.load) 找到,或者通过使用 netron 进行可视化检查找到。
  • operators_to_quantize (Optional[List[str]], 默认为 None) — 要对其执行量化的节点类型。 默认情况下,将量化所有可量化的运算符。 可量化的运算符可以在 https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/python/tools/quantization/registry.py 中找到。

创建一个适用于具有 AVX512 指令集的 CPU 的 QuantizationConfig

avx512_vnni

< >

( is_static: bool use_symmetric_activations: bool = False use_symmetric_weights: bool = True per_channel: bool = True nodes_to_quantize: typing.Optional[typing.List[str]] = None nodes_to_exclude: typing.Optional[typing.List[str]] = None operators_to_quantize: typing.Optional[typing.List[str]] = None )

参数

  • is_static (bool) — 布尔标志,指示我们是否以静态或动态量化为目标。
  • use_symmetric_activations (bool, 默认为 False) — 是否对激活使用对称量化。
  • use_symmetric_weights (bool, 默认为 True) — 是否对权重使用对称量化。
  • per_channel (bool, 默认为 True) — 是否应按通道(也称为“按行”)进行量化。 启用此功能可以提高整体准确性,但会使量化模型更大。
  • nodes_to_quantize (Optional[List[str]], 默认为 None) — 要量化的特定节点。 如果为 None,则将量化来自 operators_to_quantize 的所有运算符的节点。
  • nodes_to_exclude (Optional[List[str]], 默认为 None) — 从量化中排除的特定节点。 模型中的节点列表可以通过加载 ONNX 模型 (使用 onnx.load) 找到,或者通过使用 netron 进行可视化检查找到。
  • operators_to_quantize (Optional[List[str]], 默认为 None) — 要对其执行量化的节点类型。 默认情况下,将量化所有可量化的运算符。 可量化的运算符可以在 https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/python/tools/quantization/registry.py 中找到。

创建一个适用于具有 AVX512-VNNI 指令集的 CPU 的 QuantizationConfig

当以 Intel AVX512-VNNI CPU 为目标时,底层执行引擎利用 CPU 指令 VPDPBUSD 在单个指令中计算 \i32 += i8(w) * u8(x)\。

AVX512-VNNI (AVX512 向量神经网络指令) 是 x86 扩展指令集,并且是 AVX-512 ISA 的一部分。

AVX512 VNNI 旨在加速 INT8 推理的卷积神经网络。

tensorrt

< >

( per_channel: bool = True nodes_to_quantize: typing.Optional[typing.List[str]] = None nodes_to_exclude: typing.Optional[typing.List[str]] = None operators_to_quantize: typing.Optional[typing.List[str]] = None )

参数

  • per_channel (bool, 默认为 True) — 是否应按通道(也称为“按行”)进行量化。 启用此功能可以提高整体准确性,但会使量化模型更大。
  • nodes_to_quantize (Optional[List[str]], 默认为 None) — 要量化的特定节点。 如果为 None,则将量化来自 operators_to_quantize 的所有运算符的节点。
  • nodes_to_exclude (Optional[List[str]], 默认值为 None) — 从量化中排除的特定节点。模型中的节点列表可以通过 onnx.load 加载 ONNX 模型找到,也可以通过使用 netron 进行可视化检查找到。
  • operators_to_quantize (Optional[List[str]], 默认值为 None) — 要在其上执行量化的节点类型。默认情况下,所有可量化的算子都将被量化。可量化的算子可以在 https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/python/tools/quantization/registry.py 中找到。

创建适用于 TensorRT 静态量化的 QuantizationConfig,目标是 NVIDIA GPU。

CalibrationConfig

class optimum.onnxruntime.CalibrationConfig

< >

( dataset_name: str dataset_config_name: str dataset_split: str dataset_num_samples: int method: CalibrationMethod num_bins: typing.Optional[int] = None num_quantized_bins: typing.Optional[int] = None percentile: typing.Optional[float] = None moving_average: typing.Optional[bool] = None averaging_constant: typing.Optional[float] = None )

参数

  • dataset_name (str) — 校准数据集的名称。
  • dataset_config_name (str) — 校准数据集配置的名称。
  • dataset_split (str) — 用于执行校准步骤的数据集拆分。
  • dataset_num_samples (int) — 组成校准数据集的样本数。
  • method (CalibrationMethod) — 选择使用校准数据集计算激活量化参数的方法。
  • num_bins (Optional[int], 默认值为 None) — 当使用 Percentile 或 Entropy 方法执行校准步骤时,用于创建直方图的 bin 的数量。
  • num_quantized_bins (Optional[int], 默认值为 None) — 当使用 Entropy 方法执行校准步骤时,要使用的量化 bin 的数量。
  • percentile (Optional[float], 默认值为 None) — 当使用 Percentile 方法执行校准步骤时,用于计算激活量化范围的百分位数。
  • moving_average (Optional[bool], 默认值为 None) — 当使用 MinMax 方法执行校准步骤时,是否计算最小值和最大值的移动平均值。
  • averaging_constant (Optional[float], 默认值为 None) — 当计算最小值和最大值的移动平均值时,使用的恒定平滑因子。仅当选择 MinMax 校准方法且 moving_average 设置为 True 时有效。

CalibrationConfig 是配置类,处理与静态量化的校准步骤相关的所有 ONNX Runtime 参数。

ORTConfig

class optimum.onnxruntime.ORTConfig

< >

( opset: typing.Optional[int] = None use_external_data_format: bool = False one_external_file: bool = True optimization: typing.Optional[optimum.onnxruntime.configuration.OptimizationConfig] = None quantization: typing.Optional[optimum.onnxruntime.configuration.QuantizationConfig] = None **kwargs )

参数

  • opset (Optional[int], 默认值为 None) — 导出模型时使用的 ONNX opset 版本。
  • use_external_data_format (bool, 默认值为 False) — 允许导出 >= 2Gb 的模型。
  • one_external_file (bool, 默认值为 True) — 当 use_external_data_format=True 时,是否将所有张量保存到一个外部文件。如果为 false,则将每个张量保存到一个以张量名称命名的文件中。(对于量化,不能设置为 False
  • optimization (Optional[OptimizationConfig], 默认值为 None) — 指定优化 ONNX Runtime 模型的配置
  • quantization (Optional[QuantizationConfig], 默认值为 None) — 指定量化 ONNX Runtime 模型的配置

ORTConfig 是配置类,处理与 ONNX IR 模型导出、优化和量化参数相关的所有 ONNX Runtime 参数。

< > 在 GitHub 上更新