評價此頁

torch.compiler.set_stance#

torch.compiler.set_stance(stance='default', *, skip_guard_eval_unsafe=False, force_backend=None)[source]#

設定編譯器的當前狀態。可以用作函式、上下文管理器或裝飾器。請勿在 torch.compile 區域內使用此函式,否則會引發錯誤。

@torch.compile
def foo(x): ...


@torch.compiler.set_stance("force_eager")
def bar():
    # will not be compiled
    foo(...)


bar()

with torch.compiler.set_stance("force_eager"):
    # will also not be compiled
    foo(...)

torch.compiler.set_stance("force_eager")
# will also not be compiled
foo(...)
torch.compiler.set_stance("default")

# will be compiled
foo(...)
引數
  • stance (str) –

    要設定給編譯器的狀態。有效值如下:

    • ”default”: 預設狀態,用於正常編譯。

    • ”force_eager”: 忽略所有 torch.compile 指令。

    • ”eager_on_recompile”: 當需要重新編譯時,以急切模式執行程式碼。如果存在對輸入有效的快取編譯程式碼,仍將使用它。

    • ”fail_on_recompile”: 重新編譯函式時引發錯誤。

    • ”eager_then_compile”: 第一次呼叫時以急切模式執行,然後在此後的呼叫中編譯。這對於動態形狀很有益,因為它允許從前兩次呼叫中推斷出動態性,而不是在第一次呼叫時浪費靜態編譯。

    • ”aot_eager_then_compile”: 第一次呼叫時以 AOT 急切模式執行,以獲得啟用檢查點的記憶體優勢,然後在此後的呼叫中編譯。與 eager_then_compile 類似,透過避免初始靜態編譯來改進動態形狀的處理。

  • skip_guard_eval_unsafe (bool) –

    一個僅執行區分保護程式的標誌。注意——此標誌不安全,並且只有在您的設定滿足以下條件時才應使用。

    torch.compile 使用保護程式系統來支援重新編譯並在執行時選擇要執行的已編譯工件。這些保護程式雖然高效,但會增加一些開銷,在需要最佳化以獲得最小保護程式處理時間的場景中可能會影響效能。此 API 使您能夠停用保護程式評估,假設您已經使用足夠多樣的輸入預熱了已編譯模型。此假設意味著,在預熱階段之後,將不再需要進一步的重新編譯。如果此假設失敗,則存在靜默產生不正確結果的風險(因此 API 名稱中帶有“不安全”一詞)。

  • force_backend (Optional[Union[str, Callable[[...], Any]]]) – 如果 stance 是 “default”,則此引數可用於強制 torch.compile 使用特定的後端。否則,會引發錯誤。