Andmeteadus

GPU programmeerimine Pythoniga

GPU programmeerimine Pythoniga

Selles artiklis sukeldume Pythoniga GPU programmeerimisse. Kasutades Pythoni lihtsust, saate oma videokaardi GPU (graafikaprotsessori) uskumatu arvutusvõime avada. Selles näites töötame koos NVIDIA CUDA teegiga.

Nõuded

Selle harjutuse jaoks vajate kas füüsilist masinat koos Linuxi ja NVIDIA-põhise GPU-ga või käivitate Amazon Web Services-is GPU-põhise eksemplari. Mõlemad peaksid töötama hästi, kuid kui otsustate kasutada füüsilist masinat, peate veenduma, et installitud on NVIDIA varalised draiverid, vaadake juhiseid: https: // linuxhint.com / install-nvidia-drivers-linux

Samuti peate installima CUDA tööriistakomplekti. Selles näites kasutatakse Ubuntu 16.04 LTS spetsiaalselt, kuid enamiku suuremate Linuxi distributsioonide jaoks on saadaval allalaaditavad failid järgmisel URL-il: https: // developer.nvidia.com / cuda-downloads

Ma eelistan .deb-põhine allalaadimine ja need näited eeldavad, et valisite selle marsruudi. Allalaaditav fail on .deb pakett, kuid tal pole a .deb laiendus, nii et nimetage see ümber nii, et sellel oleks a .deb lõpus tema abivalmis. Seejärel installite selle järgmisega:

sudo dpkg -i paketi nimi.deb

Kui teil palutakse installida GPG-võti, järgige selleks antud juhiseid.

Nüüd peate installima cuda paketi ise. Selleks käivitage:

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

See osa võib võtta aega, nii et võiksite haarata tassi kohvi. Kui see on tehtud, soovitan taaskäivitada, et tagada kõigi moodulite korralik uuesti laadimine.

Järgmiseks vajate Anaconda Pythoni jaotust. Selle saate alla laadida siit: https: // www.anakonda.com / download / # linux

Haarake 64-bitine versioon ja installige see järgmiselt:

sh Anaconda *.sh

(ülaltoodud käsu täht tagab käsu käivitamise olenemata alaealisest versioonist)

Installimise vaikekoht peaks olema hea ja selles õpetuses me seda ka kasutame. Vaikimisi installitakse see kausta ~ / anaconda3

Installimise lõpus palutakse teil otsustada, kas soovite Anaconda oma teele lisada. Vajalike käskude käivitamise hõlbustamiseks vastake siin jah. Selle muudatuse tagamiseks logige pärast installeri täielikku lõpetamist välja ja logige uuesti oma kontole sisse.

Lisateave Anaconda installimise kohta: https: // linuxhint.com / install-anaconda-python-on-ubuntu /

Lõpuks peame installima Numba. Numba kasutab Pyloni masinakoodi kompileerimiseks LLVM-kompilaatorit. See mitte ainult ei paranda tavalise Pythoni koodi toimivust, vaid pakub ka liimi, mis on vajalik juhiste saatmiseks GPU-le binaarses vormis. Selleks käivitage:

conda install numba

GPU programmeerimise piirangud ja eelised

On ahvatlev mõelda, et saame iga Pythoni programmi teisendada GPU-põhiseks programmiks, kiirendades selle jõudlust dramaatiliselt. Videokaardi GPU töötab aga tunduvalt erinevalt kui arvuti tavaline protsessor.

Protsessorid töötlevad palju erinevaid sisendeid ja väljundeid ning neil on nende olukordade lahendamiseks lai valik juhiseid. Samuti vastutavad nad mälule juurdepääsu eest, süsteemibussiga tegelemise, kaitserõngaste käsitsemise, segmentimise ning sisendi / väljundi funktsionaalsuse eest. Nad on äärmuslikud multitegumtöötlejad, kellel pole konkreetset fookust.

