快捷键

形状环境 ¶

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)[源码][源码] ¶

给定一对占位符(具有符号大小的假张量)和具体参数(具有实际大小的常规张量)的列表,返回一个字典,将每个符号映射到其实际值。例如,如果您有一个大小为(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 值

返回类型:

float 和 SymFloat 的联合

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

从符号表达式创建 SymInt 值

如果你知道要创建的 SymInt 的当前提示值,请将其传递到 hint 中。否则,传递 None,我们将尽力猜测

返回类型:

Union[int, SymInt]

创建不带提示值的符号布尔值()[来源][来源] ¶

创建不带提示值的符号布尔值

返回类型:

符号布尔值

创建不带提示值的符号浮点数()[来源][来源] ¶

创建不带提示值的符号浮点数

返回类型:

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]

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

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

返回类型:

表达式

创建未指定的符号整数和符号(value, source, dynamic_dim)[source][source] ¶

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

返回类型:

Union[int, SymInt]

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

创建在运行时检查的断言

参数:
  • sympy.Expr(表达式)- 断言为真的布尔表达式

  • msg(字符串)- 断言失败时显示的消息

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

返回类型:

布尔型

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() 为给定具体参数生成的表达式。

返回类型:

布尔型

评估参数的守卫(placeholders, args, *, ignore_static=True)[source][source] ¶

生成图占位符值的守卫并使用参数评估守卫

返回类型:

布尔型

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

给定一个 SymNode,评估 sym_node.expr,并在必要时添加守卫。

返回类型:

基本翻译

evaluate_symexpr(code)[source][source]

供 compile_fx 使用以评估 symexpr

返回类型:

int, float, bool 的联合

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

以可选的跟踪信息格式化此形状环境的环境守卫表达式,如果 verbose

返回类型:

str

freeze()[source][source]

冻结此 ShapeEnv 以停止累积守卫

冻结的 ShapeEnv 将忽略其上生成的任何后续守卫,并仅发出警告,这可能导致精度问题。

freeze_runtime_asserts()[source][source]

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

如果您尝试在冻结时安装新的运行时断言,我们将报错。这表明存在降低违规,或者可能是我们知道静态上是已为真但以非明显释放的方式再次检查的情况。

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

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

返回类型:

tuple[sympy 逻辑布尔代数布尔类型, …]

get_implications(e)[source][source]

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

返回类型:

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

get_nontrivial_guards()[源代码][源代码] ¶

返回一个列表,包含不是静态已知(即非平凡)的守卫表达式

返回类型:

list[sympy.logic.boolalg.Boolean]

get_pruned_guards(symints)[source][source]

获取一个守卫列表,但已修剪,仅提供引用传入输入中的 symints 的守卫

返回类型:

list[torch._guards.ShapeGuard]

忽略未备份的符号()[源][源] ¶

表示正在丢弃新分配的未备份的 SymInts

返回类型:

迭代器[None]

is_unbacked_symint(符号)[源][源] ¶

检查 sympy 符号是否符合无符号符号的命名约定

返回类型:

布尔型

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 根据占位符的具体值进行评估。

返回类型:

可选的 [ 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 或 False。主要用于 Dynamo,但这也对守卫的手动测试很有帮助(参见 evaluate_guards_for_args)。

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

简化版允许省略鸭的大小、相等性和 0/1 守卫。这在测试时很有用,当你不关心样板守卫时,对于用户输出也可能很有帮助(但请注意;一些相等守卫并不简单!最好也能将简化输出打印出来)。它是私有的,因为它不打算用于常规用途

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

返回类型:

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]

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

返回类型:

_SympyT

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

从底层形状获取给定表达式的尺寸提示。不引入保护措施,因此仅在您能保证代码对任意形状仍然有效时使用(例如优化决策)

返回类型:

可选[基本]

suppress_guards()[source][source]

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

返回类型:

_GeneratorContextManager[None]


© 版权所有 PyTorch 贡献者。

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

文档

PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

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

查看资源