Data Science

Programovanie GPU pomocou Pythonu

Programovanie GPU pomocou Pythonu

V tomto článku sa ponoríme do programovania GPU pomocou Pythonu. Pomocou Pythonu môžete odomknúť neuveriteľný výpočtový výkon grafickej karty grafickej karty (grafická procesorová jednotka) grafickej karty. V tomto príklade budeme pracovať s knižnicou NVIDIA CUDA.

Požiadavky

Na toto cvičenie budete potrebovať buď fyzický počítač s Linuxom a GPU založeným na NVIDIA, alebo spustiť inštanciu založenú na GPU v Amazon Web Services. Buď by malo fungovať dobre, ale ak sa rozhodnete používať fyzický stroj, musíte sa ubezpečiť, že máte nainštalované proprietárne ovládače NVIDIA, pozrite si pokyny: https: // linuxhint.com / install-nvidia-drivers-linux

Budete tiež potrebovať nainštalovanú sadu CUDA Toolkit. Tento príklad používa Ubuntu 16.Konkrétne 04 LTS, ale pre väčšinu hlavných distribúcií systému Linux sú k dispozícii súbory na stiahnutie na nasledujúcej adrese URL: https: // vývojár.nvidia.com / cuda-na stiahnutie

Mám radšej .deb založené na stiahnutie a tieto príklady budú predpokladať, že ste si vybrali túto cestu. Stiahnutý súbor je .deb balíček, ale nemá .rozšírenie deb, tak ho premenujte, aby malo .deb na konci jeho užitočné. Potom ho nainštalujete pomocou:

sudo dpkg -i názov balíka.deb

Ak sa zobrazí výzva na inštaláciu kľúča GPG, postupujte podľa pokynov.

Teraz budete musieť nainštalovať samotný balíček cuda. Ak to chcete urobiť, spustite:

sudo apt-get aktualizácia sudo apt-get nainštalovať cuda -y 

Táto časť môže chvíľu trvať, takže si možno budete chcieť vziať šálku kávy. Keď je hotovo, odporúčam reštartovať počítač, aby ste sa uistili, že sú všetky moduly správne načítané.

Ďalej budete potrebovať distribúciu Anaconda Python. Môžete si ich stiahnuť tu: https: // www.anakonda.com / download / # linux

Chyťte 64-bitovú verziu a nainštalujte ju takto:

sh Anaconda *.š

(hviezdička vo vyššie uvedenom príkaze zabezpečí spustenie príkazu bez ohľadu na podradenú verziu)

Predvolené umiestnenie inštalácie by malo byť v poriadku a v tomto tutoriále ho použijeme. Predvolene sa inštaluje na ~ / anaconda3

Na konci inštalácie sa zobrazí výzva, aby ste sa rozhodli, či chcete na svoju cestu pridať Anacondu. Odpovedzte áno, aby ste uľahčili vykonávanie potrebných príkazov. Aby ste zabezpečili, že k tejto zmene dôjde, po úplnom dokončení inštalátora sa musíte odhlásiť a potom sa znova prihlásiť do svojho účtu.

Viac informácií o inštalácii Anacondy: https: // linuxhint.com / install-anaconda-python-on-ubuntu /

Nakoniec si budeme musieť nainštalovať Numbu. Numba používa na kompiláciu Pythonu do strojového kódu kompilátor LLVM. To zvyšuje nielen výkon bežného kódu Pythonu, ale poskytuje aj lepidlo potrebné na odoslanie pokynov na GPU v binárnej forme. Ak to chcete urobiť, spustite:

conda nainštalovať numba

Obmedzenia a výhody programovania GPU

Je lákavé myslieť si, že môžeme ľubovoľný program Python previesť na program založený na GPU, čím sa dramaticky zrýchli jeho výkon. GPU na grafickej karte však funguje podstatne inak ako štandardný procesor v počítači.

CPU zvládajú množstvo rôznych vstupov a výstupov a majú široký sortiment pokynov na riešenie týchto situácií. Zodpovedajú tiež za prístup do pamäte, prácu so systémovou zbernicou, manipuláciu s ochrannými krúžkami, segmentáciu a vstupno-výstupné funkcie. Sú to extrémni multitaskeri bez konkrétneho zamerania.

