6 Python knjižnica za paralelnu obradu

Python dugo voli praktičnost i prilagođenost programerima, ali to nije najbrži programski jezik. Neka od ograničenja brzine posljedica su zadane implementacije, cPython, koja je jednonitna. Odnosno, cPython istovremeno ne koristi više hardverskih niti.

I dok threadingza ubrzavanje stvari možete koristiti modul ugrađen u Python, threadingdaje vam samo istodobnost , a ne paralelizam . Dobar je za pokretanje više zadataka koji ne ovise o CPU, ali ne čini ništa da ubrza više zadataka za koje je potreban puni CPU. 

Python uključuje izvorni način izvođenja Python radnog opterećenja na više CPU-a. multiprocessingModul vrti se više kopija Python prevodioca, svaki na zasebnoj jezgre i pruža primitivi za cijepanje zadatke diljem jezgre. Ali ponekad  multiprocessing nije ni dovoljno.

Posao ponekad zahtijeva distribuciju rada ne samo na više jezgri , već i na više strojeva . Tu dolazi ovih šest Python knjižnica i okvira. Svih šest Pythonovih alata u nastavku omogućuju vam da preuzmete postojeću Python aplikaciju i rasporedite rad na više jezgri, više strojeva ili oboje.

Zraka

Razvio ga je tim istraživača sa Kalifornijskog sveučilišta Berkeley, Ray podupire brojne distribuirane knjižnice strojnog učenja. Ali Ray nije ograničen samo na zadatke strojnog učenja, čak iako je to bio njegov izvorni slučaj. Bilo koji zadaci Pythona mogu se rastaviti i distribuirati po sustavima s Rayom.

Rayova sintaksa je minimalna, pa ne trebate intenzivno prerađivati ​​postojeće aplikacije da biste ih paralelizirali. @ray.remoteDekoraciju distribuira tu funkciju preko svih raspoloživih čvorova u Ray klasteru, s po navedenim parametrima za koliko CPU ili GPU koristiti. Rezultati svake distribuirane funkcije vraćaju se kao Python objekti, pa ih je lako upravljati i pohranjivati, a količina kopiranja preko ili unutar čvorova svedena je na minimum. Ova posljednja značajka dobro dođe, na primjer, kada se radi s NumPy nizovima.

Ray čak uključuje i svoj ugrađeni upravitelj klastera, koji može automatski okretati čvorove prema potrebi na lokalnom hardveru ili popularnim računalima u oblaku.

Povezani video: Upotreba multiprocessingza ubrzavanje Pythona

Dask

Dask izvana sliči na Raya. To je također knjižnica za distribuirano paralelno računanje u Pythonu, sa vlastitim sustavom raspoređivanja zadataka, svjesnošću Python okvira podataka poput NumPy-a i sposobnošću skaliranja s jednog računala na mnoge.

Dask djeluje na dva osnovna načina. Prva je paralelizirana struktura podataka - zapravo Daskove vlastite verzije NumPy nizova, popisa ili Pandas DataFrames. Zamijenite Dask verzije tih konstrukcija prema zadanim postavkama i Dask će automatski izvršiti njihovo izvršavanje po vašoj grupi. To obično uključuje malo više od promjene naziva uvoza, ali ponekad može zahtijevati prepisivanje kako bi u potpunosti funkcioniralo.

Drugi je način putem Daskovih mehanizama za paralelizaciju na niskoj razini, uključujući dekoratore funkcija, koji parceliraju poslove na čvorovima i vraćaju rezultate sinhrono ("neposredni" način) ili asinkrono ("lijeni"). Oba se načina mogu prema potrebi miješati.

Jedna od ključnih razlika između Daska i Raya je mehanizam raspoređivanja. Dask koristi centralizirani planer koji obrađuje sve zadatke klastera. Ray je decentraliziran, što znači da svaki stroj ima svoj vlastiti planer, tako da se svi problemi s planiranim zadatkom rješavaju na razini pojedinog stroja, a ne cijelog klastera.

Dask također nudi naprednu i još uvijek eksperimentalnu značajku pod nazivom "glumci". Glumac je objekt koji upućuje na posao na drugom čvoru Dask. Na taj se način posao koji zahtijeva puno lokalnog stanja može izvoditi na mjestu i drugi čvorovi ga mogu pozvati na daljinu, tako da se stanje za posao ne mora replicirati. Rayu nedostaje bilo što poput Daskova glumačkog modela koji bi podržao sofisticiraniju raspodjelu posla.

Dispy

Dispy vam omogućuje distribuciju cijelih Python programa ili samo pojedinih funkcija kroz skup strojeva za paralelno izvršavanje. Koristi mehanizme matične platforme za mrežnu komunikaciju kako bi stvari bile brze i učinkovite, tako da Linux, MacOS i Windows strojevi rade jednako dobro.

