捷徑

torch.compile

torch.compile(model: Callable[[_InputT], _RetT], *, fullgraph: bool = False, dynamic: Optional[bool] = None, backend: Union[str, Callable] = 'inductor', mode: Optional[str] = None, options: Optional[Dict[str, Union[str, int, bool]]] = None, disable: bool = False) Callable[[_InputT], _RetT][原始碼][原始碼]
torch.compile(model: None = None, *, fullgraph: bool = False, dynamic: Optional[bool] = None, backend: Union[str, Callable] = 'inductor', mode: Optional[str] = None, options: Optional[Dict[str, Union[str, int, bool]]] = None, disable: bool = False) Callable[[Callable[[_InputT], _RetT]], Callable[[_InputT], _RetT]]

使用 TorchDynamo 和指定的後端來優化給定的模型/函數。如果您正在編譯 torch.nn.Module,您也可以使用 torch.nn.Module.compile() 來就地編譯模組,而無需更改其結構。

具體來說,對於在編譯區域內執行的每個 frame,我們將嘗試編譯它,並將編譯結果緩存在程式碼物件上以供將來使用。如果先前的編譯結果不適用於後續呼叫(這稱為“guard failure”),則單個 frame 可能會被編譯多次,您可以使用 TORCH_LOGS=guards 來除錯這些情況。最多可以將 torch._dynamo.config.cache_size_limit 個編譯結果與一個 frame 關聯,預設值為 8;此時我們將退回到 eager 模式。請注意,編譯快取是每個程式碼物件,而不是 frame;如果您動態建立函數的多個副本,它們將共享同一個程式碼快取。

參數
  • model (Callable) – 要優化的模組/函數

  • fullgraph (bool) – 如果為 False(預設值),torch.compile 會嘗試發現函數中可編譯的區域,以便進行優化。如果為 True,則我們要求將整個函數捕獲到單個圖中。如果這不可能(也就是說,如果存在圖中斷),則會引發錯誤。

  • dynamic (boolNone) – 使用動態形狀追蹤。當此值為 True 時,我們將預先嘗試產生一個盡可能動態的 kernel,以避免在大小更改時重新編譯。這可能並不總是有效,因為某些操作/優化將強制進行專業化;使用 TORCH_LOGS=dynamic 來除錯過度專業化。當此值為 False 時,我們將永遠不會產生動態 kernel,我們將始終進行專業化。預設情況下(None),我們會自動檢測是否發生了動態變化,並在重新編譯時編譯更動態的 kernel。

  • backend (strCallable) –

    要使用的後端。

  • mode (str) –

    可以是 “default”、“reduce-overhead”、“max-autotune” 或 “max-autotune-no-cudagraphs”。

    • ”default” 是預設模式,在效能和額外負擔之間取得良好的平衡。

    • ”reduce-overhead” 是一種使用 CUDA graphs 降低 Python 額外負擔的模式,適用於小批量。降低額外負擔可能會增加記憶體用量,因為我們會快取調用所需的工作區記憶體,以便在後續執行中不必重新分配。不保證降低額外負擔一定有效;目前,我們只降低 CUDA only graphs 的額外負擔,而且不會修改輸入。在其他情況下,CUDA graphs 可能不適用;請使用 TORCH_LOG=perf_hints 進行除錯。

    • ”max-autotune” 是一種在支援的裝置上利用 Triton 或基於樣板的矩陣乘法,以及在 GPU 上利用基於 Triton 的卷積的模式。預設情況下,它會在 GPU 上啟用 CUDA graphs。

    • ”max-autotune-no-cudagraphs” 是一種與 “max-autotune” 類似,但不使用 CUDA graphs 的模式。

    • 要查看每種模式設定的確切配置,您可以呼叫 torch._inductor.list_mode_options()

  • options (dict) –

    要傳遞給後端的選項字典。一些值得嘗試的選項是:

    • epilogue_fusion,將逐點運算融合到樣板中。需要同時設定 max_autotune

    • max_autotune,將進行分析以選擇最佳的矩陣乘法配置。

    • fallback_random,在除錯準確性問題時很有用。

    • shape_padding,填充矩陣形狀以更好地對齊 GPU 上的載入,尤其適用於 tensor cores。

    • triton.cudagraphs,將使用 CUDA graphs 降低 Python 的額外負擔。

    • trace.enabled,是最有用的除錯標記。

    • trace.graph_diagram,將在融合後顯示圖表的圖片。

    • 對於 inductor,您可以呼叫 torch._inductor.list_options() 來查看其支援的完整配置列表。

  • disable (bool) – 為了測試,將 torch.compile() 變成無操作 (no-op)。

範例

@torch.compile(options={"triton.cudagraphs": True}, fullgraph=True)
def foo(x):
    return torch.sin(x) + torch.cos(x)

文件

存取 PyTorch 的全面開發者文件

檢視文件

教學

取得適合初學者和進階開發者的深入教學課程

檢視教學

資源

尋找開發資源並獲得您的問題解答

檢視資源