SAMSUNG_022024C Advertisement SAMSUNG_022024C Advertisement SAMSUNG_022024C Advertisement

Využitie grafických kariet NVIDIA na AI a Deep Learning

0

K rozmachu Deep Learningu, alebo po našom hlbokého učenia došlo pred niekoľkými rokmi v súvislosti so všeobecnou dostupnosťou potrebného výpočtového výkonu. Napriek tomu, že hovoríme o výpočtovom výkone, máme na mysli možnosti moderných grafických kariet. Na úlohy strojového učenia sa v drvivej väčšine využívajú grafické karty NVIDIA, či už profesionálnej, alebo komerčnej kategórie, pretože tieto karty podporujú najpoužívanejšie knižnice ako sú PyTorch, či TensorFlow.  

CPU verzus GPU

Strojové učenie využíva neurónové siete na rozdelenie zložitých úloh do vrstiev, kde sa paralelne spracovávajú. Klasické procesory CPU (Central Processing Unit) vzhľadom na určenia a architektúru však nie sú najlepším nástrojom na tieto úlohy. CPU pracuje sekvenčne a paralelizmus realizuje tak, že dokáže rýchlo prepínať medzi viacerými úlohami. Klasický procesor vykonáva programový kód, čiže načíta inštrukcie a postupne jednu po druhej ich vykonáva. Zakaždým pristupuje do pamäte, čo má za následok nízku priepustnosť. CPU netuší čo bude nasledovať v ďalších inštrukciách, kým si ich neprečíta. Naproti tomu v neurónových sieťach sú mnohé výpočty predvídateľné avšak procesor to nedokáže využiť. V neurónových sieťach sa často využíva násobenie matíc, no CPU je univerzálny procesor, ktorý sa nepoužíva len na násobenie matíc, takže pre každú sadu výpočtov musí čítať inštrukcie a pristupovať k pamäti, čo zvyšuje zložitosť a predlžuje čas výpočtov.

Naproti tomu grafické čipy GPU (Graphics Processing Unit)  sú navrhnuté tak, aby dokázali spracovávať paralelne čo najviac výpočtových úloh. Primárne sú určené na akcelerovanie rendrovania grafiky vo vysokom rozlíšení, avšak vďaka svojom vlastnostiam sú ideálne pre úlohy strojového učenia. Majú tisíce jadier, čo sú v podstate aritmeticko logické jednotky ALU. Ich architektúra umožňuje efektívne distribuovať úlohy a pracovné zaťaženie s rovnakými operáciami medzi jadrá. Navyše GPU môže súčasne odoberať veľa údajov z pamäte. GPU umožňujú  paralelné vykonávanie náročných výpočtov, ako je násobenie matíc v neurónových sieťach. Čoraz viac aj bežných herných GPU má tenzorové jadrá, ktoré umožňujú rýchlejšie násobenie matíc a práve táto operácia sa často využíva v strojovom učení.

Modely hlbokého učenia je samozrejme možné trénovať aj pomocou metód sekvenčného spracovania. Avšak vzhľadom na objem spracovávaných údajov a výpočtovú náročnosť je prakticky nemožné trénovať modely neurónových sietí bez paralelného spracovania. Paralelné spracovanie umožňuje spracovať viacero dátových objektov súčasne, čím sa výrazne skracuje čas trénovania . Toto paralelné spracovanie sa zvyčajne vykonáva pomocou grafických procesorových jednotiek (GPU). Zatiaľ čo CPU dokážu zvládnuť zložitejšie alebo všeobecné úlohy, GPU dokážu efektívne zvládnuť špecifické, opakujúce sa úlohy spracovania. V porovnaní s CPU sú minimálne 10 x rýchlejšie.

