PyTorch Compile: Wie Kernel Fusion bis zu 10× Speedup erzeugt
PyTorch's Inductor-Compiler nutzt Kernel Fusion, um mehrere abhängige GPU-Operationen automatisch in einen einzigen Triton-Kernel zu übersetzen. Ohne Fusion erzeugt jede torch-Operation (z. B. Multiplikation, Addition, Sigmoid) einen eigenen Kernel-Launch mit eigenem Speicherzugriff. Im Beispiel des Blogposts werden drei separate Triton-Kernel (Multiply, Add, Sigmoid) zu einem einzigen fusionierten Kernel zusammengefasst: Die Eingaben werden einmalig geladen, alle drei Operationen in Folge ausgeführt, und nur das Endergebnis wird in den globalen Speicher geschrieben. Zwischenergebnisse verbleiben in schnellen GPU-Registern. Das Ergebnis: Kernel-Launches sinken von 3 auf 1, zwei Intermediate-Buffer entfallen, und der Memory-Traffic halbiert sich von 8 auf 4 Speicheroperationen. Neben der beschriebenen vertikalen Pointwise Fusion setzt Inductor auch Reduction Fusion (für Operationen wie Batch Normalization), GEMM + Epilogue Fusion (Matrix-Multiply mit angehängtem Bias/ReLU), Prologue Fusion sowie horizontale Fusion ein, bei der unabhängige Operationen wie sin(x) und cos(x) in einem einzigen Kernel parallel ausgeführt werden.
- Ohne Fusion: 8 Speicheroperationen (5 Reads, 3 Writes); mit Fusion: 4 (3 Reads, 1 Write) — 50 % weniger Memory-Traffic
- Zwischenergebnisse (tmp2, tmp4) bleiben in GPU-Registern und schreiben nie in den langsameren globalen Speicher
- GEMM + Epilogue Fusion: Bias-Addition und ReLU werden direkt nach der Matrixmultiplikation im selben Kernel ausgeführt
- Horizontale Fusion: Unabhängige Ops wie sin(x) und cos(x) teilen sich einen Kernel-Launch und laden x nur einmal
- Vollständiger Quellcode der Triton-Kernel ist im verlinkten Git Repository verfügbar
Frag die KI zum Artikel
Folgefragen zu Headline, Quelle und Volltext — Antwort streamt in wenigen Sekunden.
Verwandte Beiträge
- FORSCHUNGarxiv.org3w
GraphMend eliminiert FX Graph Breaks in PyTorch 2 – bis zu 75% weniger Latenz
- FORSCHUNGreddit.com1w
LLM-Compiler-Stack von Grund auf: Interaktiver IR-Pipeline-Überblick mit 0.96× PyTorch-Performance
- LAUNCHdeveloper.nvidia.com1d
NVIDIA CompileIQ automatisiert Compiler-Tuning für GPU-Kernel
PyTorch Compile: Wie Kernel Fusion bis zu 10× Speedup erzeugt
PyTorch's Inductor-Compiler nutzt Kernel Fusion, um mehrere abhängige GPU-Operationen automatisch in einen einzigen Triton-Kernel zu übersetzen. Ohne Fusion erzeugt jede torch-Operation (z. B. Multiplikation, Addition, Sigmoid) einen eigenen Kernel-Launch mit eigenem Speicherzugriff. Im Beispiel des Blogposts werden drei separate Triton-Kernel (Multiply, Add, Sigmoid) zu einem einzigen fusionierten Kernel zusammengefasst: Die Eingaben werden einmalig geladen, alle drei Operationen in Folge ausgeführt, und nur das Endergebnis wird in den globalen Speicher geschrieben. Zwischenergebnisse verbleiben in schnellen GPU-Registern. Das Ergebnis: Kernel-Launches sinken von 3 auf 1, zwei Intermediate-Buffer entfallen, und der Memory-Traffic halbiert sich von 8 auf 4 Speicheroperationen. Neben der beschriebenen vertikalen Pointwise Fusion setzt Inductor auch Reduction Fusion (für Operationen wie Batch Normalization), GEMM + Epilogue Fusion (Matrix-Multiply mit angehängtem Bias/ReLU), Prologue Fusion sowie horizontale Fusion ein, bei der unabhängige Operationen wie sin(x) und cos(x) in einem einzigen Kernel parallel ausgeführt werden.
- Ohne Fusion: 8 Speicheroperationen (5 Reads, 3 Writes); mit Fusion: 4 (3 Reads, 1 Write) — 50 % weniger Memory-Traffic
- Zwischenergebnisse (tmp2, tmp4) bleiben in GPU-Registern und schreiben nie in den langsameren globalen Speicher
- GEMM + Epilogue Fusion: Bias-Addition und ReLU werden direkt nach der Matrixmultiplikation im selben Kernel ausgeführt
- Horizontale Fusion: Unabhängige Ops wie sin(x) und cos(x) teilen sich einen Kernel-Launch und laden x nur einmal
- Vollständiger Quellcode der Triton-Kernel ist im verlinkten Git Repository verfügbar
Frag die KI zum Artikel
Folgefragen zu Headline, Quelle und Volltext — Antwort streamt in wenigen Sekunden.
Verwandte Beiträge
- FORSCHUNGarxiv.org3w
GraphMend eliminiert FX Graph Breaks in PyTorch 2 – bis zu 75% weniger Latenz
- FORSCHUNGreddit.com1w
LLM-Compiler-Stack von Grund auf: Interaktiver IR-Pipeline-Überblick mit 0.96× PyTorch-Performance
- LAUNCHdeveloper.nvidia.com1d
NVIDIA CompileIQ automatisiert Compiler-Tuning für GPU-Kernel