torch.fx.experimental.symbolic_shapes.constrain_range¶
- torch.fx.experimental.symbolic_shapes.constrain_range(a, *, min, max=None)[原始碼][原始碼]¶
套用一個約束,使傳入的 SymInt 必須介於 min-max 之間 (包含 min 和 max),而不會在 SymInt 上引入 guard (表示它可以應用於未備份 (unbacked) 的 SymInt)。如果 min/max 為 None,則我們假設該維度在該方向上是無界的。重複應用 constrain_range 會對範圍進行交集。這是一個相當底層的 API,沒有太多安全保證 (待辦事項: 提供更高等級的 API)。
目前,我們在以下情況使用此 API:當我們分配一個未備份的 SymInt 時,表示一個數據相關的整數值,通常我們對它可能取的值一無所知。這表示對它的任何 guard 都會立即失敗。但是,在許多情況下,我們對未備份的 SymInt 知道一些資訊:例如,我們知道 nonzero(x).size(0) 必須 >= 0。我們使用 constrain_range 來縮小可能的範圍,聲明負符號是不可能的。這允許明確地回答諸如 'nnz >= 0' 之類的查詢,即使我們不知道 'nnz' 的實際 (提示) 值是什麼。事實上,我們實際上使用 constrain_range 來不健全地解除常見的 guard:對於由 nonzero 產生的未備份 SymInt,我們也將假設它不等於 0/1 (即使這些在運行時是完全可能的值),因為我們通常希望對 N=2 有效的圖對 N=1 也有效。