Adattudomány

GPU programozás Python-nal

GPU programozás Python-nal

Ebben a cikkben elmélyülünk a GPU programozásában a Python segítségével. A Python egyszerűségével kihasználhatja a videokártya GPU (grafikus processzor) hihetetlen számítási erejét. Ebben a példában az NVIDIA CUDA könyvtárával dolgozunk.

Követelmények

Ehhez a gyakorlathoz vagy fizikai gépre lesz szüksége Linuxon és NVIDIA-alapú GPU-val, vagy GPU-alapú példányt kell indítania az Amazon Web Services szolgáltatáson. Bármelyiknek jól kell működnie, de ha egy fizikai gépet választ, akkor meg kell győződnie arról, hogy telepítve vannak-e az NVIDIA saját illesztőprogramjai, lásd az utasításokat: https: // linuxhint.com / install-nvidia-drivers-linux

Szüksége lesz a CUDA Toolkit telepítésére is. Ez a példa az Ubuntu 16-ot használja.04 LTS kifejezetten, de a legtöbb nagy Linux-disztribúcióhoz elérhető letöltések elérhetők a következő URL-címen: https: // developer.nvidia.com / cuda-downloads

Inkább a .deb alapú letöltés, és ezek a példák feltételezik, hogy ezt az útvonalat választotta. A letöltött fájl a .deb csomag, de nincs a .deb kiterjesztés, ezért átnevezzük, hogy legyen egy .deb végén hasznos. Ezután telepíti a következővel:

sudo dpkg -i csomagnév.deb

Ha a rendszer kéri a GPG kulcs telepítését, kövesse az erre adott utasításokat.

Most telepítenie kell magát a cuda csomagot. Ehhez futtassa:

sudo apt-get update sudo apt-get install cuda -y 

Ez a rész eltarthat egy ideig, ezért érdemes megfogni egy csésze kávét. Miután elkészült, javasoljuk az újraindítást, hogy az összes modul megfelelően legyen feltöltve.

Ezután szükség lesz az Anaconda Python terjesztésre. Ezt letöltheti itt: https: // www.anakonda.com / download / # linux

Fogja meg a 64 bites verziót, és telepítse a következőképpen:

sh Anaconda *.SH

(a fenti parancs csillagja biztosítja a parancs futtatását a kisebb verziótól függetlenül)

Az alapértelmezett telepítési helynek rendben kell lennie, és ebben az oktatóanyagban mi fogjuk használni. Alapértelmezés szerint a ~ / anaconda3 fájlra települ

A telepítés végén a rendszer kéri, hogy döntse el, hozzá kívánja-e adni az Anacondát az útvonalához. Itt válaszoljon igennel, hogy megkönnyítse a szükséges parancsok futtatását. Annak biztosítására, hogy ez a változás bekövetkezzen, miután a telepítő teljesen befejezte, jelentkezzen ki, majd jelentkezzen be újra a fiókjába.

További információ az Anaconda telepítéséről: https: // linuxhint.com / install-anaconda-python-on-ubuntu /

Végül telepítenünk kell a Numbát. Numba az LLVM fordító segítségével fordítja le a Python gépi kódra. Ez nem csak a szokásos Python-kód teljesítményét javítja, hanem biztosítja a ragasztót is, amely bináris formában szükséges az utasítások GPU-nak történő elküldéséhez. Ehhez futtassa:

conda install numba

A GPU programozásának korlátai és előnyei

Csábító azt gondolni, hogy bármely Python programot GPU alapú programokká alakíthatunk át, ami drámai módon felgyorsítja annak teljesítményét. A videokártyán lévő GPU azonban lényegesen másképp működik, mint a számítógép szokásos processzora.

A CPU-k sokféle bemenetet és kimenetet kezelnek, és széles választékot kínálnak az ilyen helyzetek kezeléséhez. Felelősek a memória eléréséért, a rendszerbusz kezeléséért, a védőgyűrűk kezeléséért, a szegmentálásért és a bemeneti / kimeneti funkcionalitásért is. Extrém multitaskerek, különösebb hangsúly nélkül.

