快捷方式

ShapeEnv

class 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 有点重复,但又足够不同,因此再复制一份似乎是最简洁的做法。这假设 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 跟踪的新符号

返回类型

Expr

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

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

返回类型

Tuple[Tuple[Union[int, SymInt], …], Tuple[Union[int, SymInt], …], Union[int, 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

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]

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

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

返回类型

Expr

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

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

返回类型

Union[int, SymInt]

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

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

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

  • 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]

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

返回类型

bool

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

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

返回类型

bool

evaluate_symexpr(code)[source][source]

供 compile_fx 用于评估 symexprs

返回类型

Union[int, float, bool]

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

格式化此形状环境的 guard 表达式,如果 verbose,则带有可选的回溯信息

返回类型

str

freeze()[source][source]

冻结此 ShapeEnv 以停止累积 guards

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

freeze_runtime_asserts()[source][source]

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

如果你在冻结时尝试安装新的运行时断言,我们将报错。这表明存在降级违规,或者可能是我们静态已知为 True 的某些东西,但我们以一种不明确可解除的方式再次检查它。

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

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

返回类型

Tuple[Boolean, …]

get_implications(e)[source][source]

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

返回类型

Tuple[Tuple[Boolean, BooleanAtom], …]

get_nontrivial_guards()[source][source]

返回一个非静态已知(即非平凡)的 guard 表达式列表

返回类型

List[Boolean]

get_pruned_guards(symints)[source][source]

获取 guard 列表,但已修剪,因此它仅提供引用传入输入中的 symints 的 guards

返回类型

List[ShapeGuard]

ignore_fresh_unbacked_symbols()[source][source]

表示新分配的未支持的 SymInts 正在被丢弃

返回类型

Iterator[None]

is_unbacked_symint(symbol)[source][source]

检查 sympy 符号是否符合未支持符号的命名约定

返回类型

bool

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

类似于 produce_guards_verbose,但仅返回非 verbose 的 guard 表达式(不生成 verbose guards。)

返回类型

List[str]

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

预期与 evaluate_guards_expression() 一起使用。为给定的占位符生成 guard,并返回一个字符串表达式,该表达式将由 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)[source][source]

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

为了方便测试,允许源是字符串,在这种情况下,我们将假定它是 LocalSource

simplified 允许您省略 duck sizing、相等性和 0/1 guard。这对于在您不关心样板代码 guard 时进行测试很有用,并且也可能对用户输出有所帮助(但请注意;某些相等性 guard 非常重要!如果可以获得简化的输出以也打印它们就好了)。它是私有的,因为它不打算用于正常用途

返回类型

Tuple[List[str], List[str]]

replace(expr)[source][source]

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

返回类型

_SympyT

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

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

simplify(expr)[source][source]

使用已知的约束和替换来简化给定的 expr

返回类型

_SympyT

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

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

返回类型

Optional[Basic]

suppress_guards()[source][source]

忽略内部生成的所有 guard 的上下文管理器

返回类型

_GeneratorContextManager[None]

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发者的深度教程

查看教程

资源

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

查看资源