Duomenų mokslas

GPU programavimas su „Python“

GPU programavimas su „Python“

Šiame straipsnyje mes pasinersime į GPU programavimą su „Python“. Naudodamiesi „Python“ paprastumu, galite atrakinti neįtikėtiną vaizdo plokštės GPU (grafikos procesoriaus) skaičiavimo galią. Šiame pavyzdyje dirbsime su NVIDIA CUDA biblioteka.

Reikalavimai

Norėdami atlikti šį pratimą, jums reikės arba fizinės mašinos su „Linux“ ir NVIDIA pagrindu veikiančiu GPU, arba paleisti „GPU“ pagrįstą egzempliorių „Amazon Web Services“. Bet kuri iš jų turėtų veikti gerai, bet jei nuspręsite naudoti fizinę mašiną, turėsite įsitikinti, kad įdiegėte nuosavų „NVIDIA“ tvarkyklių, žiūrėkite instrukcijas: https: // linuxhint.com / install-nvidia-drivers-linux

Jums taip pat reikės įdiegti CUDA įrankių rinkinį. Šiame pavyzdyje naudojamas „Ubuntu 16“.04 LTS specialiai, tačiau daugumai pagrindinių „Linux“ paskirstymų galima atsisiųsti šiuo URL: https: // developer.nvidia.com / cuda-downloads

Man labiau patinka .deb pagrįstas atsisiuntimas ir šie pavyzdžiai manys, kad pasirinkote tą maršrutą. Atsisiųstas failas yra .deb paketas, bet neturi a .deb pratęsimas, todėl jį pervadinus į .deb pabaigoje jo naudinga. Tada įdiekite jį naudodami:

sudo dpkg -i paketo pavadinimas.deb

Jei būsite paraginti įdiegti GPG raktą, vykdykite pateiktas instrukcijas.

Dabar turėsite įdiegti patį „cuda“ paketą. Norėdami tai padaryti, paleiskite:

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

Ši dalis gali užtrukti, todėl galbūt norėsite paimti kavos puodelį. Kai tai bus padaryta, rekomenduoju iš naujo paleisti, kad visi moduliai būtų tinkamai įkelti.

Tada jums reikės „Anaconda Python“ paskirstymo. Atsisiųsti galite čia: https: // www.anakonda.lt / atsisiųsti / # linux

Paimkite 64 bitų versiją ir įdiekite ją taip:

sh Anaconda *.sh

(aukščiau nurodytos komandos žvaigždė užtikrins, kad komanda būtų vykdoma neatsižvelgiant į antrinę versiją)

Numatytoji diegimo vieta turėtų būti tinkama, ir šioje pamokoje mes ją naudosime. Pagal numatytuosius nustatymus jis įdiegiamas į ~ / anaconda3

Diegimo pabaigoje būsite paraginti nuspręsti, ar norite pridėti „Anaconda“ prie savo kelio. Jei norite lengviau paleisti reikiamas komandas, atsakykite taip. Norėdami užtikrinti, kad šis pakeitimas įvyktų, diegimo programai visiškai baigus, atsijunkite ir vėl prisijunkite prie savo paskyros.

Daugiau informacijos apie „Anaconda“ diegimą: https: // linuxhint.com / install-anaconda-python-on-ubuntu /

Galiausiai reikės įdiegti „Numba“. Numba naudoja „LLVM“ kompiliatorių, kad sukompiliuotų „Python“ į mašininį kodą. Tai ne tik pagerina įprasto „Python“ kodo veikimą, bet ir suteikia klijų, reikalingų instrukcijoms siųsti GPU dvejetainiu pavidalu. Norėdami tai padaryti, paleiskite:

conda install numba

GPU programavimo apribojimai ir privalumai

Pagunda manyti, kad bet kurią „Python“ programą galime konvertuoti į GPU pagrįstą programą, žymiai pagreitindami jos našumą. Tačiau vaizdo plokštės GPU veikia gerokai kitaip nei standartinis kompiuterio procesorius.

Centriniai procesoriai valdo daugybę skirtingų įėjimų ir išėjimų ir turi platų instrukcijų, kaip spręsti šias situacijas, asortimentą. Jie taip pat yra atsakingi už prieigą prie atminties, sistemos magistralės valdymą, apsaugos žiedų valdymą, segmentavimą ir įvesties / išvesties funkcionalumą. Jie yra ekstremalūs multitaskeriai, neturintys jokio konkretaus dėmesio.

