機器學習系統與基礎設施

torch.compile

PyTorch 平常是即時執行(eager)的——每個運算在它那行 Python 跑到時就立刻執行——這對除錯極為方便,卻把效能留在桌上沒拿。torch.compile 保留那份即時的手感,同時透明地把程式擷取成一張圖再編譯,於是你只要在模型外包一行,就能拿到編譯器層級的融合與排程。

它分兩大階段運作。TorchDynamo 掛進 CPython 的框架評估(frame evaluation),把 Python 位元碼追蹤成 FX 圖,遇到不支援的構造時就插入「圖中斷」(graph break)退回即時執行,所以它能處理任意 Python,而不要求一個完全可追蹤的靜態程式。擷取到的圖交給後端——預設是 TorchInductor——由它降階並為 GPU 生成融合的 Triton 核心(CPU 則生成 C++/OpenMP)。守衛(guard)記錄一張編譯圖在何種假設下仍然有效——形狀、型別——一旦守衛失敗就重新編譯。AOTAutograd 連反向傳播也一併追蹤,所以被編譯的不只是推論,連訓練也算進去。

頻繁的圖中斷或形狀變動會引發重新編譯、侵蝕加速效果,所以實務上的功夫在於減少中斷、穩住形狀(或改用動態形狀模式)。當它合用時,幾乎不改程式碼就能交付手調融合堆疊的大部分好處——這正是 PyTorch 2 設計的招牌承諾。

又称
TorchDynamoTorchInductorPyTorch 2 compile