Podatkovna znanost

GPU programiranje s Pythonom

GPU programiranje s Pythonom

V tem članku se bomo poglobili v programiranje GPU s Pythonom. Z lahkoto Pythona lahko odklenete neverjetno računalniško moč GPU-ja vaše grafične kartice (grafična procesorska enota). V tem primeru bomo sodelovali s knjižnico NVIDIA CUDA.

Zahteve

Za to vajo boste potrebovali fizični stroj z Linuxom in GPU, ki temelji na NVIDIA, ali pa zaženite primerek, ki temelji na GPU, na Amazon Web Services. Oba bi morala dobro delovati, če pa se odločite za uporabo fizičnega računalnika, se morate prepričati, da imate nameščene lastniške gonilnike NVIDIA, glejte navodila: https: // linuxhint.com / install-nvidia-drivers-linux

Prav tako boste potrebovali nameščen CUDA Toolkit. Ta primer uporablja Ubuntu 16.04 LTS, vendar so na voljo prenosi za večino večjih distribucij Linuxa na naslednjem URL-ju: https: // razvijalec.nvidia.com / cuda-downloads

Raje imam .prenos, ki temelji na deb, in ti primeri bodo predvidevali, da ste izbrali to pot. Datoteka, ki jo prenesete, je .deb paket, vendar nima a .deb razširitev, zato jo preimenujte v .deb na koncu njegov koristen. Nato ga namestite z:

sudo dpkg -i ime-paketa.deb

Če boste pozvani k namestitvi ključa GPG, sledite navodilom za to.

Zdaj boste morali namestiti sam paket cuda. Če želite to narediti, zaženite:

sudo apt-get posodobitev sudo apt-get namestite cuda -y 

Ta del lahko traja nekaj časa, zato boste morda želeli popiti skodelico kave. Ko končate, priporočam ponovni zagon, da zagotovite pravilno ponovno nalaganje vseh modulov.

Nato boste potrebovali distribucijo Anaconda Python. To lahko prenesete tukaj: https: // www.anakonda.com / download / # linux

Zgrabite 64-bitno različico in jo namestite tako:

sh Anaconda *.sh

(zvezdica v zgornjem ukazu bo zagotovila, da se ukaz izvaja ne glede na manjšo različico)

Privzeto mesto namestitve mora biti v redu in v tej vadnici ga bomo uporabili. Privzeto se namesti v ~ / anaconda3

Na koncu namestitve boste pozvani, da se odločite, ali želite na svojo pot dodati Anacondo. Tukaj odgovorite z da, da boste lažje izvajali potrebne ukaze. Če želite zagotoviti, da bo prišlo do te spremembe, se po popolnem zaključku namestitve odjavite in znova prijavite v svoj račun.

Več informacij o namestitvi Anaconde: https: // linuxhint.com / install-anaconda-python-on-ubuntu /

Končno bomo morali namestiti Numbo. Numba uporablja prevajalnik LLVM za prevajanje Pythona v strojno kodo. To ne samo, da izboljšuje delovanje običajne kode Python, temveč tudi zagotavlja lepilo, potrebno za pošiljanje navodil GPU v binarni obliki. Če želite to narediti, zaženite:

conda namestite numba

Omejitve in prednosti programiranja GPU

Vabljivo je misliti, da lahko kateri koli program Python pretvorimo v program, ki temelji na GPU, in tako dramatično pospešimo njegovo delovanje. Vendar GPU na grafični kartici deluje precej drugače kot standardni CPU v računalniku.

CPU obravnavajo veliko različnih vhodov in izhodov in imajo širok izbor navodil za reševanje teh situacij. Odgovorni so tudi za dostop do pomnilnika, obravnavo sistemskega vodila, upravljanje zaščitnih obročev, segmentiranje in vhodno / izhodno funkcionalnost. So ekstremni večopravilniki brez posebnega poudarka.

