Znanost o podacima

GPU programiranje s Pythonom

GPU programiranje s Pythonom

U ovom ćemo članku zaroniti u GPU programiranje s Pythonom. Koristeći jednostavnost Pythona, možete otključati nevjerojatnu računalnu snagu GPU-a vaše grafičke kartice (grafička procesorska jedinica). U ovom ćemo primjeru raditi s NVIDIA-inom CUDA bibliotekom.

Zahtjevi

Za ovu vježbu trebat će vam fizički stroj s Linuxom i GPU-om zasnovan na NVIDIA-i ili pokrenuti primjerak zasnovan na GPU-u na Amazon Web Services. Oba bi trebala raditi u redu, ali ako odlučite koristiti fizički stroj, morat ćete biti sigurni da imate instalirane NVIDIA vlasničke upravljačke programe, pogledajte upute: https: // linuxhint.com / install-nvidia-drivers-linux

Također će vam trebati instaliran CUDA Toolkit. Ovaj primjer koristi Ubuntu 16.04 LTS, ali za većinu glavnih distribucija Linuxa dostupna su preuzimanja na sljedećem URL-u: https: // programer.nvidia.com / cuda-downloads

Više volim .preuzimanje na temelju deb-a, a ovi će primjeri pretpostaviti da ste odabrali tu rutu. Datoteka koju preuzimate je .deb paket, ali nema a .deb proširenje, pa ga preimenujte u a .deb na kraju njegova korisna. Zatim ga instalirate sa:

sudo dpkg -i naziv paketa.deb

Ako se od vas zatraži da instalirate GPG ključ, slijedite upute da biste to učinili.

Sada ćete morati instalirati sam cuda paket. Da biste to učinili, pokrenite:

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

Ovaj dio može potrajati, pa biste možda htjeli uzeti šalicu kave. Nakon što završite, preporučujem ponovno pokretanje kako biste bili sigurni da su svi moduli pravilno učitani.

Dalje, trebat će vam distribucija Anaconda Python. To možete preuzeti ovdje: https: // www.anakonda.com / download / # linux

Zgrabite 64-bitnu verziju i instalirajte je ovako:

sh Anaconda *.sh

(zvijezda u gornjoj naredbi osigurat će da se naredba izvrši bez obzira na manju verziju)

Zadana lokacija za instalaciju trebala bi biti u redu i u ovom ćemo je priručniku koristiti. Prema zadanim postavkama instalira se na ~ / anaconda3

Na kraju instalacije od vas će se zatražiti da odlučite želite li dodati Anacondu na svoj put. Ovdje odgovorite da da biste olakšali pokretanje potrebnih naredbi. Da biste osigurali da se ova promjena dogodi, nakon što instalacijski program potpuno završi, odjavite se, a zatim se ponovo prijavite na svoj račun.

Više informacija o instaliranju Anaconde: https: // linuxhint.com / install-anaconda-python-on-ubuntu /

Napokon ćemo trebati instalirati Numbu. Numba koristi kompajler LLVM za kompajliranje Pythona u strojni kod. To ne samo da poboljšava izvedbu redovnog Python koda, već također osigurava ljepilo potrebno za slanje uputa GPU-u u binarnom obliku. Da biste to učinili, pokrenite:

conda instalirati numba

Ograničenja i prednosti GPU programiranja

Primamljivo je pomisliti da bilo koji Python program možemo pretvoriti u program zasnovan na GPU-u, dramatično ubrzavajući njegove performanse. Međutim, GPU na video kartici radi znatno drugačije od standardnog CPU-a na računalu.

CPU obrađuju puno različitih ulaza i izlaza i imaju širok asortiman uputa za rješavanje ovih situacija. Oni su također odgovorni za pristup memoriji, bavljenje sistemskom sabirnicom, rukovanje zaštitnim prstenovima, segmentiranje i ulazno / izlaznu funkcionalnost. Oni su ekstremni multitaskeri bez posebnog fokusa.

