onnx_ir.passes.common

ONNX IR 提供的内置 Pass

class onnx_ir.passes.common.AddInitializersToInputsPass[source]

基类: InPlacePass

将初始化器添加到输入。

此 Pass 会查找所有初始化器,如果它们尚未存在,则将其添加到 graph.inputs 列表中。

class onnx_ir.passes.common.CheckerPass(full_check=False, skip_opset_compatibility_check=False, check_custom_domain=False)[source]

基类: PassBase

在模型上运行 ONNX 检查器。

参数:
  • full_check (bool)

  • skip_opset_compatibility_check (bool)

  • check_custom_domain (bool)

property changes_input: Literal[False]

此 Pass 不会更改输入模型。

property in_place: Literal[True]

此 Pass 不会创建新模型。

class onnx_ir.passes.common.ClearMetadataAndDocStringPass[source]

基类: InPlacePass

清除模型、图、节点和函数中的所有元数据和文档字符串。

class onnx_ir.passes.common.CommonSubexpressionEliminationPass(size_limit=10)[source]

基类: InPlacePass

消除 ONNX 图中的公共子表达式。

在 0.1.1 版本中添加。

在 0.1.3 版本中更改: 值小于 size_limit 的常量节点将被 CSE。

参数:

size_limit (int)

size_limit

要进行 CSE 的张量的最大大小。如果张量包含的元素数量大于 size_limit,则不会进行 CSE。默认为 10。

class onnx_ir.passes.common.DeduplicateHashedInitializersPass(size_limit=4294967296)[source]

基类: InPlacePass

从图中删除重复的初始化器张量(使用哈希方法)。

此 Pass 检测形状、dtype 和哈希内容相同的初始化器,并将所有重复引用替换为规范引用。

此 Pass 的峰值内存使用量应低于 DeduplicateInitializersPass,因为它不存储完整的张量数据在内存中,而是使用张量数据的哈希值。

在 0.1.7 版本中添加。

参数:

size_limit (int)

class onnx_ir.passes.common.DeduplicateInitializersPass(size_limit=1024)[source]

基类: InPlacePass

从主图和所有子图中删除重复的初始化器张量。

此 Pass 检测形状、dtype 和内容相同的初始化器,并将所有重复引用替换为规范引用。

初始化器在每个图中进行去重。要在模型全局(跨图)去重初始化器,请使用 LiftSubgraphInitializersToMainGraphPass 将初始化器提升到主图,然后再运行此 Pass。

在 0.1.3 版本中添加。

在 0.1.7 版本中更改: 此 Pass 现在也对子图中的初始化器进行去重。

参数:

size_limit (int)

class onnx_ir.passes.common.IdentityEliminationPass[source]

基类: InPlacePass

消除冗余 Identity 节点的 Pass。

此 Pass 根据以下规则删除 Identity 节点

  1. 对于任何形式为 y = Identity(x) 的节点,其中 y 不是任何图的输出,将所有 y 的使用替换为 x 的使用,并删除该节点。

  2. 如果 y 是图的输出,并且 x 不是任何图的输入,我们仍然可以进行消除,但值 x 应该重命名为 y

  3. 如果 y 是图输出而 x 是图输入,我们不能消除该节点。它应该保留。

class onnx_ir.passes.common.InlinePass[source]

基类: InPlacePass

将模型局部函数内联到主图并清除函数定义。

class onnx_ir.passes.common.LiftConstantsToInitializersPass(lift_all_constants=False, size_limit=16)[source]

基类: InPlacePass

将常量提升为初始化器。

参数:
  • lift_all_constants (bool)

  • size_limit (int)

lift_all_constants

是否提升所有 Constant 节点,包括那些不包含张量属性(例如带有 value_ints 等)的节点。默认为 False,此时只提升带有 value 属性的 Constant 节点。

size_limit

要提升的张量的最小大小。如果张量包含的元素数量小于 size_limit,则不会被提升。默认为 16。

class onnx_ir.passes.common.LiftSubgraphInitializersToMainGraphPass[source]

基类: InPlacePass

将子图初始化器提升到主图。

此 Pass 将子图的初始化器提升到主图。它用于确保初始化器在主图中可用,以便进行进一步处理或优化。

同时也是图输入的初始化器将不会被提升。

class onnx_ir.passes.common.NameFixPass(name_generator=None)[source]

基类: InPlacePass

修复名称以确保所有值和节点都具有唯一名称的 Pass。

此 Pass 确保: 1. 图输入和输出具有唯一名称(优先) 2. 所有中间值具有唯一名称(为未命名值分配名称) 3. 子图中的所有值在其图和父图中具有唯一名称 4. 图中的所有节点具有唯一名称

此 Pass 维护整个模型的全局唯一性。

您可以通过传递 NameGenerator 的子类来自定义节点和值的名称生成函数。

例如,您可以使用这样的自定义命名方案

class CustomNameGenerator:
    def custom_node_name(node: ir.Node) -> str:
        return f"custom_node_{node.op_type}"

    def custom_value_name(value: ir.Value) -> str:
        return f"custom_value_{value.type}"

name_fix_pass = NameFixPass(name_generator=CustomNameGenerator())

在 0.1.6 版本中添加。

参数:

name_generator (NameGenerator | None)

class onnx_ir.passes.common.RemoveInitializersFromInputsPass[source]

基类: InPlacePass

从输入中移除初始化器。

此 Pass 会查找所有具有 const_value 的图输入,并将其从 graph.inputs 列表中移除。

class onnx_ir.passes.common.RemoveUnusedFunctionsPass[source]

基类: InPlacePass

class onnx_ir.passes.common.RemoveUnusedNodesPass[source]

基类: InPlacePass

用于删除未使用的节点和初始化器(死代码消除)的 Pass。

此 Pass 不修改模型签名(输入和输出)。它确保在保留模型原始契约的同时删除未使用的节点和初始化器。

class onnx_ir.passes.common.RemoveUnusedOpsetsPass(process_functions=True)[source]

基类: InPlacePass

从模型和函数中删除未使用的 opset 导入。

参数:

process_functions (bool)

process_functions

是否处理模型中的函数。如果为 True,则 Pass 也会从函数中删除未使用的 opset 导入。如果为 False,则只处理主图。

class onnx_ir.passes.common.ShapeInferencePass(check_type=True, strict_mode=True, data_prop=True)[source]

基类: InPlacePass

此 Pass 对图执行形状推断。

参数:
class onnx_ir.passes.common.TopologicalSortPass[source]

基类: InPlacePass

对模型中的图和函数进行拓扑排序。

排序是稳定的,它保留了不相互依赖的节点的相对顺序。更多信息请参阅 onnx_ir.Graph.sort()