A GPU-kat viszont úgy tervezték, hogy vakítóan gyors sebességgel dolgozzák fel az egyszerű funkciókat. Ennek megvalósításához a bemenet és a kimenet egységesebb állapotára számítanak. A skaláris funkciókra szakosodva. A skaláris függvény egy vagy több bemenetet vesz fel, de csak egyetlen kimenetet ad vissza. Ezeknek az értékeknek a numpy által előre definiált típusoknak kell lenniük.

Példakód

Ebben a példában létrehozunk egy egyszerű függvényt, amely összeállítja az értékek listáját, összeadja és visszaadja az összeget. A GPU erejének bemutatásához futtatjuk az egyik ilyen funkciót a CPU-n és egyet a GPU-n, és megjelenítjük az időket. A dokumentált kód az alábbiakban található:

import numpy as np from timeit import default_timer as timer from numba import vectorize # Ennek lényegesen magas értéknek kell lennie. A tesztgépemen ennek 33 másodpercig tartott a futtatása a CPU-n keresztül, és alig több mint 3 másodpercig a GPU-n keresztül. NUM_ELEMENTS = 100000000 # Ez a CPU verzió. def vector_add_cpu (a, b): c = np.nullák (NUM_ELEMENTS, dtype = np.float32) i tartományban (NUM_ELEMENTS): c [i] = a [i] + b [i] return c # Ez a GPU verzió. Vegye figyelembe a @vectorize dekorátort. Ez arra utasítja a # numba, hogy ezt GPU vektorizált funkcióvá alakítsa. @vectorize (["float32 (float32, float32)"], target = "cuda") def vector_add_gpu (a, b): adja vissza a + b; def main (): a_forrás = np.egyet (NUM_ELEMENTS, dtype = np.float32) b_forrás = np.egyet (NUM_ELEMENTS, dtype = np.float32) # Idő: a CPU függvény start = timer () vector_add_cpu (a_forrás, b_source) vector_add_cpu_time = timer () - start # Time a GPU függvény start = timer () vector_add_gpu (a_source, b_source) vector_add_gpu_time = timer (start # Report #) szorzat nyomtatása ("A CPU funkció% f másodpercig tartott."% vector_add_cpu_time) print (" A GPU funkció% f másodpercig tartott."% vector_add_gpu_time) visszatér 0, ha __név__ ==" __main__ ": main () 

A példa futtatásához írja be:

python gpu-example.py

MEGJEGYZÉS: Ha problémái adódnak a program futtatásakor, próbálkozzon a „conda install accelerate” használatával.

Mint látható, a CPU verziója lényegesen lassabban fut.

Ha nem, akkor az iterációk túl kicsiek. Állítsa be a NUM_ELEMENTS értéket nagyobbra (az enyémnél a megtérülési határ 100 millió körülinek tűnt). Ez azért van, mert a GPU beállítása kicsi, de észrevehető időt vesz igénybe, ezért a művelet megtérítéséhez nagyobb munkaterhelésre van szükség. Amint a gép küszöbértéke fölé emeli, észreveheti a GPU-verzió jelentős teljesítménybeli javulását a CPU-verzióhoz képest.

Következtetés

Remélem, hogy élvezte a Python-nal való GPU-programozás alapvető bevezetését. Bár a fenti példa triviális, ez biztosítja a keretet, amelyre szüksége van ahhoz, hogy ötleteit tovább használja a GPU erejének kihasználásával.

A legjobb Gamepad Mapping alkalmazások Linuxhoz
Ha egy tipikus billentyűzet és egér beviteli rendszer helyett szeretnél játékokat játszani Linuxon egy játékvezérlővel, van néhány hasznos alkalmazás ...
Hasznos eszközök Linux játékosok számára
Ha szeretsz Linuxon játszani, akkor valószínű, hogy olyan alkalmazásokat és segédprogramokat használtál, mint a Wine, a Lutris és az OBS Studio a játé...
HD Remastered Games for Linux, amelyeknek soha nem volt korábban Linux kiadásuk
Számos játékfejlesztő és kiadó a régi játékok HD remasterjével áll elő a franchise élettartamának meghosszabbítása érdekében. Kérjük, hogy a rajongók ...