ShapeEnv#
- class torch.fx.experimental.symbolic_shapes.ShapeEnv(*, should_record_events=None, tracked_fakes=None, **kwargs)[source]#
- bind_symbols(placeholders, args)[source]#
给定符号列表(具有符号化尺寸的假张量)和具体参数(具有真实尺寸的常规张量)的配对列表,返回一个字典,将每个符号映射到其真实值。因此,例如,如果您有一个尺寸为 (s0, s1) 的占位符,则绑定 (2, 4) 将为您提供 {s0: 2, s1: 4}。这不能保证绑定 ShapeEnv 中的所有符号;如果符号未出现在任何占位符中,我们就无法绑定它,并且已经有替换的符号不会获得绑定。
这与 evaluate_guards 有点重复,但它足够不同,以至于似乎最简洁的做法是再复制一份。虽然如果便宜,我们会检查是否有欺骗行为,但这假定守护程序已经检查过了。
- bound_sympy(expr, size_oblivious=False)[source]#
给定一个 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)[source]#
创建此 ShapeEnv 跟踪的新符号。
- 返回类型
Expr
- create_symbolic_sizes_strides_storage_offset(ex, source, *, symbolic_context=None)[source]#
返回给定张量的符号化尺寸和步幅列表。我们尽力用尺寸来表示步幅,以避免引入新的符号变量。
- create_symintnode(sym, *, hint, source=None)[source]#
从符号表达式创建 SymInt 值
如果您知道要创建的 SymInt 的当前提示值,请将其传入 hint。否则,传递 None,我们将尽最大努力猜测
- 返回类型
IntLikeType
- create_unspecified_symbol(val, source, dynamic_dim=DimDynamic.DUCK, constraint_dim=None, symbolic_context=None)[source]#
创建一个值未指定(unspecified)的符号
与标准符号相比,我们不假定值为正数,也不对零或一值进行特殊处理。
- 返回类型
Expr
- create_unspecified_symint_and_symbol(value, source, dynamic_dim)[source]#
创建一个包装了新的未指定符号的 SymInt
- 返回类型
IntLikeType
- evaluate_expr(orig_expr, hint=None, fx_node=None, size_oblivious=False, fallback_value=None, *, forcing_spec=False)[source]#
给定一个表达式,对其进行评估,并在必要时添加 guard。当 fallback_value 不为 None 时,函数将返回 fallback_value 而不是因数据依赖错误而失败。
- 返回类型
基本
- evaluate_guards_expression(code, args)[source]#
预计与 produce_guards_expression() 一起使用。为给定的具体参数评估由 produce_guards_expression 生成的表达式。
- 返回类型
- evaluate_guards_for_args(placeholders, args, *, ignore_static=True)[source]#
为图的占位符值生成 guards,并使用 args 评估 guards
- 返回类型
- evaluate_sym_node(sym_node, size_oblivious=False, fallback_value=None)[source]#
给定一个 SymNode,对其 sym_node.expr 进行评估,并在必要时添加 guards。
- 返回类型
基本
- format_guards(verbose=False)[source]#
如果 verbose 为 True,则格式化此 shape env 的 guard 表达式,并附带可选的 traceback 信息
- 返回类型
- freeze_runtime_asserts()[source]#
冻结此 ShapeEnv 以停止添加延迟的运行时断言。
如果您尝试安装新的运行时断言,而它已被冻结,则会引发错误。这可能表示存在降低(lowering)冲突,或者可能表示我们静态已知某事实际上为 True,但我们正在以一种不明确可消除的方式再次检查它。
- get_axioms(symbols=None, compute_hint=False)[source]#
给定表达式中的符号,它返回所有运行时断言,这些断言是将这些符号与所有 guards 串联起来的。如果 symbols 为 None,则返回所有运行时断言(以及所有 guards)
- 返回类型
tuple[‘sympy.logic.boolalg.Boolean’, …]
- get_nontrivial_guards()[source]#
返回一个 guard 表达式列表,这些表达式不是静态已知的(即不是平凡的)
- 返回类型
list[‘sympy.logic.boolalg.Boolean’]
- get_pruned_guards(symints)[source]#
获取 guards 列表,但经过修剪,使其仅提供引用输入中 symints 的 guards
- 返回类型
list[torch._guards.ShapeGuard]
- guard_or_defer_runtime_assert(orig_expr, msg, fx_node=None)[source]#
添加一个 guard,使得 orig_expr 为 True(如果可以的话),或者回退到添加一个在运行时检查的断言。
- 参数
orig_expr (sympy.Expr) – 断言为 True 的布尔表达式
msg (str) – 断言失败时显示的错误消息
fx_node (Optional, torch.fx.Node) – 对应于表达式的
self.graph
中的节点(如果适用)
- 返回类型
- patch_source_specialization(source, check_fn)[source]#
暂时向 ShapeEnv 添加符号级别的公理。这在您想要“分叉”并拥有并行 ShapeEnv 时非常有用。例如,我们在进行多图编译时使用它,以便支持具有不同专门化级别的各种图。
此上下文管理器允许基于应用于与源关联的符号的专门化函数,暂时将约束添加到 shape 环境中。
- produce_guards(*args, **kwargs)[source]#
与 produce_guards_verbose 类似,但仅返回非 verbose 的 Python guard 表达式(不生成 verbose guards)。
- produce_guards_expression(placeholders, *, guards=None, ignore_static=True)[source]#
预计与 evaluate_guards_expression() 一起使用。为给定的占位符生成 guards,并返回一个字符串表达式,该表达式将由 evaluate_guards_expression 使用占位符的具体值进行评估。
- 返回类型
Optional[str]
- produce_guards_verbose(placeholders, sources, source_ref=<function ShapeEnv.<lambda>>, *, guards=None, input_contexts=None, equalities_inputs=None, _simplified=False, ignore_static=True, langs=('python', 'verbose_python'))[source]#
生成一系列 guard 字符串,当在定义了所有源的张量的上下文中进行评估时,这些字符串根据列表中的 guard 是否评估为 True 来返回 True 或 False。主要由 Dynamo 使用,但这也对手动测试 guards 有帮助(请参阅 evaluate_guards_for_args)
为了方便测试,允许源是 str,在这种情况下,我们将假设它是一个 LocalSource
simplified 允许您省略 duck sizing、equality 和 0/1 guards。这对于您不关心样板 guards 的测试很有用,并且可能也有助于用户输出(但要小心;一些 equality guards 是非平凡的!如果 simplified 输出也能打印它们就更好了)。它是私有的,因为它不用于常规用途
默认情况下,以 python 和带 verbose 注释的 python(verbose)格式返回 guards。
- 返回类型
list[_ShapeGuardsHelper]