PyTorch: Kako torch.compile postiže ubrzanje do 10× kroz kernel fusion
PyTorch kompajler torch.compile postiže ubrzanje do 10× na GPU-ima eliminacijom redundantnog pisanja u globalnu memoriju kroz tehniku kernel fusion. Umjesto zasebnih GPU kernela za svaku operaciju, Inductor kompajler automatski spaja zavisne operacije u jedan kernel koji međuvrijednosti drži u brzim registrima procesora.
Ovaj članak generiran je uz pomoć umjetne inteligencije na temelju primarnih izvora.
PyTorch-ov kompajler torch.compile postiže ubrzanja do 10× na GPU-ima bez ijedne promjene koda modela. Ključni mehanizam iza tog ubrzanja jest kernel fusion — tehnika spajanja više operacija u jedan GPU kernel kako bi se eliminiralo skupo pisanje međuvrijednosti u globalnu memoriju.
Zašto GPU memorija koči treniranje modela?
GPU računanje nema jednoliku cijenu svih operacija. Pokretanje svakog GPU kernela nosi fiksni overhead, a svako pisanje međuvrijednosti u globalnu memoriju stotine je puta sporije od operacija u registrima samog procesora. Bez kompajlera, PyTorch izvodi svaku operaciju (multiply, add, sigmoid) kao zaseban kernel s vlastitim upisima i čitanjima iz globalne memorije.
Konkretno, tri uzastopne pointwise operacije (x * w, + b, .sigmoid()) bez fusiona zahtijevaju 5 čitanja i 3 upisa — ukupno 8 punih tensor I/O operacija. Nakon kernel fusiona: 3 čitanja + 1 upis = 4 operacije, što je 50% smanjenje memorijskog prometa.
Kako torch.compile automatski spaja kernele?
torch.compile koristi Inductor kompajler koji analizira graf računanja i primjenjuje više tipova fusiona:
- Vertikalni fusion (najčešći): spaja zavisne operacije tako da međuvrijednosti ostaju u GPU registrima. Eliminira sve privremene tenzore koji bi inače morali u globalnu memoriju.
- Pointwise fusion: spaja operacije element po element (
multiply → add → sigmoid) u jedan Triton kernel. - Reduction fusion: kombinira redukcijske operacije (npr. sumacije) s okolnim operacijama, kritično za batch normalizaciju.
- GEMM + Epilogue fusion: dodaje bias i aktivacijske funkcije direktno na kraj množenja matrica.
- Horizontalni fusion: izvodi nezavisne operacije nad istim ulazom (npr.
sin(x)icos(x)) paralelno u jednom kernelu.
Što se dogodi s kernelima u praksi?
Triton kernel generiran fusionom drži sve međuvrijednosti u GPU registrima i tek na kraju piše rezultat:
Load x, Load w, Load b
→ tmp = x * w (ostaje u registrima)
→ tmp = tmp + b (ostaje u registrima)
→ tmp = sigmoid(tmp)(ostaje u registrima)
Store rezultat (jedini upis u globalnu memoriju)
Inductor automatski imenuje fusionirane kernele konvencijom triton_poi_fused_* (pointwise) i triton_per_fused_* (reduction), što je vidljivo postavljanjem TORCH_LOGS="output_code" varijable.
Rezultati i primjena
PyTorch zajednica dokumentira ubrzanja do 10× u realnim modelima zahvaljujući kombinaciji fusiona, eliminacije kernel launch overheada i smanjenog memorijskog prometa. Sve što je potrebno je jedan redak koda:
model = torch.compile(model)
Inductor kompajler zatim samostalno gradi optimalni Triton ili CUDA kernel, bez potrebe za ručnim pisanjem GPU koda. Ova automatizacija čini torch.compile jednim od najvažnijih alata za production ML treniranje i inference u PyTorch ekosustavu.
Česta pitanja
- Što je kernel fusion u PyTorchu i zašto ubrzava treniranje?
- Kernel fusion je tehnika spajanja više GPU operacija u jedan kernel, čime međuvrijednosti ostaju u brzim registrima umjesto da se pišu u globalnu memoriju. To smanjuje broj memorijskih operacija i pokretanja kernela, što su najčešći uska grla GPU računanja.
- Treba li mijenjati kod da bi torch.compile radio?
- Ne. Dovoljno je dodati dekorator torch.compile() — Inductor kompajler automatski detektira i primjenjuje sve tipove kernel fusiona bez ikakvih promjena u modelu.
- Koliko konkretno kernel fusion smanjuje memorijski promet?
- U tipičnom primjeru pointwise fusion, broj memorijskih operacija pada s 8 na 4 (50% smanjenje), a broj GPU kernela s 3 na 1. Ukupno ubrzanje može doseći 10× ovisno o arhitekturi modela.
📬 AI vijesti u tvoj inbox
Dnevni digest po tvojoj mjeri — biraš teme, izvore i ritam. Odjava jednim klikom.
Povezane vijesti
CNCF: HAMi postao Incubating projekt — virtualizacija GPU-a za Kubernetes AI opterećenja
LF AI & Data: 'kontekst je novo usko grlo' — otvorena infrastruktura Docling i DocLang
PyTorch: Triton 3.7 donosi plugin-proširenja i TLX — do +15% throughputa na AMD MI350