ShapeEnv¶
- 類 torch.fx.experimental.symbolic_shapes.ShapeEnv(*, should_record_events=None, tracked_fakes=None, **kwargs)[source][source]¶
- bind_symbols(placeholders, args)[source][source]¶
給定一對佔位符(帶有符號大小的偽張量)和具體引數(帶有真實大小的常規張量)列表,返回一個字典,將每個符號對映到其真實值。例如,如果有一個大小為 (s0, s1) 的佔位符,將其繫結到 (2, 4) 將得到 {s0: 2, s1: 4}。這不能保證繫結 ShapeEnv 中的所有符號;如果一個符號未出現在任何佔位符中,或者該符號已有替換,則無法繫結。
這與 evaluate_guards 有點重複,但差異足夠大,單獨建立一個副本似乎是最清晰的方式。這假設防護措施已經檢查過,儘管如果代價低廉,我們會檢查是否存在異常行為。
- bound_sympy(expr, size_oblivious=False)[source][source]¶
給定一個 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)[source][source]¶
建立由此 ShapeEnv 跟蹤的新符號
- 返回型別
表示式
- create_symbolic_sizes_strides_storage_offset(ex, source, *, symbolic_context=None)[source][source]¶
返回給定張量的符號大小和步長列表。我們會盡力用大小來表示步長,以便不引入新的符號變數。
- 返回型別
tuple[tuple[Union[int, torch.SymInt], …], tuple[Union[int, torch.SymInt], …], Union[int, torch.SymInt]]
- create_symintnode(sym, *, hint, source=None)[source][source]¶
從符號表達式建立 SymInt 值
如果您知道要建立的 SymInt 當前提示值是什麼,請將其傳入 hint。否則,傳入 None,我們將盡力猜測。
- SymInt
create_unspecified_symbol(val, source, dynamic_dim=DimDynamic.DUCK, constraint_dim=None, symbolic_context=None)[source][source]¶
建立一個具有未指定值的符號
- 返回型別
表示式
- 與標準符號相比,我們不假設值為正,也不對零或一值進行特殊處理。
create_unspecified_symint_and_symbol(value, source, dynamic_dim)[source][source]¶
- 建立一個包裝新未指定符號的 SymInt
defer_runtime_assert(orig_expr, msg, fx_node=None)[source][source]¶
- 建立在執行時檢查的斷言
引數
orig_expr (sympy.Expr) – 要斷言為 true 的布林表示式
msg (str) – 斷言失敗時顯示的訊息
- 返回型別
fx_node (Optional, torch.fx.Node) – 如果適用,是
self.graph中與表示式對應的節點
- Union[SymInt, SymFloat, SymBool]
evaluate_guards_expression(code, args)[source][source]¶
- 返回型別
fx_node (Optional, torch.fx.Node) – 如果適用,是
self.graph中與表示式對應的節點
- 預期與 produce_guards_expression() 一起使用。評估 produce_guards_expression 為給定具體引數生成的表示式。
evaluate_guards_for_args(placeholders, args, *, ignore_static=True)[source][source]¶
- 返回型別
fx_node (Optional, torch.fx.Node) – 如果適用,是
self.graph中與表示式對應的節點
- 為圖的佔位符值生成防護措施,並使用引數評估這些防護措施
evaluate_sym_node(sym_node, size_oblivious=False)[source][source]¶
- 返回型別
給定一個 SymNode,評估 sym_node.expr,並在必要時新增防護措施。
- 凍結的 ShapeEnv 將忽略在其上生成的任何進一步的防護措施,只會發出可能導致精度問題的警告。
freeze_runtime_asserts()[source][source]¶
凍結此 ShapeEnv 以停止新增延遲的執行時斷言。
- 如果您在凍結狀態下嘗試安裝新的執行時斷言,將會報錯。這可能表明存在降級違規,或者我們靜態已知為 True 但以某種方式再次檢查時無法明確解除的情況。
get_axioms(symbols=None, compute_hint=False)[source][source]¶
- 返回型別
給定表示式中的符號,它返回包含這些符號的所有執行時斷言以及所有防護措施。如果 symbols 為 None,則返回所有執行時斷言(以及所有防護措施)。
- tuple[‘sympy.logic.boolalg.Boolean’, …]
get_implications(e)[source][source]¶
- 返回型別
給定一個表示式,它返回從中得出的謂詞列表
- tuple[tuple[‘sympy.logic.boolalg.Boolean’, sympy.logic.boolalg.BooleanAtom], …]
get_nontrivial_guards()[source][source]¶
- 返回型別
返回非靜態已知(即非平凡)的防護表示式列表
- list[‘sympy.logic.boolalg.Boolean’]
get_pruned_guards(symints)[source][source]¶
- 返回型別
獲取防護措施列表,但進行修剪,使其僅提供引用傳入輸入中的 symints 的防護措施
- list[torch._guards.ShapeGuard]
ignore_fresh_unbacked_symbols()[source][source]¶
- 返回型別
指示新分配的無後端 SymInts 正在被丟棄
- Iterator[None]
檢查 sympy 符號是否符合非備份符號的命名規範
- 返回型別
fx_node (Optional, torch.fx.Node) – 如果適用,是
self.graph中與表示式對應的節點
- produce_guards(*args, **kwargs)[source][source]¶
類似於 produce_guards_verbose,但只返回非詳細的 Python 守衛表示式(不生成詳細守衛)。
- produce_guards_expression(placeholders, *, guards=None, ignore_static=True)[source][source]¶
預期與 evaluate_guards_expression() 一起使用。為給定的佔位符生成守衛,並返回一個字串表示式,該表示式在給定佔位符的具體值的情況下,由 evaluate_guards_expression 進行評估。
- 返回型別
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, langs=('python', 'verbose_python'))[source][source]¶
生成守衛字串列表,當在定義了所有源的張量的上下文中評估時,這些字串根據列表中的守衛是否評估為 True 來返回 True 或 False。主要由 Dynamo 使用,但也對守衛的手動測試很有幫助(參見 evaluate_guards_for_args)。
為了方便測試,允許源為一個 str 型別,在這種情況下,我們將假定它是一個 LocalSource。
simplified 允許你省略鴨子尺寸(duck sizing)、相等性以及 0/1 守衛。這在你不關心樣板守衛時對於測試非常有用,也可能對使用者輸出有幫助(但請注意;某些相等性守衛是非平凡的!如果簡化輸出也能打印出來就好了)。它是私有的,因為它不適用於正常使用。
預設情況下,以 Python 形式和帶有詳細註釋的 Python 形式(verbose)返回守衛。
- 返回型別
list[_ShapeGuardsHelper]
- set_unbacked_var_to_val(k, v)[source][source]¶
僅在 propagate_real_tensors 時使用;為非備份符號註冊一個值,這可以作為最後的手段來解析提示。