快捷方式

ShapeEnv

class torch.fx.experimental.symbolic_shapes.ShapeEnv(*, should_record_events=None, tracked_fakes=None, **kwargs)[源代码]
add_var_to_val(expr, val)[源代码]

向符号环境添加新符号。

bind_symbols(placeholders, args)[源代码]

给定一个占位符(具有符号大小的伪张量)和具体参数(具有实际大小的常规张量)的配对列表,返回一个字典,将每个符号映射到其真实值。例如,如果您有一个大小为 (s0, s1) 的占位符,将其绑定到 (2, 4) 将为您提供 {s0: 2, s1: 4}。这不能保证绑定 ShapeEnv 中的所有符号;如果符号未出现在任何占位符中,则无法绑定它,并且已经具有替换的符号将不会获得绑定。

这与 evaluate_guards 有点重复,但差异足够大,因此创建另一个副本看起来最清晰。尽管如果成本很低,我们会检查是否有任何异常情况,但这假设防护措施已检查。

bound_sympy(expr, size_oblivious=False)[源代码]

给定一个 sympy 表达式,计算其可以取值的 ValueRanges 约束。

返回类型

ValueRanges

check_equal(other)[源代码]

比较另一个 ShapeEnv 是否等效。

cleanup()[源代码]

断开引用循环。

这会销毁堆栈。如果您真的想保留它们,我们只需要一种方法来断开代码对象上的引用。

create_symbol(val, source, dynamic_dim=DimDynamic.DUCK, constraint_dim=None, positive=True, do_not_specialize_zero_one=False, symbolic_context=None)[源代码]

创建由此 ShapeEnv 跟踪的新符号。

返回类型

表达式

create_symbolic_sizes_strides_storage_offset(ex, source, *, symbolic_context=None)[source]

返回给定张量的符号大小和步长的列表。我们尽最大努力用大小来表示步长,以避免引入新的符号变量。

create_symboolnode(sym)[source]

从 sympy 布尔表达式创建 SymBool 对象

create_symfloatnode(sym, *, hint, source=None)[source]

从符号表达式创建 SymFloat 值

create_symintnode(sym, *, hint, source=None)[source]

从符号表达式创建 SymInt 值

如果您知道要创建的 SymInt 的当前提示值是什么,请将其传递给 hint。否则,传递 None,我们将尽力猜测

create_unbacked_symbool()[source]

创建一个没有提示值的符号布尔值

create_unbacked_symfloat()[source]

创建一个没有提示值的符号浮点数

create_unbacked_symint()[source]

创建一个没有提示值的符号整数

create_unspecified_symbol(val, source, dynamic_dim=DimDynamic.DUCK, constraint_dim=None)[source]

创建一个具有未指定值的符号

与标准符号相比,我们不假设该值是正数,也不对零或一值进行专门化。

返回类型

表达式

create_unspecified_symint_and_symbol(value, source, dynamic_dim)[source]

创建一个包装新未指定符号的 SymInt

defer_runtime_assert(orig_expr, msg, fx_node=None)[source]

创建一个在运行时检查的断言

参数
  • orig_expr (sympy.Expr) – 要断言为真的布尔表达式

  • msg (str) – 断言失败时显示的消息

  • fx_node (Optional, torch.fx.Node) – self.graph 中对应于表达式的节点(如果适用)

evaluate_guards_expression(code, args)[source]

预期与 produce_guards_expression() 一起使用。为给定的具体参数评估由 produce_guards_expression 生成的表达式。

evaluate_guards_for_args(placeholders, args, *, ignore_static=True)[source]

为图的占位符值生成保护,并使用参数评估保护

evaluate_symexpr(code)[source]

由 compile_fx 用于评估 symexprs

format_guards(verbose=False)[source]

使用可选的回溯信息(如果 verbose 为真)格式化此形状环境的保护表达式

freeze()[source]

冻结此 ShapeEnv 以停止累积保护

冻结的 ShapeEnv 将忽略在其上生成的任何进一步的保护,并且只会发出警告,这可能会导致准确性问题。

freeze_runtime_asserts()[source]

冻结此 ShapeEnv 以停止添加延迟运行时断言。

如果尝试在冻结时安装新的运行时断言,我们将报错。这将表明降低违规,或者可能是我们静态知道已经为真的内容,但我们以一种不清晰可解除的方式再次检查它。

get_axioms(symbols=None, compute_hint=False)[source]

给定表达式中的符号,它返回所有具有这些符号与所有保护连接的运行时断言。如果 symbols 为 None,则返回所有运行时断言(以及所有保护)

返回类型

Tuple[Expr]

get_implications(e)[source]

给定一个表达式,它返回一个由此表达式推导出的谓词列表

返回类型

Tuple[Tuple[Expr, BooleanAtom]]

get_nontrivial_guards()[source]

返回一个保护表达式列表,这些表达式在静态上未知(即不平凡)

get_pruned_guards(symints)[source]

获取一个保护列表,但进行修剪,以便它只提供引用来自传入输入的 symints 的保护

忽略新分配的无后备符号()[source]

指示新分配的无后备 SymInt 正在被丢弃

是否为无后备 SymInt(符号)[source]

检查 sympy 符号是否与无后备符号的命名约定匹配

返回类型

布尔值

生成保护条件(占位符, , 源引用=<function ShapeEnv.<lambda>>, *, 保护条件=None, 输入上下文=None, 等式输入=None, _简化=False, 忽略静态=True)[source]

生成一系列保护条件字符串,当在为所有源定义张量的上下文中进行评估时,根据列表中保护条件的评估结果返回 True 或 False。主要由 Dynamo 使用,但这对于手动测试保护条件也很有用(参见 evaluate_guards_for_args)

为了方便测试,源可以是字符串,在这种情况下,我们将假设它是一个 LocalSource

简化允许您省略鸭子大小、相等和 0/1 保护条件。当您不关心样板保护条件时,这对于测试很有用,并且对于用户输出也可能有所帮助(但要小心;一些相等保护条件并非微不足道!最好让简化的输出也打印它们)。它是私有的,因为它不适用于正常使用

返回类型

列表[字符串]

生成保护条件表达式(占位符, *, 保护条件=None, 忽略静态=True)[source]

预期与 evaluate_guards_expression() 一起使用。为给定的占位符生成保护条件,并返回一个字符串表达式,该表达式将由 evaluate_guards_expression 在给定占位符的具体值时进行评估。

替换(表达式)[source]

将符号替换应用于给定表达式中的任何符号

返回类型

表达式

将无后备变量设置为值(k, v)[source]

仅在 propagate_real_tensors 时使用;为无后备符号注册一个值,该值可以作为最后的手段来解决提示。

简化(表达式)[source]

使用已知的约束和替换来简化给定的表达式

返回类型

表达式

尺寸提示(表达式, *, 允许为空=False)[source]

从我们拥有的底层形状中获取给定表达式的尺寸提示。不引入保护条件,因此仅当您可以保证您的代码对于任意形状仍然有效(例如优化决策)时才使用此方法

抑制保护条件()[source]

上下文管理器,用于忽略内部生成的所有保护条件

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源