Paralelné spracovanie úloh je limitované počtom jadier. Napríklad procesor Intel Core i9 14 tej generácie má „len“ 24 jadier, z toho 8 je výkonných a 16 energeticky efektívnych. Inak povedané súčasne môžu bežať procesy len na 24-roch jadrách. Naproti tomu grafická karta NVIDIA GeForce RTX 4060, najlacnejšia z novej produktovej rodiny RTX 4000 má 3072 CUDA jadier Najvyšší model RTX 4090 má takýchto CUDA jadier až 16384. Takže aj v prípade relatívne lacnej grafickej karty RTX 4060 za 300 € k procesoru je počet jadier 3072 verzus 24, čiže 128 x viac. Na tejto karte môžeme teoreticky spustiť 3072 procesov súčasne.  Na RTX 4090 až 16 384 procesov. Teoreticky v tomto prípade znamená, že softvérová nadstavba musí riešiť manažment prideľovania úloh, riadenie procesov a podobne

Porovnanie výkonu CPU a GPU

Na porovnanie výkonu CPU a GPU sme použili príklad násobenia matíc. Násobili sme matice s rozmerom 16 384 a tiež matice s rozmerom 32 760 prvkov. Matice boli naplnené náhodnými číslami.  

Násobenie matíc s rozmerom matice s rozmerom 16 384 prvkov

 
čas
porovnanie s CPU
CPU i7 12700
10,55 sekúnd
-
GPU RTX 4060
0,95 sekúnd
11,1 x
GPU RTX 4090
0,21 sekúnd
50,2 x

Výkon CPU a GPU sme porovnali aj na reálnom príklade neurónovej siete na spracovanie textu v prirodzenom jazyku. Túto neurónovú sieť sme vytvorili v rámci seriálu Strojové učenie v Pythone na našom webe. Natrénovali sme ju na texte knihy, ktorá má 90 374 slov Následne sme túto neurónovú sieť použili na generovanie textu krátkej poviedky. Časovo najnáročnejšou úlohou bolo trénovanie neurónovej siete na texte knihy. V tabuľke sú časy trénovania na CPU Intel Core i7 12700 a dvoch grafických kartách produktovej rodiny NVIDIA GeForce RTX 4000. Zhodou okolností sme mali k dispozícii najnižší a najlacnejší model RTX 4060 a najdrahší model RTX 4090. Pri návrhu a trénovaní neurónovej siete sme využili platformu PyTorch a CUDA (Compute Unified Device Architecture) ktorá využíva výkon grafických kariet NVIDIA na výpočtovo náročné úlohy.

 
Čas trénovanie
porovnanie s CPU
CPU i7 12700
16 hodín  25 minút
-
GPU RTX 4060
1 hodina 37 minút
10 x
GPU RTX 4090
27 minút
36 x

Príklad je podrobne popísaný vo videu

sprievodnom článku

Multi GPU

Grafická karta je vynikajúci hardvér pre strojové učenie a ideálne je, ak ich môžeme použiť čo najviac a príslušnú úlohu, napríklad trénovanie neurónových sietí medzi rozdeliť. V našom seriáli Strojové učenie v Pythone sme ukázali príklad v ktorom sme použili tri grafické karty v jednom PC. Prečo tri a nie štyri, napriek tomu, že sme mali k dispozícii základnú dosku so štyrmi slotmi, pričom v každom slote mohla byť karta zaberajúca dve pozície? Pri použití bežných komerčne dostupných komponentov sme narazili na priestorový problém. Väčšina grafických kariet kvôli chladeniu zaberá väčšiu šírku než dve pozície. Napríklad karta NVIDIA RTX 4090 zaberá tri a pol pozície.

Dokonca aj pri použití troch kariet sme museli urobiť kompromis.  Aby sme mohli všetky tri karty zasunúť do základnej dosky, nemohli sme to urobiť v klasickej skrinke, ale na stole.

Aby sme mohli tieto grafické karty mať v skrinke, potrebovali by sme skrinku, ktorá nemá v spodnej časti šachtu na zdroj, ale má zdroj nainštalovaný inde, napríklad vpredu v hornej časti skrinky.  Po odobratí systému chladenia spravidla s tromi ventilátormi máme k dispozícii pomerne malú a tenkú dosku s elektronikou.

