Zkratka proGraphics Processing Unitgé pé úTakéGraphics Processing UnitPokročilý
Definice
GPU je specializovaný procesor navržený pro masivně paralelní výpočty, zejména vykreslování grafiky a zpracování maticových operací. Oproti CPU má mnoho jednodušších výpočetních jednotek, které současně provádějí podobné instrukce nad velkým objemem dat, například pixely, vertexy, texturami nebo tenzory ve strojovém učení.
Proč GPU počítá jinak než CPU
GPU je čip stavěný na velký počet malých výpočtů, které se dají provádět současně. CPU se hodí na větvení, řízení programu a úlohy s nepravidelným tokem instrukcí. GPU naopak exceluje tam, kde stejný postup běží nad mnoha prvky dat: nad pixely obrazu, vrcholy modelu, částicemi simulace nebo prvky matice.
Grafický procesor proto nemá jen „vyšší výkon“ v obecném smyslu. GPU nabízí jiný kompromis: obrovskou propustnost výměnou za citlivost na přenosy dat, přístup do paměti a rozdělení práce do bloků. Program, který neumí paralelizovat výpočet, může na GPU běžet hůř než na běžném procesoru.
Cesta dat na obrazovku
Při vykreslování scény dostane GPU geometrii, materiály, textury a instrukce z grafického API. V grafické pipeline se data postupně mění na obraz: vertexy se transformují, trojúhelníky se převádějí na fragmenty a fragmenty se vyhodnocují pro jednotlivé pixely. Významnou část tohoto chování řídí shader, tedy malý program spuštěný přímo na GPU.
Moderní GPU zvládá klasickou rasterizaci i náročnější techniky, jako je ray tracing. Výsledná rychlost ale nezávisí jen na čipu. Do hry vstupuje ovladač, grafické API, propustnost paměti, velikost VRAM, rozlišení, nastavení kvality i to, zda aplikace zbytečně nepřesouvá data mezi CPU a GPU.
GPU mimo grafiku
Výpočetní použití GPU se často označuje jako GPGPU. Knihovny pro strojové učení posílají na GPU tenzory a operace nad nimi, protože násobení matic, konvoluce a některé optimalizační kroky mají pravidelnou strukturu. Podobný princip využívají vědecké simulace, video encoding, zpracování obrazu nebo finanční výpočty.
Vývojář obvykle nepíše přímo instrukce pro hardware. Používá rozhraní jako Vulkan, OpenCL, CUDA v ekosystémech, které ho podporují, nebo vyšší frameworky typu PyTorch a TensorFlow. Úroveň abstrakce rozhoduje, kolik kontroly vývojář získá nad pamětí, paralelismem a synchronizací.
Dva praktické dopady GPU
Plynulejší scéna ve hře
Herní engine pošle na GPU modely postav, textury a shadery pro osvětlení. Při vyšším rozlišení začne být úzkým hrdlem počet pixelů a složitost efektů, takže snížení kvality stínů zvedne snímkovou frekvenci. CPU přitom může zůstat vytížené hlavně fyzikou, logikou hry a přípravou příkazů pro grafické API.
Trénování modelu v PyTorchi
Datový tým trénuje neuronovou síť nad velkými maticemi. Přesunutí tenzorů na GPU zrychlí operace, pokud se data nevejdou špatně do paměti a kopírování mezi zařízeními neprobíhá v každém kroku. Krátká kontrola zařízení může vypadat takto:
import torch
device = "cuda" if torch.cuda.is_available() else "cpu"
x = torch.randn(4096, 4096, device=device)
y = x @ x
print(device, y.shape)Příklady z praxe
Plynulejší scéna ve hře
Herní engine pošle na GPU modely postav, textury a shadery pro osvětlení. Při vyšším rozlišení začne být úzkým hrdlem počet pixelů a složitost efektů, takže snížení kvality stínů zvedne snímkovou frekvenci. CPU přitom může zůstat vytížené hlavně fyzikou, logikou hry a přípravou příkazů pro grafické API.
Trénování modelu v PyTorchi
Datový tým trénuje neuronovou síť nad velkými maticemi. Přesunutí tenzorů na GPU zrychlí operace, pokud se data nevejdou špatně do paměti a kopírování mezi zařízeními neprobíhá v každém kroku. Ukázka v PyTorchi ověří dostupnost CUDA zařízení a vytvoří tenzor přímo na zvoleném zařízení.
import torch device = "cuda" if torch.cuda.is_available() else "cpu" x = torch.randn(4096, 4096, device=device) y = x @ x print(device, y.shape)
Časté omyly
- MýtusGPU je totéž co grafická karta.
- Ve skutečnostiGPU je samotný grafický procesor. Grafická karta je celé zařízení s GPU, pamětí, napájením, chlazením a výstupy, případně může být GPU integrované přímo v procesoru nebo čipsetu.
- MýtusKdyž program běží na GPU, musí být vždy rychlejší.
- Ve skutečnostiGPU zrychlí hlavně výpočty s velkým paralelismem a pravidelným přístupem k datům. Malá úloha, časté větvení nebo neustálé kopírování mezi CPU a GPU mohou výhodu úplně ztratit.
- MýtusVíce VRAM vždy znamená vyšší FPS.
- Ve skutečnostiVětší VRAM pomáhá, když se do paměti nevejdou textury, buffery nebo pracovní data. Pokud už se vše vejde, výkon často omezuje výpočetní část GPU, propustnost paměti, CPU nebo nastavení enginu.
Časté dotazy
- Proč GPU nenahradí CPU v běžném programu?
- GPU nenahradí CPU v běžném programu, protože grafický procesor je nejsilnější u pravidelných paralelních úloh. Řízení operačního systému, obsluha vstupu, práce se soubory, síťová komunikace nebo složité větvení patří typicky CPU. GPU může výpočet urychlit, ale program musí práci rozdělit na mnoho podobných operací a vyplatit náklady na přesun dat.
- Má GPU vlastní paměť?
- GPU má často vlastní rychlou paměť označovanou jako VRAM, hlavně u samostatných grafických karet. Integrované GPU obvykle sdílí část systémové paměti s procesorem. Velikost paměti určuje, kolik textur, modelů, framebufferů nebo tenzorů se vejde blízko výpočetních jednotek, ale samotná kapacita automaticky neznamená vyšší výkon.
- Kdy dává smysl řešit výkon GPU u webové aplikace?
- GPU dává u webové aplikace smysl řešit u 3D scén, map, datových vizualizací, editorů obrazu, videa a animací náročných na kompozici. Prohlížeč může používat GPU přes WebGL, WebGPU nebo interní akceleraci vykreslování. U běžných formulářů a statického obsahu bývá důležitější síť, JavaScript, layout a množství prvků v DOM.
- Je GPU nutné pro umělou inteligenci?
- GPU pro umělou inteligenci není nutné pro každý projekt. Malé modely, inference s nízkým provozem nebo prototypování mohou stačit na CPU. GPU se začne vyplácet při trénování větších neuronových sítí, dávkovém zpracování, práci s obrazem a jazyky nebo při požadavku na nízkou latenci. Rozhoduje také cena, dostupná paměť a podpora frameworku.
Zdroje
- Graphics processing unit(otevře se v novém okně)
- Vulkan(otevře se v novém okně)
- OpenCL(otevře se v novém okně)
- CUDA semantics(otevře se v novém okně)
- Use a GPU(otevře se v novém okně)