ShapeEnv¶
- class torch.fx.experimental.symbolic_shapes.ShapeEnv(*, should_record_events=None, tracked_fakes=None, **kwargs)[source][source]¶
- bind_symbols(placeholders, args)[原始碼][原始碼]¶
給定一對 placeholders(帶有符號大小的假張量)和具體參數(帶有實際大小的常規張量)的列表,返回一個字典,該字典將每個符號映射到它的實際值。 因此,舉例來說,如果您有一個大小為 (s0, s1) 的 placeholder,將 (2, 4) 綁定到它會得到 {s0: 2, s1: 4}。 這不能保證綁定 ShapeEnv 中的所有符號; 如果符號沒有出現在任何 placeholder 中,我們就不能綁定它,並且已經有替換的符號將不會被綁定。
這與 evaluate_guards 有點重複,但差異足夠大,因此製作另一個副本似乎是最簡潔的。 假設 guard 已經檢查過,但如果成本不高,我們會檢查一下是否有詐。
- 回傳型別
Dict[sympy.Symbol, int]
- bound_sympy(expr, size_oblivious=False)[原始碼][原始碼]¶
給定一個 sympy 表達式,計算它可以是什麼值的 ValueRanges 邊界
- 回傳型別
ValueRanges
- create_symbol(val, source, dynamic_dim=DimDynamic.DUCK, constraint_dim=None, positive=True, do_not_specialize_zero_one=False, symbolic_context=None)[原始碼][原始碼]¶
建立一個新的符號,該符號由這個 ShapeEnv 追蹤
- 回傳型別
Expr
- create_symbolic_sizes_strides_storage_offset(ex, source, *, symbolic_context=None)[原始碼][原始碼]¶
傳回給定張量的符號大小和步幅的列表。 我們盡力用大小來表達步幅,以便不引入新的符號變數。
- create_symintnode(sym, *, hint, source=None)[原始碼][原始碼]¶
從符號表達式建立一個 SymInt 值
如果您知道要建立的 SymInt 目前的提示值,請將其傳遞到 hint。 否則,傳遞 None,我們會盡力猜測
- create_unspecified_symbol(val, source, dynamic_dim=DimDynamic.DUCK, constraint_dim=None, symbolic_context=None)[原始碼][原始碼]¶
建立一個具有未指定值的符號
與標準符號相比,我們不假設該值為正數,也不針對零或一值進行特化。
- 回傳型別
Expr
- defer_runtime_assert(orig_expr, msg, fx_node=None)[原始碼][原始碼]¶
建立一個在執行階段檢查的斷言
- 參數
orig_expr (sympy.Expr) – 要斷言為 true 的布林表達式
msg (str) – 斷言失敗時顯示的訊息
fx_node (Optional, torch.fx.Node) –
self.graph
中與該表達式對應的節點(如果適用)
- 回傳型別
- evaluate_guards_expression(code, args)[原始碼][原始碼]¶
預期與 produce_guards_expression() 一起使用。針對給定的具體 args 評估由 produce_guards_expression 產生的表達式。
- 回傳型別
- evaluate_guards_for_args(placeholders, args, *, ignore_static=True)[原始碼][原始碼]¶
為圖形的 placeholder 值產生 guard,並使用 args 評估 guard
- 回傳型別
- format_guards(verbose=False)[原始碼][原始碼]¶
格式化此 shape env 的 guard 表達式,如果 verbose 為 True,則包含可選的追溯資訊
- 回傳型別
- freeze()[原始碼][原始碼]¶
凍結此 ShapeEnv 以停止累積 guard
凍結的 ShapeEnv 將忽略在其上產生的任何進一步的 guard,並且只會發出警告,這可能會導致準確性問題。
- freeze_runtime_asserts()[原始碼][原始碼]¶
凍結此 ShapeEnv 以停止新增延遲的 runtime asserts。
如果您嘗試在凍結時安裝新的 runtime assert,我們會報錯。 這表示降低違規,或者可能是我們靜態地知道已經為 True 的東西,但我們以不明顯可解除的方式再次檢查它。
- get_axioms(symbols=None, compute_hint=False)[原始碼][原始碼]¶
給定表達式中的符號,它會返回所有具有這些符號的 runtime asserts,並與所有 guard 連接。 如果 symbols 為 None,它會返回所有 runtime asserts (和所有 guard)
- 回傳型別
Tuple[Boolean, …]
- get_pruned_guards(symints)[source][source]¶
取得一個 guard 列表,但經過精簡,因此僅提供引用傳入輸入中的 symints 的 guard
- 回傳型別
List[ShapeGuard]
- produce_guards(*args, **kwargs)[source][source]¶
類似於 produce_guards_verbose,但僅返回非 verbose 的 guard 運算式 (不產生 verbose guard。)
- produce_guards_expression(placeholders, *, guards=None, ignore_static=True)[source][source]¶
預計與 evaluate_guards_expression() 一起使用。為給定的 placeholders 產生 guards,並返回一個字串運算式,該運算式將由 evaluate_guards_expression 給定 placeholders 的具體值來評估。
- 回傳型別
Optional[str]
- produce_guards_verbose(placeholders, sources, source_ref=<function ShapeEnv.<lambda>>, *, guards=None, input_contexts=None, equalities_inputs=None, _simplified=False, ignore_static=True)[source][source]¶
產生一個 guard 字串的列表,當在一個為所有來源定義 tensors 的上下文中評估時,根據列表中 guards 的評估結果為 True 或 False。主要由 Dynamo 使用,但這也有助於 guards 的手動測試 (請參閱 evaluate_guards_for_args)
為了方便測試,允許來源為 str,在這種情況下,我們將假設它是 LocalSource
simplified 允許您省略 duck sizing、相等性和 0/1 guards。 當您不關心樣板 guards 時,這對於測試很有用,並且對於使用者輸出也可能很有用 (但要小心;某些相等性 guards 並非簡單! 最好也獲得簡化的輸出以將它們列印出來)。 它是私有的,因為它不適用於正常使用
- set_unbacked_var_to_val(k, v)[source][source]¶
僅在 propagate_real_tensors 時使用;為未支援的符號註冊一個值,該值可以用作解決提示的最後手段。