Kita vertus, GPU yra sukurti paprastoms funkcijoms apdoroti akinančiai greitai. Norėdami tai pasiekti, jie tikisi vienodesnės įvesties ir išvesties būsenos. Specializuojantis skaliarinėse funkcijose. Skaliarinė funkcija reikalauja vieno ar daugiau įėjimų, tačiau pateikia tik vieną išvestį. Šios vertės turi būti tipai, iš anksto apibrėžti numpy.

Kodo pavyzdys

Šiame pavyzdyje sukursime paprastą funkciją, kuri sudarys reikšmių sąrašą, sujungs jas ir grąžins sumą. Norėdami parodyti GPU galią, vykdysime vieną iš šių funkcijų procesoriuje ir vieną GPU ir parodysime laiką. Dokumentinis kodas yra žemiau:

importuoti numpy kaip np iš timeit importuoti default_timer kaip laikmatį iš numba importuoti vectorize # Tai turėtų būti iš esmės didelė vertė. Mano bandomojoje mašinoje užtruko # 33 sekundžių, kol jis veikė per centrinį procesorių, o GPU - šiek tiek daugiau nei 3 sekundes. NUM_ELEMENTS = 100000000 # Tai procesoriaus versija. def vektorius_add_cpu (a, b): c = np.nuliai (NUM_ELEMENTS, tipo tipas = np.float32) i diapazone (NUM_ELEMENTS): c [i] = a [i] + b [i] grąžinti c # Tai GPU versija. Atkreipkite dėmesį į dekoratorių @vectorize. Tai nurodo # numba paversti tai GPU vektorizuota funkcija. @vectorize (["float32 (float32, float32)"], target = "cuda") def vector_add_gpu (a, b): grąžinkite a + b; def pagrindinis (): a_ šaltinis = np.vieni (NUM_ELEMENTS, dtype = np.float32) b_source = np.vieni (NUM_ELEMENTS, dtype = np.float32) # Laikas, kai procesoriaus funkcija start = timer () vector_add_cpu (a_source, b_source) vector_add_cpu_time = timer () - start # GPU funkcija start = timer () vector_add_gpu (a_source, b_source) vector_add_gpu_time = timer () - # kartų spausdinti ("procesoriaus funkcija užtruko% f sekundžių."% vector_add_cpu_time) print (" GPU funkcija užtruko% f sekundės."% vector_add_gpu_time) grąžinti 0, jei __name__ ==" __main__ ": main () 

Norėdami paleisti pavyzdį, įveskite:

python gpu-pavyzdys.py

PASTABA: Jei vykdydami programą susiduriate su problemomis, pabandykite naudoti „conda install accelerate“.

Kaip matote, procesoriaus versija veikia žymiai lėčiau.

Jei ne, tada jūsų pakartojimai yra per maži. Sureguliuokite NUM_ELEMENTS didesne verte (mano manymu, lūžio riba buvo maždaug 100 milijonų). Taip yra todėl, kad GPU nustatymas užima mažai, bet pastebimai laiko, todėl norint, kad operacija būtų verta, reikia didesnio darbo krūvio. Kai pakelsite ją virš savo įrenginio slenksčio, pastebėsite esminius GPU versijos, palyginti su procesoriaus, našumo patobulinimus.

Išvada

Tikiuosi, kad jums patiko mūsų pagrindinis įvadas į GPU programavimą su „Python“. Nors aukščiau pateiktas pavyzdys yra nereikšmingas, jis suteikia pagrindą, kurio reikia, kad galėtumėte toliau panaudoti savo idėjas, naudodamiesi savo GPU galia.

Kaip naudoti „GameConqueror Cheat Engine“ sistemoje „Linux“
Straipsnyje pateikiamas „GameConqueror“ apgaulės variklio naudojimo „Linux“ vadove. Daugelis žaidėjų, žaidžiančių sistemoje „Windows“, dažnai naudoja ...
Geriausi „Linux“ žaidimų konsolių emuliatoriai
Šiame straipsnyje bus išvardyta populiari žaidimų konsolių emuliavimo programinė įranga, skirta „Linux“. „Emuliacija“ yra programinės įrangos suderina...
Geriausi „Linux“ žaidimų distristai 2021 m
„Linux“ operacinė sistema nuėjo ilgą kelią nuo originalios, paprastos, serverio išvaizdos. Ši OS pastaraisiais metais nepaprastai patobulėjo ir dabar ...