Na druhej strane sú GPU postavené na spracovanie jednoduchých funkcií s oslnivou rýchlosťou. Na dosiahnutie tohto cieľa očakávajú jednotnejší stav vstupu a výstupu. Špecializáciou na skalárne funkcie. Skalárna funkcia prijíma jeden alebo viac vstupov, ale vracia iba jeden výstup. Tieto hodnoty musia byť typy vopred definované numpy.

Vzorový kód

V tomto príklade vytvoríme jednoduchú funkciu, ktorá zoberie zoznam hodnôt, sčíta ich a vráti súčet. Na demonštráciu výkonu GPU spustíme jednu z týchto funkcií na CPU a jednu na GPU a zobrazíme časy. Zdokumentovaný kód je uvedený nižšie:

import numpy ako np z timeit import default_timer ako časovač z numba import vectorize # Toto by mala byť podstatne vysoká hodnota. Na mojom testovacom stroji to trvalo # 33 sekúnd, kým sa spustil cez CPU, a niečo cez 3 sekundy na GPU. NUM_ELEMENTS = 100000000 # Toto je verzia CPU. def vector_add_cpu (a, b): c = np.nuly (NUM_ELEMENTS, dtype = np.float32) pre i v rozsahu (NUM_ELEMENTS): c [i] = a [i] + b [i] návrat c # Toto je verzia GPU. Všimnite si dekoratéra @vectorize. Toto povie # numbe, aby z toho urobila vektorizovanú funkciu GPU. @vectorize (["float32 (float32, float32)"], target = "cuda") def vector_add_gpu (a, b): návrat a + b; def main (): a_source = np.jedny (NUM_ELEMENTS, dtype = np.float32) b_source = np.jedny (NUM_ELEMENTS, dtype = np.float32) # Čas spustenia funkcie CPU = timer () vector_add_cpu (a_source, b_source) vector_add_cpu_time = timer () - start # Čas spustenia funkcie GPU = timer () vector_add_gpu (a_source, b_source) vector_add_gpu_time = timer () - štart # Správa krát tlačiť („funkcia CPU trvala% f sekúnd."% vector_add_cpu_time) print (" funkcii GPU trvalo% f sekúnd."% vector_add_gpu_time) vrátiť 0, ak __name__ ==" __main__ ": main () 

Príklad spustíte zadaním:

príklad python gpu.py

POZNÁMKA: Ak narazíte na problémy pri spustení programu, skúste použiť aplikáciu „conda install accelerate“.

Ako vidíte, verzia s procesorom beží podstatne pomalšie.

Ak nie, potom sú vaše iterácie príliš malé. Upravte hodnotu NUM_ELEMENTS na vyššiu hodnotu (na mojej sa zdá, že hraničná hodnota je okolo 100 miliónov). Je to z toho dôvodu, že nastavenie GPU zaberie malé, ale znateľné množstvo času, takže aby operácia stála za to, je potrebné vyššie pracovné zaťaženie. Akonáhle ho zvýšite nad prahovú hodnotu pre váš stroj, všimnete si výrazné zlepšenie výkonu verzie GPU oproti verzii CPU.

Záver

Dúfam, že sa vám páčil náš základný úvod do programovania GPU pomocou Pythonu. Aj keď je vyššie uvedený príklad triviálny, poskytuje rámec, ktorý potrebujete, aby ste svoje nápady mohli ďalej využívať s využitím sily vášho GPU.

Hry Ako vyvíjať hru v systéme Linux
Ako vyvíjať hru v systéme Linux
Pred desiatimi rokmi by len málo používateľov Linuxu predpovedalo, že ich obľúbený operačný systém bude jedného dňa populárnou hernou platformou pre k...
Hry Open source porty komerčných herných strojov
Open source porty komerčných herných strojov
Na hranie starých i niektorých z nedávnych herných titulov je možné využiť bezplatné hry s otvoreným zdrojom a multiplatformové herné enginy. V tomto ...
Hry Najlepšie hry z príkazového riadku pre systém Linux
Najlepšie hry z príkazového riadku pre systém Linux
Príkazový riadok nie je pri použití systému Linux iba vaším najväčším spojencom - môže byť tiež zdrojom zábavy, pretože ho môžete použiť na hranie mno...