GPU-ovi s druge strane izgrađeni su za obradu jednostavnih funkcija zasljepljujuće brzom brzinom. Da bi to postigli, očekuju ujednačenije stanje ulaza i izlaza. Specijalizacijom za skalarne funkcije. Skalarna funkcija uzima jedan ili više ulaza, ali vraća samo jedan izlaz. Te vrijednosti moraju biti vrste koje je unaprijed definirao numpy.

Primjer koda

U ovom primjeru stvorit ćemo jednostavnu funkciju koja uzima popis vrijednosti, zbraja ih i vraća zbroj. Da bismo demonstrirali snagu GPU-a, pokrenut ćemo jednu od ovih funkcija na CPU-u i jednu na GPU-u i prikazati vremena. Dokumentirani kod nalazi se u nastavku:

import numpy as np from timeit import default_timer as timer from numba import vectorize # Ovo bi trebala biti bitno velika vrijednost. Na mom testnom stroju trebalo je # 33 sekunde da se pokrene putem CPU-a i nešto više od 3 sekunde na GPU-u. NUM_ELEMENTS = 100000000 # Ovo je CPU verzija. def vektor_add_cpu (a, b): c = np.nule (NUM_ELEMENTS, dtype = np.float32) za i u rasponu (NUM_ELEMENTS): c [i] = a [i] + b [i] return c # Ovo je verzija GPU-a. Obratite pažnju na ukrasnik @vectorize. To govori # numbi da ovo pretvori u GPU vektoriziranu funkciju. @vectorize (["float32 (float32, float32)"], target = "cuda") def vector_add_gpu (a, b): return a + b; def main (): a_izvor = np.one (NUM_ELEMENTS, dtype = np.float32) b_source = np.one (NUM_ELEMENTS, dtype = np.float32) # Vrijeme CPU funkcije start = timer () vector_add_cpu (a_source, b_source) vector_add_cpu_time = timer () - start # Vrijeme GPU funkcije start = timer () vector_add_gpu (a_source, b_source) vector_add_gpu_time = timer (timeer) puta ispis ("CPU funkcija trajala je% f sekundi."% vector_add_cpu_time) print (" GPU funkciji trebalo je% f sekundi."% vector_add_gpu_time) vrati 0 ako je __name__ ==" __main__ ": main () 

Da biste pokrenuli primjer, upišite:

python gpu-primjer.py

NAPOMENA: Ako prilikom pokretanja programa naiđete na probleme, pokušajte upotrijebiti "conda install accelerate".

Kao što vidite, verzija CPU-a radi znatno sporije.

Ako ne, tada su vaše ponavljanja premale. Prilagodite NUM_ELEMENTS većoj vrijednosti (na mojoj se činilo da je marka prijeloma oko 100 milijuna). To je zato što postavljanje GPU-a traje malo, ali primjetno puno vremena, pa je potrebno da se operacija isplati, veće radno opterećenje. Jednom kada ga podignete iznad praga za svoj stroj, primijetit ćete značajna poboljšanja performansi verzije GPU-a u odnosu na verziju CPU-a.

Zaključak

Nadam se da ste uživali u našem osnovnom uvodu u GPU programiranje s Pythonom. Iako je gornji primjer trivijalan, on pruža okvir koji vam je potreban da biste svoje ideje dalje koristili koristeći snagu vašeg GPU-a.

Top 5 karata za hvatanje igara
Svi smo vidjeli i voljeli streaming reprodukcije na YouTubeu. PewDiePie, Jakesepticye i Markiplier samo su neki od najboljih igrača koji su zaradili m...
Kako razviti igru ​​na Linuxu
Prije deset godina malo je Linux korisnika predviđalo da će njihov omiljeni operativni sustav jednog dana biti popularna platforma za igranje komercij...
Luke komercijalnih igara s otvorenim kodom
Besplatne igre s otvorenim kodom i više platformi mogu se koristiti za igranje starih, kao i nekih prilično nedavnih naslova igara. U ovom će se člank...