🟡 📦 Open Source Objavljeno: · 3 min čitanja ·

PyTorch: Kako torch.compile postiže ubrzanje do 10× kroz kernel fusion

Urednička ilustracija: 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) i cos(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.