Sintaksa Dispy donekle nalikuje multiprocessing tome što izričito izradite klaster (gdje multiprocessingbiste trebali stvoriti spremište procesa), prijavite rad klasteru, a zatim dohvatite rezultate. Možda će biti potrebno malo više posla za modificiranje poslova za rad s Dispy-om, ali također dobivate preciznu kontrolu nad načinom slanja i vraćanja tih poslova. Na primjer, možete vratiti privremene ili djelomično dovršene rezultate, prenijeti datoteke kao dio postupka distribucije posla i koristiti SSL šifriranje prilikom prijenosa podataka.

Pandaral·lel

Pandaral·lel, kao što naziv govori, način je paralelizacije Pandinih poslova na više čvorova. Loša je strana što Pandaral·lel radi samo  s Pandama . Ali ako Pandas koristite ono što koristite, a sve što trebate je način za ubrzanje Pandasovih poslova na više jezgri na jednom računalu, Pandaral·lel je laserski fokusiran na zadatak.

Imajte na umu da će se Pandaral·lel, doduše, izvoditi na sustavu Windows, izvodit će se samo iz Python sesija pokrenutih u Windows podsustavu za Linux. Korisnici MacOS-a i Linuxa mogu pokretati Pandaral·lel kakav jest. 

Ipiparalelno

Ipyparallel je još jedan usko fokusiran sustav višestruke obrade i distribucije zadataka, posebno za paraleliziranje izvršavanja Jupyterovog koda prijenosnog računala kroz klaster. Projekti i timovi koji već rade u Jupyteru mogu odmah početi koristiti Ipyparallel.

Ipyparallel podržava mnoge pristupe paraleliziranju koda. Na jednostavnom kraju, postoji map, koja primjenjuje bilo koju funkciju na niz i ravnomjerno raspoređuje rad na dostupne čvorove. Za složeniji posao možete ukrasiti određene funkcije kako bi se uvijek izvodile daljinski ili paralelno.

Jupyterove bilježnice podržavaju "čarobne naredbe" za radnje moguće samo u okruženju prijenosnika. Ipyparallel dodaje nekoliko vlastitih čarobnih naredbi. Na primjer, bilo kojem Python izrazu možete dodati prefiks %pxda biste ga automatski paralelizirali.

Joblib

Joblib ima dva glavna cilja: voditi poslove paralelno i ne preračunavati rezultate ako se ništa nije promijenilo. Te učinkovitosti Jobliba čine pogodnim za znanstveno računanje, gdje su ponovljivi rezultati nesvjesni. Joblibova dokumentacija nudi mnoštvo primjera kako koristiti sve njegove značajke.

Sintaksa Joblib za paraleliziranje rada dovoljno je jednostavna - iznosi dekorater koji se može koristiti za dijeljenje poslova između procesora ili za predmemoriranje rezultata. Paralelni poslovi mogu koristiti niti ili procese.

Joblib uključuje prozirnu predmemoriju diska za Python objekte stvorene računalnim poslovima. Ova predmemorija ne samo da pomaže Joblibu da izbjegne ponavljanje posla, kao što je gore spomenuto, već se može koristiti i za obustavu i nastavak dugotrajnih poslova ili za nastavak tamo gdje je posao stao nakon pada. Predmemorija je također inteligentno optimizirana za velike objekte poput NumPy nizova. Regije podataka mogu se dijeliti u memoriji između procesa na istom sustavu pomoću numpy.memmap.

Jedna stvar koju Joblib ne nudi je način distribucije poslova na više odvojenih računala. U teoriji je za to moguće koristiti Joblibov cjevovod, ali vjerojatno je lakše koristiti drugi okvir koji ga podržava nativno. 

Pročitajte više o Pythonu

  • Što je Python? Moćno, intuitivno programiranje
  • Što je PyPy? Brži Python bez boli
  • Što je Cython? Python brzinom C
  • Vodič za Cython: Kako ubrzati Python
  • Kako instalirati Python na pametan način
  • Najbolje nove značajke u Pythonu 3.8
  • Bolje upravljanje Python projektima s poezijom
  • Virtualenv i venv: Objašnjena Python virtualna okruženja
  • Python virtualenv i venv čine i ne čine
  • Objašnjeni Python navoji i potprocesi
  • Kako se koristi Python program za ispravljanje pogrešaka
  • Kako koristiti timeit za profiliranje Python koda
  • Kako koristiti cProfile za profiliranje Python koda
  • Započnite s async u Pythonu
  • Kako koristiti asyncio u Pythonu
  • Kako pretvoriti Python u JavaScript (i natrag)
  • Python 2 EOL: Kako preživjeti kraj Pythona 2
  • 12 Pythona za svaku programsku potrebu
  • 24 Python biblioteke za svakog programera Pythona
  • 7 slatkih IDE-a za Python koje ste možda propustili
  • 3 glavna nedostatka Pythona - i njihova rješenja
  • 13 uspoređenih Python web okvira
  • 4 Python test okvira za uništavanje bugova
  • 6 sjajnih novih Python značajki koje ne želite propustiti
  • 5 Python distribucija za svladavanje strojnog učenja
  • 8 sjajnih Python knjižnica za obradu prirodnog jezika