torch.fx.experimental.symbolic_shapes.constrain_range¶
- torch.fx.experimental.symbolic_shapes.constrain_range(a, *, min, max=None)[源代码]¶
应用一个约束,即传入的 SymInt 必须位于 min-max(包含-包含)之间,**无需在 SymInt 上引入保护**(这意味着它可以在未备份的 SymInt 上使用)。如果 min/max 为 None,我们假设该维度在该方向上是无界的。重复应用 constrain_range 会对范围进行交集。这是一个相当底层的 API,没有太多安全保证(待办事项:提供更高级别的 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 有效。