GPU-d seevastu on loodud lihtsate funktsioonide töötlemiseks pimestavalt suure kiirusega. Selle saavutamiseks eeldavad nad sisendi ja väljundi ühtlasemat olekut. Spetsialiseerudes skalaarfunktsioonidele. Skalaarfunktsioon võtab ühe või mitu sisendit, kuid tagastab ainult ühe väljundi. Need väärtused peavad olema numpy poolt eelnevalt määratletud tüübid.

Koodinäide

Selles näites loome lihtsa funktsiooni, mis võtab kokku väärtuste loendi, liidab need kokku ja tagastab summa. GPU võimsuse näitamiseks käivitame ühe neist funktsioonidest protsessoril ja ühe GPU-l ning kuvame kellaajad. Dokumenteeritud kood on allpool:

impordi numpy np-st ajast timeit impordi default_timer taimerina numbast impordi vektoriseerimine # See peaks olema oluliselt kõrge väärtus. Minu testimasinas kulus protsessori töötamiseks # 33 sekundit ja GPU-l veidi üle 3 sekundi. NUM_ELEMENTS = 100000000 # See on protsessori versioon. def vektor_add_cpu (a, b): c = np.nullid (NUM_ELEMENTS, dtype = np.float32) i vahemikus (NUM_ELEMENTS): c [i] = a [i] + b [i] return c # See on GPU versioon. Pange tähele kaunistajat @vectorize. See käsib # numbal muuta see GPU vektoriseeritud funktsiooniks. @vectorize (["float32 (float32, float32)"], target = "cuda") def vector_add_gpu (a, b): tagastage a + b; def main (): a_allikas = np.ühed (NUM_ELEMENTS, dtype = np.float32) b_allikas = np.ühed (NUM_ELEMENTS, dtype = np.float32) # CPU funktsiooni algus = taimer () vector_add_cpu (a_source, b_source) vector_add_cpu_time = taimer () - start # GPU funktsiooni kellaaeg start = timer () vector_add_gpu (a_source, b_source) vector_add_gpu_time = taimer () - start # korda printida ("CPU funktsioon võttis% f sekundit."% vector_add_cpu_time) print (" GPU funktsioon võttis% f sekundit."% vector_add_gpu_time) tagastab 0, kui __nimi__ ==" __main__ ": main () 

Näite käitamiseks tippige:

python gpu-näide.py

MÄRKUS. Kui teil tekib programmi käivitamisel probleeme, proovige kasutada "conda install kiirendada".

Nagu näete, töötab protsessori versioon tunduvalt aeglasemalt.

Kui ei, siis on teie kordused liiga väikesed. Kohandage NUM_ELEMENTS suurema väärtusega (minu oma näis kasumimarginaal olevat umbes 100 miljonit). Seda seetõttu, et GPU seadistamine võtab väikese, kuid märgatava aja, nii et operatsiooni tasumiseks on vaja suuremat koormust. Kui tõstate selle oma masina läviväärtusest kõrgemale, märkate märkimisväärseid GPU versiooni jõudluse parandusi võrreldes protsessori versiooniga.

Järeldus

Loodan, et teile meeldis meie põhiline sissejuhatus GPU-de programmeerimisse Pythoniga. Ehkki ülaltoodud näide on triviaalne, pakub see raamistikku, mida peate oma ideede edasiarendamiseks oma GPU võimsust kasutades ära kasutama.

Python Tuples
Pythonis olevad koondarvud on järjestuses paigutatud objektide kogum. Hulgad on Pythoni üks andmestruktuure. Tuplid töötavad samamoodi nagu nimekiri. ...
Pythoni loendi lisa
Nimekiri on üks Pythoni olulistest andmestruktuuridest, mis korraldab elemendid järjestusse. Append () on Pythoni sisseehitatud funktsioon, mis lisab ...
Exceli arvutustabelite manipuleerimine Pythoni abil
Microsoft Excel on arvutustabeli tarkvara, mida kasutatakse tabeliandmete salvestamiseks ja haldamiseks. Lisaks saab Exceli abil arvutusi teha valemit...