Čipy aj napäťovú kaskádu však treba účinne chladiť. Riešením sú systémy vodného chladenia, ktoré sa upevnia na karty. Každá karta aj s vodným chladením potom zaberie dve pozície.

Aby ste mohli využiť hardvérovú konfiguráciu s viacerými GPU, či už v jednom, alebo vo viacerých prepojených počítačoch, je potrebné do procesov hlbokého učenia zabudovať paralelizmus. Existujú dve hlavné metódy paralelizmu – modelový a dátový

Modelový paralelizmus - tréningové procesy sa rozdelia na viacero GPU a procesy budú vykonávané paralelne. Táto metóda používa rovnakú množinu údajov pre každú časť modelu, takže si vyžaduje synchronizáciu údajov medzi jednotlivými GPU.

Dátový paralelizmus - využíva duplikáty modelu naprieč GPU. Táto metóda je užitočná, keď je veľkosť dávky, ktorú používa model, príliš veľká na to, aby bola zavedená do jedného GPU, , alebo keď chcete urýchliť tréningový proces. Vďaka paralelizmu údajov sa každá kópia modelu simultánne trénuje na podmnožine údajov. Po dokončení sa výsledky modelov spoja.

Stručne popíšeme využívanie viacerých GPU v najpoužívanejších frameworkoch pre strojové učenie.

PyTorch je open source framework založený na Pythone. Môžete ho použiť na trénovanie modelov strojového učenia pomocou výpočtov na CPU, GPU aj TPU, čiže tenzorových jednotkách.

PyTorch na účely paralelizmu na GPU využíva tri triedy:  

  • DataParallel—umožňuje distribuovať repliky modelov naprieč viacerými GPU v jednom počítači. Tieto modely potom môžete použiť na spracovanie rôznych podmnožín vašej množiny údajov.
  • DistributedDataParallel — rozširuje triedu DataParallel, aby vám umožnila distribuovať repliky modelov naprieč počítačmi s GPU.
  • model_parallel — umožňuje rozdeliť veľké modely na viacero GPU s čiastočným trénovaním na každom z nich. Vyžaduje si to synchronizáciu tréningových údajov medzi GPU, pretože operácie sa vykonávajú postupne.

TensorFlow je open source framework pre ML vytvorený spoločnosťou Knižnica obsahuje rôzne algoritmy a modely strojového učenia a hlbokého učenia. Zahŕňa tiež vstavané metódy pre distribuovaný tréning pomocou GPU.

Prostredníctvom API môžete použiť metódu tf.distribute.Strategy na distribúciu operácií medzi GPU, TPU alebo počítačmi. Táto metóda umožňuje vytvárať a podporovať viaceré segmenty používateľov a ľahko prepínať medzi distribuovanými stratégiami.

Dve ďalšie stratégie, ktoré rozširujú metódu distribúcie, sú MirroredStrategy a TPUstrategy. Obidve umožňujú distribuovať pracovné zaťaženie, prvá na viacerých GPU a druhá na viacero jednotiek Tensor Processing Units (TPU). TPU sú jednotky dostupné prostredníctvom platformy Google Cloud Platform, ktoré sú špeciálne optimalizované na tréning s TensorFlow.

Obe tieto metódy využívajú rovnaký paralelný proces pozostávajúci z niekoľkých krokov:

  • Množina údajov je segmentovaná, takže údaje sú distribuované čo najrovnomernejšie.
  • Vytvoria sa repliky modelu a priradia sa ku GPU. Potom sa k tejto replike priradí podmnožina trénovacej množiny.
  • Spracuje sa podmnožina pre každý GPU a vytvoria sa gradienty.
  • Gradienty zo všetkých kópií modelu sa spriemerujú a výsledok sa použije na aktualizáciu pôvodného modelu.
  • Proces sa opakuje, kým nie je model úplne natrénovaný.

Partnerom článku je smarty.sk

Zobrazit Galériu

Luboslav Lacko

Všetky autorove články
NVIDIA deep learning machine learning strojove ucenie

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať