快捷方式

ShapeEnv

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

在符号环境中添加新符号。

bind_symbols(placeholders, args)[source][source]

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

这与 evaluate_guards 有点重复,但差异足够大,单独创建一个副本似乎是最清晰的方式。这假设防护措施已经检查过,尽管如果代价低廉,我们会检查是否存在异常行为。

返回类型

dict[sympy.Symbol, int]

bound_sympy(expr, size_oblivious=False)[source][source]

给定一个 sympy 表达式,计算其可能值的 ValueRanges 界限

返回类型

ValueRanges

check_equal(other)[source][source]

比较另一个 ShapeEnv 是否等效

cleanup()[source][source]

打破引用循环。

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

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

创建由此 ShapeEnv 跟踪的新符号

返回类型

表达式

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

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

返回类型

tuple[tuple[Union[int, torch.SymInt], …], tuple[Union[int, torch.SymInt], …], Union[int, torch.SymInt]]

create_symboolnode(sym)[source][source]

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

返回类型

SymBool

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

从符号表达式创建 SymFloat 值

返回类型

Union[float, SymFloat]

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

从符号表达式创建 SymInt 值

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

返回类型

Union[int, SymInt]

create_unbacked_symbool()[source][source]

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

返回类型

SymBool

SymBool

create_unbacked_symfloat()[source][source]

返回类型

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

SymFloat

create_unbacked_symint(source=None)[source][source]

返回类型

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

SymInt

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

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

返回类型

表达式

与标准符号相比,我们不假设值为正,也不对零或一值进行特殊处理。

create_unspecified_symint_and_symbol(value, source, dynamic_dim)[source][source]

返回类型

Union[int, SymInt]

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

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

创建在运行时检查的断言
  • 参数

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

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

返回类型

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

bool

deserialize_symexpr(code)[source][source]

返回类型

供 compile_fx 反序列化 symexprs 时使用

Union[SymInt, SymFloat, SymBool]

evaluate_guards_expression(code, args)[source][source]

返回类型

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

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

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

返回类型

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

为图的占位符值生成防护措施,并使用参数评估这些防护措施

evaluate_sym_node(sym_node, size_oblivious=False)[source][source]

返回类型

给定一个 SymNode,评估 sym_node.expr,并在必要时添加防护措施。

基本

evaluate_symexpr(code)[source][source]

返回类型

供 compile_fx 评估 symexprs 时使用

Union[int, float, bool]

format_guards(verbose=False)[source][source]

返回类型

格式化此 shape 环境的防护表达式,如果详细模式开启,则包含可选的追溯信息

str

freeze()[source][source]

冻结此 ShapeEnv 以停止累积防护措施

冻结的 ShapeEnv 将忽略在其上生成的任何进一步的防护措施,只会发出可能导致精度问题的警告。

freeze_runtime_asserts()[source][source]

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

如果您在冻结状态下尝试安装新的运行时断言,将会报错。这可能表明存在降级违规,或者我们静态已知为 True 但以某种方式再次检查时无法明确解除的情况。

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

返回类型

给定表达式中的符号,它返回包含这些符号的所有运行时断言以及所有防护措施。如果 symbols 为 None,则返回所有运行时断言(以及所有防护措施)。

tuple[‘sympy.logic.boolalg.Boolean’, …]

get_implications(e)[source][source]

返回类型

给定一个表达式,它返回从中得出的谓词列表

tuple[tuple[‘sympy.logic.boolalg.Boolean’, sympy.logic.boolalg.BooleanAtom], …]

get_nontrivial_guards()[source][source]

返回类型

返回非静态已知(即非平凡)的防护表达式列表

list[‘sympy.logic.boolalg.Boolean’]

get_pruned_guards(symints)[source][source]

返回类型

获取防护措施列表,但进行修剪,使其仅提供引用传入输入中的 symints 的防护措施

list[torch._guards.ShapeGuard]

ignore_fresh_unbacked_symbols()[source][source]

返回类型

指示新分配的无后端 SymInts 正在被丢弃

Iterator[None]

检查 sympy 符号是否符合非备份符号的命名规范

返回类型

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

produce_guards(*args, **kwargs)[source][source]

类似于 produce_guards_verbose,但只返回非详细的 Python 守卫表达式(不生成详细守卫)。

返回类型

list[str]

produce_guards_expression(placeholders, *, guards=None, ignore_static=True)[source][source]

预期与 evaluate_guards_expression() 一起使用。为给定的占位符生成守卫,并返回一个字符串表达式,该表达式在给定占位符的具体值的情况下,由 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][source]

生成守卫字符串列表,当在定义了所有源的张量的上下文中评估时,这些字符串根据列表中的守卫是否评估为 True 来返回 True 或 False。主要由 Dynamo 使用,但也对守卫的手动测试很有帮助(参见 evaluate_guards_for_args)。

为了方便测试,允许源为一个 str 类型,在这种情况下,我们将假定它是一个 LocalSource。

simplified 允许你省略鸭子尺寸(duck sizing)、相等性以及 0/1 守卫。这在你不关心样板守卫时对于测试非常有用,也可能对用户输出有帮助(但请注意;某些相等性守卫是非平凡的!如果简化输出也能打印出来就好了)。它是私有的,因为它不适用于正常使用。

默认情况下,以 Python 形式和带有详细注释的 Python 形式(verbose)返回守卫。

返回类型

list[_ShapeGuardsHelper]

replace(expr)[source][source]

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

返回类型

_SympyT

set_unbacked_var_to_val(k, v)[source][source]

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

simplify(expr, size_oblivious=False)[source][source]

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

返回类型

_SympyT

size_hint(expr, *, allow_none=False)[source][source]

从我们已有的底层形状获取给定表达式的尺寸提示。这不会引入守卫,因此仅当你能保证你的代码对于任意形状仍然有效时(例如优化决策)才使用此方法。

返回类型

Optional[Basic]

suppress_guards()[source][source]

用于忽略内部生成的所有守卫的上下文管理器。

返回类型

_GeneratorContextManager[None]


© 版权所有 PyTorch 贡献者。

使用 Sphinx 和 Read the Docs 提供的主题构建。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取针对初学者和高级开发者的深度教程

查看教程

资源

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

查看资源