PyTorch 2.0:全新 Torch Inductor!

Find AI Tools
No difficulty
No complicated process
Find ai tools

PyTorch 2.0:全新 Torch Inductor!

Table of Contents:

  1. 簡介
  2. Torch Inductor 的設計原則
  3. Torch Inductor 使用的關鍵技術
  4. 迴圈層級 AR 和 IR
  5. 運算圖的降階
  6. 排程與優化
  7. 編碼生成
  8. GPU 和 CPU 的效能結果
  9. Torch Inductor 的程式碼庫
  10. 結論

🔥 Torch Inductor:PyTorch 2.0 的新型編譯器後端 💪

隨著 PyTorch 2.0 的到來,讓我們來介紹一下 Torch Inductor,這是一個全新的編譯器後端,為 PyTorch 帶來了嶄新的特性。設計 Torch Inductor 的時候,我們遵循了三個關鍵原則:

  1. 🔑 Torch Inductor 是 PyTorch 原生的:這意味著 Inductor 使用了與 PyTorch Eager 極為相似的抽象層,能夠完整地捕捉 PyTorch 的所有行為。

  2. 🔑 Inductor 堅持以 Python 為本:我們全力支持 Python,因此 Inductor 完全使用 Python 編寫,這使得更容易進行擴展和修改。

  3. 🔑 追求通用性:Inductor 的目標是廣泛應用,而非深入某一領域。我們專注於解決複雜的運算和優化問題,以確保設計的普遍性和可擴展性。

Torch Inductor 使用了三個關鍵技術:

  1. 定義由運行迴圈層級 IR:在 Inductor 中,核心編譯 IR 是由迴圈層級 (Loop level) 的 Python 可調用物件組成。這意味著 IR 的執行和代碼生成都是通過執行這些可調用物件完成的,這是一種令人驚艷的編譯器技巧。

  2. 支援動態形狀和步長:從開始就開始,Inductor 就完全支援動態形狀和步長。Inductor 使用了一個符號數學庫 Senpai,以便推理輸入形狀並生成不依賴於特定輸入大小的代碼。

  3. 借鑒國際頂尖的語言:我們希望重用現有的論文成果和語言特性,因此我們從 Tristan 語言中吸取靈感。Tristan 語言是由 OpenAI 的 Philip Tillet 開發的一種高性能語言,而 Inductor 則生成易於理解的 Tristan 代碼,以及針對 CPU 的 C++ 代碼。

1. 簡介

Torch Inductor 是一個全新的編譯器後端,用於 PyTorch 2.0。它以 PyTorch 原生的方式設計,並以 Python 編寫,旨在提供更強大的編譯和優化能力。本文將介紹 Torch Inductor 的設計原則和使用的關鍵技術,並提供一些 GPU 和 CPU 的效能結果。

2. Torch Inductor 的設計原則

在設計 Torch Inductor 時,我們遵循了三個關鍵原則:

  • 原則 1:Torch Inductor 是 PyTorch 原生的。這意味著 Inductor 使用了與 PyTorch Eager 極為相似的抽象層,能夠完整地捕捉 PyTorch 的所有行為。

  • 原則 2:Inductor 堅持以 Python 為本。我們全力支持 Python,因此 Inductor 完全使用 Python 編寫,這使得更容易進行擴展和修改。

  • 原則 3:追求通用性。Inductor 的目標是廣泛應用,而非深入某一領域。我們專注於解決複雜的運算和優化問題,以確保設計的普遍性和可擴展性。

3. Torch Inductor 使用的關鍵技術

Torch Inductor 使用了三個關鍵技術,包括:

  • 技術 1:定義由運行迴圈層級 IR。在 Inductor 中,核心編譯 IR 是由迴圈層級 (Loop level) 的 Python 可調用物件組成。這種設計使得代碼生成和分析成為可能,並為編譯器帶來更大的靈活性。

  • 技術 2:支援動態形狀和步長。Inductor 使用了一個符號數學庫 Senpai,以便推理輸入形狀並生成不依賴於特定輸入大小的代碼。這使得 Inductor 更加靈活,能夠處理各種不同形狀的輸入。

  • 技術 3:借鑒國際頂尖的語言。我們從 Tristan 語言中吸取靈感,這是一門針對高性能計算的新興語言。Inductor 生成易於理解的 Tristan 代碼,以及針對 CPU 的 C++ 代碼,使得高性能代碼的編寫變得更加容易。

4. 迴圈層級 AR 和 IR

為了更好地理解 Torch Inductor 的運作原理,我們首先介紹迴圈層級 (Loop level) AR 和 IR。在 Inductor 中,核心編譯 IR 是由迴圈層級的 Python 可調用物件組成。這種設計使得我們能夠以一種更靈活的方式生成代碼。

迴圈層級 AR 是由一個內部函數組成,該函數接受一個 Senpai 表達式的列表作為輸入,這些表達式代表了我們要生成的坐標。在函數的主體中,我們使用 ops.load 兩次和 ops.add 一次來完成計算。透過替換 ops 函數,我們可以輕鬆地進行分析和代碼生成。

此外,在編譯過程中,我們還使用 FX 來追踪這個運行時的 IR,從而得到更易於操作的 IR。這讓我們可以更方便地寫低階的代碼。

5. 運算圖的降階

Inductor 的運算圖降階 (Graph lowering) 階段將原始的運算符集合降階為更精簡的運算符集合,約有 250 個運算符。這個過程使用了 AOT Autograd 和 Prim Torch。

