最佳文档

配置

您正在查看<span class="italic">主要</span>版本,需要从源码安装。如果您想要常规pip安装,请查阅最新稳定版本(<a class="underline" href="/docs/optimum/v1.21.2/onnxruntime/package_reference/configuration">v1.21.2</a>)。
Hugging Face's logo
加入Hugging Face社区

并获取增强文档体验

开始使用

配置

配置类是指定任务应如何执行的方法。ONNX 运行时包支持两种任务

  1. 优化:由<差异有统计学意义>ORTOptimizer执行,此任务可以使用优化配置进行调整。

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

量化配置

optimum.onnxruntime.量化配置

< >

( 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 融合。
  • enable_layer_norm_fusion (bool, 默认为 False) — 是否禁用 Layer Normalization 融合。
  • disable_attention_fusion (bool, 默认为 False) — 是否禁用 Attention 融合。
  • disable_skip_layer_norm_fusion (bool,默认为False) — 是否禁用SkipLayerNormalization融合。
  • disable_bias_skip_layer_norm_fusion (bool,默认为False) — 是否禁用加偏置和SkipLayerNormalization融合。
  • disable_bias_gelu_fusion (bool,默认为False) — 是否禁用加偏置和Gelu / FastGelu融合。
  • disable_embed_layer_norm_fusion (bool,默认为True) — 是否禁用EmbedLayerNormalization融合。由于该融合与ONNX Runtime量化不兼容,默认值设置为True
  • enable_gelu_approximation (bool, 默认为 False) — 是否启用将 Gelu / BiasGelu 转换为 FastGelu。默认值设置为 False,因为这种近似可能会略微影响模型的精度。
  • use_mask_index (bool, 默认为 False) — 是否使用mask索引而不是注意力操作符中的原始掩码。
  • no_attention_mask (bool, 默认为 False) — 是否不使用注意力掩码。仅适用于bert模型类型。
  • disable_embed_layer_norm (bool, 默认为 True) — 是否禁用嵌入层归一化融合。默认值设置为 True,因为此融合与 ONNX Runtime 量化不兼容
  • disable_shape_inference (bool, 默认为 False) — 是否禁用符号形状推断。默认值设置为 False,但符号形状推断有时可能引起问题。
  • use_multi_head_attention (bool, 默认为 False) — 实验性参数。使用 MultiHeadAttention 而不是 Attention 运算符,因为其对 Q/K/V 投影的权重已合并,在某些情况下可能更快,因为 3 个矩阵乘法已被合并为一个。“请注意,当 qkv 没有打包时,MultiHeadAttention 可能比 Attention 慢。”
  • enable_gemm_fast_gelu_fusion (bool,默认为False) — 启用GemmfastGelu融合。
  • use_raw_attention_mask (bool,默认为False) — 使用原始注意力掩码。如果你的输入不是右侧填充,请使用此选项。这可能会禁用融合的注意力并降低性能。
  • disable_group_norm_fusion (bool,默认为True) — 不融合GroupNorm。仅在model_type=unet时起作用。
  • disable_packed_kv (bool,默认为True) — 不在交叉注意力中使用打包的kv。仅在model_type=unet时起作用。
  • disable_rotary_embeddings (bool, 默认为 False) — 是否禁用旋转变换融合。

OptimizationConfig 是处理所有 ONNX Runtime 优化参数的配置类。有两个优化栈

  1. ONNX Runtime 通用优化工具:可以用于任何 ONNX 模型。
  2. ONNX Runtime Transformers 优化工具:只能用于 Transformes 模型子集。

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 上运行,一些优化依赖于模型运行的硬件。仅当优化级别 > 1 时需要。
  • kwargs (Dict[str, Any]) — 传递给 ~OptimizationConfig 构造函数的参数。

返回值

OptimizationConfig

与 O3 优化级别对应的 OptimizationConfig

创建 O3 ~OptimizationConfig

O4

< >

( for_gpu: bool = True **kwargs ) OptimizationConfig

参数

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

返回值

OptimizationConfig

与 O4 优化级别相对应的 OptimizationConfig

创建一个 O4 ~OptimizationConfig

with_optimization_level

( optimization_level: str for_gpu: bool = False **kwargs ) export const metadata = 'undefined';OptimizationConfig

参数

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

返回值

OptimizationConfig

对应于请求优化级别的 OptimizationConfig

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

量化配置

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, 默认为 False) — 是否对激活应用对称量化。
  • weights_dtype (QuantType, 默认为 QuantType.QInt8) — 用于权重的量化数据类型。
  • weights_symmetric (bool, 默认为 True) — 是否对权重应用对称量化。
  • per_channel (bool,默认为False) - 是否对每个通道进行量化(也称为“每行”)。启用这可以增加整体精度,同时使量化模型变得更大。
  • reduce_range (bool,默认为False) - 是否使用7位整数的reduce-range代替8位整数。
  • nodes_to_quantize (List[str],默认为[]) - 要量化的节点名称列表。当未指定时,所有节点都将被量化。如果为空,则将从operators_to_quantize中获取所有节点的操作员执行量化。
  • nodes_to_exclude (字符串列表, 默认为 []) — 量化时需要排除的节点名称列表。模型中的节点列表可以通过使用 onnx.load 加载 ONNX 模型或通过 netron 进行可视检查来找到。
  • operators_to_quantize (字符串列表) — 要量化的算子类型列表。默认为给定量化和格式下的所有可量化算子。可量化算子可以在 https://github.com/microsoft/onnxruntime/blob/main/onnxruntime/python/tools/quantization/registry.py 找到。
  • qdq_add_pair_to_weight (布尔类型, 默认为 False) — 默认情况下,浮点权重将被量化并馈送到插入的 DeQuantizeLinear 节点。如果设置为 True,浮点权重将保留,并将插入 QuantizeLinear / DeQuantizeLinear 节点。
  • qdq_dedicated_pair (bool,默认为False) — 当插入QDQ对时,多个节点可以共享对应的QDQ对作为它们的输入。如果为True,将为每个节点创建一个相同且独立的QDQ对。
  • qdq_op_type_per_channel_support_to_axis (Dict[str, int]) — 设置特定运算符类型的通道轴。仅在支持每通道量化并且设置为True时有效。

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

