torch.fx.experimental.symbolic_shapes.constrain_range¶
- torch.fx.experimental.symbolic_shapes.constrain_range(a, *, min, max=None)[source][source]¶
应用约束,使传入的 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 也是有效的。