PyTorch 的即時執行模式在原型開發階段很方便,但在推理性能上存在明顯短板。每個張量操作獨立啟動 kernel、獨立訪問顯存,導致內存帶寬成為瓶頸GPU 算力無法充分利用。
torch.compile 通過提前構建計算圖來解決這個問題。它的核心策略是操作融合和緩沖區復用:第一次調用需要編譯而之后的推理會快很多。在 PyTorch 官方的基準測試中,各種模型平均獲得了 20%-36% 的加速。
即時執行意味著每個操作獨立運行。一個 32 層、每層 100 個操作的模型,前向傳播一次就要觸發3200 次 kernel 啟動,這些開銷全部疊加到推理延遲里。
![]()
延遲飆升的根本原因是什么?內存才是即時執行成為瓶頸。Nvidia H100 能跑到 300+ TFLOPs但內存帶寬只有約 3 TB/s。所以內存搬運的代價太高了,即時執行模式在規模化場景下根本撐不住。每個操作至少要做三次內存訪問:從 VRAM 讀輸入張量、把中間結果寫回 VRAM、再從 VRAM 讀權重。
比如說這個簡單的表達式 x = torch.relu(torch.matmul(a, b) + c) ,即時執行模式下至少要六次內存傳輸:分別讀 a、b、c,寫矩陣乘法結果,讀這個結果,寫最終輸出。內存帶寬很快就被打滿了,GPU 核心反而閑著。
![]()
所以問題的本質在于:獨立的操作沒法融合內存傳輸,造成大量冗余的 VRAM 訪問。
生產環境下情況更糟。CPU 要處理成千上萬的并發請求,花在 PyTorch 調度器上的時間可能比真正計算還多,吞吐量被嚴重拖累。
計算圖
torch.compile 要解決的就是這種逐操作的開銷。它會提前捕獲整個計算圖,核心靠兩個組件:TorchDynamo 是一個 Python JIT 編譯器,負責攔截字節碼執行;TorchInductor 是后端,為 GPU 生成優化過的 Triton kernel,為 CPU 生成 C++ 代碼。
![]()
![]()
PyTorch 里這個計算圖叫 FX Graph,把操作表示成有向無環圖(DAG)的節點。調用 torch.compile 時,TorchDynamo 分析 Python 字節碼,生成 FX 圖:節點是張量操作,邊是數據依賴。
TorchInductor 拿到 FX 圖后會做三件事:操作融合、內存規劃、Triton 自動調優。
操作融合
還是前面那個例子 x = torch.relu(torch.matmul(a, b) + c)。即時執行要六次 VRAM 傳輸,TorchInductor 把它們融合成一個 Triton kernel:先把 a、b、c 的分塊加載到片上 SRAM(共享內存),在寄存器里算矩陣乘法,加法和 ReLU 也在寄存器里做完,最后只把結果寫回 VRAM。
內存傳輸從 6 次降到 2 次,減少了 3 倍。
內存規劃
TorchInductor 不會給每個中間結果都分配新內存,而是讓生命周期不重疊的緩沖區共用同一塊空間——和編譯器復用寄存器是一個思路。這相當于在整個計算圖上做全局緩沖區復用,對激活模式不規則的 Transformer 模型特別有效。另一個好處是壓低峰值內存占用,能跑更大的 batch。
Triton 自動調優
Triton 自動調優會針對具體硬件和輸入 shape,自動搜索最優的 kernel 配置:tile 大小、線程塊維度、流水線深度這些參數都不用手動調。
結果
第一次調用時,大模型的編譯可能要幾分鐘。但后續調用只需要幾毫秒加載預編譯好的 kernel。初始開銷會在后續推理中攤銷掉,特別適合生產場景下模型持續運行的情況。冷啟動慢一點,后面每個請求都快很多。
PyTorch 官方在 165 種模型(Transformer、CNN、擴散模型都有)上做了基準測試,torch.compile 在 float32 精度下平均加速 20%,開啟自動混合精度(AMP)后加速 36%。
用起來也很簡單:
import torch
# For a model
model = YourModel()
compiled_model = torch.compile(model)
# Or for a function, also enables Triton autotuning
@torch.compile(backend="inductor")
def forward_pass(x, weights):
return torch.relu(torch.matmul(x, weights))
output = compiled_model(input_tensor)
這就是 torch.compile 的大致原理:不再為每個操作單獨啟動 kernel、單獨搬運數據,而是用一個 kernel 處理多個操作,共享內存緩沖區。內存瓶頸的影響被大幅削減,GPU 算力利用率上去了。
總結
這種加速具有普適性,不只對大語言模型有效,CNN、擴散模型等架構同樣適用。torch.compile 的價值在于:它把原本需要手寫 CUDA 或 Triton 才能實現的優化,封裝成了一行代碼的事情。對于生產環境下的推理服務,這是目前性價比最高的優化手段之一。
https://avoid.overfit.cn/post/271bbf42f4a946c3a92b8a9745e223db
作者:Aryan Keluskar
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.