AutoQuantizationConfig

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, 默认为 False) —— 是否对激活使用对称量化。
  • use_symmetric_weights (bool, 默认为 True) —— 是否对权重使用对称量化。
  • per_channel (布尔值,默认为 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_quantizeOptional[List[str]],默认为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, 默认为 False) — 是否为激活使用对称量化。
  • use_symmetric_weights (bool, 默认为 True) — 是否为权重使用对称量化。
  • per_channel (bool, 默认为 True) — 是否按通道量化(也称为“按行”)。启用此功能可以增加整体准确性,同时使量化模型变得更重。
  • reduce_range (bool, 默认 False) — 指示是否使用8位整数(False)或减小范围7位整数(True)。作为基准,建议始终测试完整范围(reduce_range = False),然后,如果准确性显著下降,再尝试使用减小范围(reduce_range = True)。使用AVX512(非VNNI)的Intel处理器在调用VPMADDUBSW指令时可能会遇到饱和问题。为了解决这个问题,应该使用7位而不是8位的整数。
  • 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 找到。

创建适合带有 AVX2 指令集的 CPU 的 量化配置

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 (布尔值,默认为 False) — 是否使用对称量化对激活项进行量化。
  • use_symmetric_weights (布尔值,默认为 True) — 是否使用对称量化对权重进行量化。
  • per_channel (布尔值,默认为 True) — 是否按通道进行量化(也称为“按行量化”)。启用此选项可以提高整体精度,但会使量化模型更重。
  • reduce_range (bool,默认为False) — 指明是否使用8位整数(False)或调整范围的7位整数(True)。作为基线,始终建议测试全范围(reduce_range = False),然后在准确性显著下降的情况下,尝试调整范围(reduce_range = True)。使用AVX512(非VNNI)的Intel CPU在调用VPMADDUBSW指令时可能会遇到饱和问题。为了解决这个问题,应使用7位而不是8位整数。
  • 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

为具备AVX512指令集的CPU创建一个合适的 量化配置

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.load加载ONNX模型或使用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 Vector Neural Network Instruction)是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

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 方法进行校准时,创建直方图时使用的桶数。
  • num_quantized_bins (Optional[int], 默认为 None) — 当使用 Entropy 方法进行校准时,使用的量化桶数。
  • 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,这对于量化)
  • optimization (Optional[OptimizationConfig], 默认 None) — 指定用于优化 ONNX Runtime 模型的配置
  • quantization (Optional[QuantizationConfig], 默认 None) — 指定用于量化 ONNX Runtime 模型的配置

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

< > 在 GitHub 上更新