Shortcuts

torch.fx.experimental.symbolic_shapes.constrain_range

torch.fx.experimental.symbolic_shapes.constrain_range(a, *, min, max=None)[源代码]

应用一个约束,即传入的 SymInt 必须在最小值和最大值之间(包括最小值和最大值),而不引入对 SymInt 的保护(这意味着它可以用于未支持的 SymInt)。如果 min/max 为 None,我们假设该维度在那个方向上是无限的。重复应用 constrain_range 会相交范围。这是一个相当底层的 API,没有太多的安全保证(TODO:提供更高级别的 API)。

目前,我们在以下情况下使用此API:当我们分配一个无后备的SymInt时,表示一个数据依赖的整数量,我们通常不知道它可能取什么值。这意味着任何对其的守卫都会立即失败。然而,在许多情况下,我们对无后备的SymInt有所了解:例如,我们知道nonzero(x).size(0)必须大于等于0。我们使用constrain_range来缩小可能的范围,声明负符号是不可能的。这使得我们能够明确回答类似‘nnz >= 0’的查询为True,即使我们不知道‘nnz’的实际(提示)值是什么。事实上,我们实际上使用constrain_range来不合理地解除常见守卫:对于由nonzero生成的无后备SymInt,我们还会假设它不等于0/1(尽管这些在运行时是完全可能的值),因为我们通常期望对于N=2有效的图对于N=1也有效。

优云智算