ShapeEnv¶
- class torch.fx.experimental.symbolic_shapes.ShapeEnv(*, should_record_events=None, tracked_fakes=None, **kwargs)[源代码]¶
- bind_symbols(placeholders, args)[源代码]¶
给定一个占位符(具有符号大小的伪张量)和具体参数(具有实际大小的常规张量)的配对列表,返回一个字典,将每个符号映射到其真实值。例如,如果您有一个大小为 (s0, s1) 的占位符,将其绑定到 (2, 4) 将为您提供 {s0: 2, s1: 4}。这不能保证绑定 ShapeEnv 中的所有符号;如果符号未出现在任何占位符中,则无法绑定它,并且已经具有替换的符号将不会获得绑定。
这与 evaluate_guards 有点重复,但差异足够大,因此创建另一个副本看起来最清晰。尽管如果成本很低,我们会检查是否有任何异常情况,但这假设防护措施已检查。
- bound_sympy(expr, size_oblivious=False)[源代码]¶
给定一个 sympy 表达式,计算其可以取值的 ValueRanges 约束。
- 返回类型
ValueRanges
- 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_symintnode(sym, *, hint, source=None)[source]¶
从符号表达式创建 SymInt 值
如果您知道要创建的 SymInt 的当前提示值是什么,请将其传递给 hint。否则,传递 None,我们将尽力猜测
- create_unspecified_symbol(val, source, dynamic_dim=DimDynamic.DUCK, constraint_dim=None)[source]¶
创建一个具有未指定值的符号
与标准符号相比,我们不假设该值是正数,也不对零或一值进行专门化。
- 返回类型
表达式
- 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 生成的表达式。
- freeze_runtime_asserts()[source]¶
冻结此 ShapeEnv 以停止添加延迟运行时断言。
如果尝试在冻结时安装新的运行时断言,我们将报错。这将表明降低违规,或者可能是我们静态知道已经为真的内容,但我们以一种不清晰可解除的方式再次检查它。
- get_axioms(symbols=None, compute_hint=False)[source]¶
给定表达式中的符号,它返回所有具有这些符号与所有保护连接的运行时断言。如果 symbols 为 None,则返回所有运行时断言(以及所有保护)
- 返回类型
Tuple[Expr]
- 生成保护条件(占位符, 源, 源引用=<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 在给定占位符的具体值时进行评估。