Po drugi strani so grafični procesorji zasnovani za obdelavo preprostih funkcij z osupljivo hitro hitrostjo. Da bi to dosegli, pričakujejo bolj enakomerno stanje vhodnih in izhodnih vrednosti. S specializacijo za skalarne funkcije. Skalarna funkcija sprejme enega ali več vhodov, vendar vrne samo en izhod. Te vrednosti morajo biti vrste, ki jih vnaprej definira numpy.

Primer kode

V tem primeru bomo ustvarili preprosto funkcijo, ki vzame seznam vrednosti, jih sešteje in vrne vsoto. Za prikaz moči GPU bomo eno od teh funkcij zagnali na CPU in eno na GPU ter prikazali čas. Dokumentirana koda je spodaj:

uvoz numpy kot np od timeit uvoz default_timer kot timer od numba import vectorize # To bi morala biti bistveno visoka vrednost. Na mojem testnem računalniku je to trajalo # 33 sekund, da se je zagnal prek CPU-ja, nekaj več kot 3 sekunde pa na GPU-ju. NUM_ELEMENTS = 100000000 # To je različica CPU. def vektor_add_cpu (a, b): c = np.ničle (NUM_ELEMENTS, dtype = np.float32) za i v obsegu (NUM_ELEMENTS): c [i] = a [i] + b [i] return c # To je različica GPU. Upoštevajte dekorater @vectorize. To pove # numbi, naj to spremeni v funkcijo GPU, vektorizirano. @vectorize (["float32 (float32, float32)"], target = "cuda") def vector_add_gpu (a, b): vrni a + b; def main (): a_source = np.ena (NUM_ELEMENTS, dtype = np.float32) b_source = np.ena (NUM_ELEMENTS, dtype = np.float32) # Čas funkcije CPU start = timer () vector_add_cpu (a_source, b_source) vector_add_cpu_time = timer () - start # Čas funkcije GPU start = timer () vector_add_gpu (a_source, b_source) vector_add_gpu_time = start (timer) times print ("funkcija CPU je trajala% f sekund."% vector_add_cpu_time) print (" Funkcija GPU je trajala% f sekund."% vector_add_gpu_time) vrne 0, če __name__ ==" __main__ ": main () 

Če želite zagnati primer, vnesite:

python gpu-primer.py

OPOMBA: Če pri zagonu programa naletite na težave, poskusite uporabiti “conda install accelerate”.

Kot lahko vidite, različica CPU deluje precej počasneje.

V nasprotnem primeru so vaše ponovitve premajhne. Prilagodite NUM_ELEMENTS na večjo vrednost (pri moji se je zdelo, da je meja preloma približno 100 milijonov). To je zato, ker nastavitev grafičnega procesorja traja majhen, a opazen čas, zato je potrebna večja delovna obremenitev, da se operacija izplača. Ko ga dvignete nad prag za vaš računalnik, boste opazili bistveno izboljšanje zmogljivosti različice GPU v primerjavi z različico CPU.

Zaključek

Upam, da ste uživali v našem osnovnem uvodu v GPU programiranje s Pythonom. Čeprav je zgornji primer nepomemben, ponuja okvir, ki ga potrebujete za nadaljnje izkoriščanje moči vašega grafičnega procesorja.

Kazalec skoči ali se naključno premika med tipkanjem v sistemu Windows 10
Če ugotovite, da kazalec miške med tipkanjem v prenosnem računalniku ali računalniku Windows samodejno, naključno preskakuje ali se premika sam, vam l...
Kako obrniti smer drsenja miške in sledilne ploščice v sistemu Windows 10
Miška in Sledilna ploščicaRačunalništvo ni samo enostavno, ampak bolj učinkovito in manj zamudno. Življenja brez teh naprav si ne moremo predstavljati...
Kako spremeniti miškin kazalec in velikost, barvo in shemo kazalca v sistemu Windows 10
Kazalec miške in kazalec v operacijskem sistemu Windows 10 sta zelo pomembna vidika operacijskega sistema. To lahko rečemo tudi za druge operacijske s...