這一步的目的是擷取運算圖的核心部分,降低其複雜性,使得後續的優化和代碼生成過程更容易進行。通過運算圖的降階,我們只需要操作單個元素而不是完整的張量,從而提高了計算效率。

6. 排程與優化

在 Inductor 的排程階段,我們決定哪些部分會被融合在一起,同時進行內存規劃、瓦片化等其他優化工作。排程的目的是對運算圖進行進一步的優化,以獲得更高的效能和更低的內存占用。

透過排程階段的優化,我們能夠為各種不同的硬體後端生成更高效的代碼,提高整體的執行效能。

7. 編碼生成

編碼生成是 Inductor 的最後一個階段,它主要負責根據不同的後端生成適合的代碼。Inductor 支援 Trident 代碼和 C++ 代碼的生成。

Trident 語言是一種介於 Cuda 和現有 DSL 間的高階語言,它提供了更簡潔的語法和更高的性能。通過 Trident 代碼的生成,我們可以編寫高效的代碼,包括複雜的矩陣運算。

8. GPU 和 CPU 的效能結果

Torch Inductor 在 GPU 和 CPU 上都取得了令人印象深刻的效能結果。在 GPU 上,Inductor 在大型實際基準測試組上的平均加速比達到了 1.86。而在和 Intel Pi torch 團隊合作的 CPU 測試中,我們獲得了最高 1.26 倍的加速比。

這些結果不僅證明了 Inductor 對於 GPU 的支援,也顯示了它作為一個通用編譯器的能力。我們不僅希望支援多種硬體後端,也希望藉此提供更廣泛的使用場景。

9. Torch Inductor 的程式碼庫

Torch Inductor 的程式碼庫位於 PyTorch 的儲存庫中,在這裡你可以找到所有相關的程式碼和說明。請點擊 此處 以訪問程式碼庫。

10. 結論

Torch Inductor 是一個全新的編譯器後端,為 PyTorch 2.0 帶來了全新的能力。它以 PyTorch 為本,並使用 Python 編寫,在設計上追求通用性和可擴展性。通過使用新的核心技術,如迴圈層級 AR 和 IR,Torch Inductor 能夠生成高效且可擴展的代碼。我們期待進一步改進 Inductor 的效能,以使其更適合各種不同的應用場景。

金句摘錄

  • 🔥 Torch Inductor 是 PyTorch 2.0 的新型編譯器後端,為 PyTorch 帶來了嶄新的特性!💪

  • 在 Torch Inductor 的設計中,我們遵循了三個關鍵原則:PyTorch 原生、以 Python 為本以及追求通用性。

  • Torch Inductor 使用了三個關鍵技術:迴圈層級 AR 和 IR、支援動態形狀和步長,以及借鑒國際頂尖的語言。

  • Inductor 的核心編譯 IR 是由迴圈層級的 Python 可調用物件組成,這為代碼生成和分析帶來了更大的靈活性。

  • 運算圖的降階將原始的運算符集合降階為更精簡的運算符集合,以提高計算效率。

  • 在 Inductor 的排程階段,我們進行了各種優化,包括融合、內存規劃和瓦片化,以提高整體效能。

  • Inductor 支援 Trident 代碼和 C++ 代碼的生成,使得高性能代碼的編寫變得更加容易。

  • Torch Inductor 在 GPU 和 CPU 上都取得了令人印象深刻的效能結果,證明了它作為一個通用編譯器的能力。

  • Torch Inductor 的程式碼庫位於 PyTorch 的儲存庫中,你可以在這裡找到所有相關的程式碼和說明。

  • Torch Inductor 是一個全新的編譯器後端,為 PyTorch 2.0 帶來了全新的能力。我們期待進一步改進 Inductor 的效能,以使其更適合各種不同的應用場景。

常見問題解答

Q: Torch Inductor 支援哪些硬體後端? A: Torch Inductor 支援各種硬體後端,包括 GPU 和 CPU。它通過生成 Trident 代碼和 C++ 代碼,在不同的後端上提供高效並且可擴展的代碼。

Q: Inductor 對 GPU 的效能提升有多大? A: 在大型實際基準測試組上,Torch Inductor 在 GPU 上的平均加速比達到了 1.86。這顯示了 Inductor 在 GPU 上的良好效能。

Q: Inductor 的程式碼庫位於哪裡? A: Torch Inductor 的程式碼庫位於 PyTorch 的儲存庫中,你可以在這裡找到它。

Q: Inductor 只支援 PyTorch 2.0 嗎? A: 是的,Torch Inductor 是針對 PyTorch 2.0 設計的,並且與其他版本的 PyTorch 不兼容。

Q: Inductor 的設計原則有哪些優勢? A: Inductor 的設計原則使其具有與 PyTorch 兼容、用 Python 編寫並具有通用性的優勢。這使得 Inductor 更容易擴展和修改,並且能夠支援各種不同的應用場景。

Q: 如何獲取 Torch Inductor ? A: Torch Inductor 的程式碼庫位於 PyTorch 的儲存庫中,你可以在這裡找到它。請遵循相應的指示以獲取和安裝 Torch Inductor。

Most people like

Are you spending too much time looking for ai tools?
App rating
4.9
AI Tools
100k+
Trusted Users
5000+
WHY YOU SHOULD CHOOSE TOOLIFY

TOOLIFY is the best ai tool source.