Transformers 文件

torch.compile

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

torch.compile

torch.compile 將 PyTorch 程式碼編譯成最佳化的核心,顯著加快推理速度。此功能依賴於 TorchDynamo 將程式碼編譯成圖,並依賴於 TorchInductor 將圖進一步編譯成最佳化的核心。它是一個強大的最佳化工具,在許多情況下,只需新增一行程式碼即可。

使用 `torch.compile` 封裝模型,即可編譯並返回最佳化後的模型。

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto")
compiled_model = torch.compile(model)

首次呼叫 `torch.compile` 會很慢,因為模型需要編譯。後續對已編譯模型的呼叫會快得多,因為它無需再次編譯。

有幾個引數可以自定義編譯過程。下面列出了其中兩個更重要的引數。有關引數的完整列表,請參閱 torch.compile 文件

模式

`mode` 引數提供了多種編譯效能選項。嘗試不同的模式,看看哪種最適合你的用例。

  • `default` 是速度和記憶體之間的平衡選項。
  • `reduce-overhead` 以犧牲少量記憶體為代價減少 Python 開銷,但它可能更快。
  • `max-autotune` 提供最快的速度,但編譯時間更長。
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto")
compiled_model = torch.compile(model, mode="reduce-overhead")

Fullgraph

Fullgraph 嘗試將整個模型編譯成單個圖以最大限度地提高效能。如果遇到圖中斷,`torch.compile` 將引發錯誤,這意味著它無法將模型編譯成單個圖。

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("google/gemma-2b", device_map="auto")
compiled_model = torch.compile(model, mode="reduce-overhead", fullgraph=True)

基準測試

請參閱下表,瞭解在不同 GPU 和批處理大小下,針對不同視覺任務,在同一影像上啟用和停用 torch.compile 時平均推理時間(毫秒)的效能基準比較。

在下表中選擇**子集**以切換不同的 GPU,以及 PyTorch nightly 2.1.0dev 和啟用 `reduce-overhead` 模式的 torch.compile 的基準測試。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.