Programiranje

6 Python knjižnic za vzporedno obdelavo

Python je dolg priročnosti in prijaznosti do programerjev, vendar ni najhitrejši programski jezik. Nekatere omejitve hitrosti so posledica privzete izvedbe cPython, ki je enonitna. To pomeni, da cPython ne uporablja več kot ene niti strojne opreme hkrati.

In medtem ko lahko uporabite navojem modul, vgrajen v Python, da pospeši stvari, navojem samo vam daje sočasnost, ne vzporednost. Dobro je zagnati več nalog, ki niso odvisne od CPU-ja, vendar ne pomaga pospešiti več opravil, za katera je vsaka potrebna poln CPU.

Python vključuje izvorni način za izvajanje obremenitve Python na več CPU-jih. The večprocesna obdelava modul vrti več kopij tolmača Python, vsaka v ločenem jedru, in zagotavlja primitive za razdelitev nalog med jedri. Toda včasih celovečprocesna obdelava ni dovolj.

Včasih služba zahteva razdeljevanje dela ne le med več jeder, ampak tudi čez več strojev. Tu nastopi teh šest knjižnic in okvirov Python. Vseh šest spodnjih orodij Python vam omogoča, da vzamete obstoječo aplikacijo Python in delo razporedite na več jeder, več strojev ali oboje.

žarek

Ray, ki ga je razvila skupina raziskovalcev na kalifornijski univerzi v Berkeleyju, podpira številne knjižnice strojnega učenja. Toda Ray ni omejen samo na naloge strojnega učenja, četudi je bil to prvotni primer uporabe. Katere koli naloge Pythona lahko z Rayem razdelimo in porazdelimo med sisteme.

Rayova sintaksa je minimalna, zato vam ni treba v veliki meri predelati obstoječih aplikacij, da jih vzporedite. The @ ray.remote decorator to funkcijo razdeli po vseh razpoložljivih vozliščih v gruči Ray z neobvezno določenimi parametri, koliko CPU-jev ali GPU-jev uporabiti. Rezultati vsake porazdeljene funkcije se vrnejo kot predmeti Python, zato jih je enostavno upravljati in shranjevati, količina kopiranja med vozlišči ali znotraj njih pa je minimalna. Ta zadnja funkcija je priročna, na primer pri obravnavi nizov NumPy.

Ray vključuje celo lasten vgrajen upravitelj gruč, ki lahko samodejno zavrti vozlišča po potrebi na lokalni strojni opremi ali priljubljenih platformah za računalništvo v oblaku.

Sorodni video: Uporaba večprocesna obdelava za pospešitev Pythona

Dask

Dask je od zunaj zelo podoben Rayu. Tudi to je knjižnica za porazdeljeno vzporedno računalništvo v Pythonu, z lastnim sistemom za razporejanje nalog, zavedanjem podatkovnih okvirov Python, kot je NumPy, in zmožnostjo merjenja z enega stroja na več.

Dask deluje na dva osnovna načina. Prva je paralelizirana podatkovna struktura - v bistvu Daskove lastne različice nizov NumPy, seznami ali Pandas DataFrames. Zamenjajte različice teh konstrukcij Dask za njihove privzete vrednosti in Dask bo samodejno razširil njihovo izvajanje po vaši gruči. To običajno vključuje le kaj več kot spreminjanje imena uvoza, vendar lahko včasih zahteva popolno prepisovanje.

Drugi način je prek nizko nivojskih mehanizmov paralelizacije Dask, vključno z dekoraterji funkcij, ki razdelijo opravila po vozliščih in vrnejo rezultate sinhrono ("takojšnji" način) ali asinhrono ("leni"). Oba načina lahko po potrebi tudi mešate.

Ena ključnih razlik med Daskom in Rayom je mehanizem razporejanja. Dask uporablja centraliziran razporejevalnik, ki obravnava vsa opravila grozda. Ray je decentraliziran, kar pomeni, da ima vsaka naprava svoj načrtovalnik, zato se vse težave z razporejenim opravilom obravnavajo na ravni posamezne naprave in ne celotne gruče.

Dask ponuja tudi napredno in še vedno eksperimentalno funkcijo, imenovano "igralci". Igralec je predmet, ki kaže na opravilo v drugem vozlišču Dask. Tako lahko opravilo, ki zahteva veliko lokalnega stanja, deluje na mestu in ga druga vozlišča prikličejo na daljavo, zato stanja za to opravilo ni treba replicirati. Rayu manjka kaj takega kot Daskov igralski model, ki bi podpiral bolj dodelano razporeditev delovnih mest.

Dispy

Dispy vam omogoča distribucijo celotnih programov Python ali samo posameznih funkcij v skupini strojev za vzporedno izvajanje. Za mrežne komunikacije uporablja mehanizme, ki temeljijo na platformi, da so stvari hitre in učinkovite, zato stroji Linux, MacOS in Windows delujejo enako dobro.

Sintaksa dispy je nekoliko podobna večprocesna obdelava v tem, da izrecno ustvarite gručo (kjer večprocesna obdelava bi ustvarili področje procesov), oddajte delo v gručo in nato pridobite rezultate. Za spreminjanje opravil za delo z Dispyjem bo morda potrebno nekaj več dela, vendar boste tudi natančno nadzorovali, kako so ta opravila poslana in vrnjena. Na primer, lahko vrnete začasne ali delno dokončane rezultate, prenesete datoteke kot del postopka distribucije opravila in pri prenosu podatkov uporabite šifriranje SSL.

Pandaral·lel

Pandaral·lel, kot že ime pove, je način za vzporeditev opravil Pandas v več vozliščih. Slaba stran je, da Pandaral·lel deluje samo s Pandami. Če pa uporabljate Pande, in vse, kar potrebujete, je način, kako pospešiti opravila Pandas v več jedrih v enem računalniku, je Pandaral·lel lasersko osredotočen na to nalogo.

Upoštevajte, da se Pandaral·lel sicer izvaja v sistemu Windows, vendar se bo zagnal samo iz sej Python, zagnanih v podsistemu Windows za Linux. Uporabniki MacOS-a in Linuxa lahko Pandaral·lel izvajajo takšen kot je.

Ipiparalelno

Ipyparallel je še en tesno usmerjen večprocesorski sistem in sistem za razdeljevanje nalog, posebej za paralelizacijo izvajanja kode zvezka Jupyter v gruči. Projekti in skupine, ki že delujejo v Jupyterju, lahko takoj začnejo uporabljati Ipyparallel.

Ipyparallel podpira številne pristope k paraleliziranju kode. Na preprostem koncu je zemljevid, ki uporabi katero koli funkcijo za zaporedje in delo enakomerno razdeli na razpoložljiva vozlišča. Za bolj zapleteno delo lahko okrasite določene funkcije, da se vedno izvajajo na daljavo ali vzporedno.

Prenosniki Jupyter podpirajo »čarovniške ukaze« za dejanja, ki so možna samo v okolju prenosnika. Ipyparallel doda nekaj svojih čarovniških ukazov. Na primer, pred katero koli izjavo Pythona lahko predpišete % px za samodejno vzporeditev.

Joblib

Joblib ima dva glavna cilja: vzporedno voditi službe in ne preračunavati rezultatov, če se nič ni spremenilo. Zaradi te učinkovitosti je Joblib zelo primeren za znanstveno računalništvo, kjer so ponovljivi rezultati neskladni. Joblibova dokumentacija vsebuje obilo primerov, kako uporabiti vse njene funkcije.

Sintaksa Joblib za paralelno delo je dovolj preprosta - pomeni dekorater, ki ga lahko uporabimo za razdelitev opravil med procesorji ali za predpomnjenje rezultatov. Vzporedna opravila lahko uporabljajo niti ali procese.

Joblib vključuje pregleden predpomnilnik diska za predmete Python, ustvarjene z računskimi opravili. Ta predpomnilnik ne pomaga samo Joblibu, da se izogne ​​ponavljanju dela, kot je bilo omenjeno zgoraj, temveč ga lahko uporablja tudi za začasno ustavitev in nadaljevanje dolgotrajnih opravil ali nadaljevanje, kjer je opravilo končano po zrušitvi. Predpomnilnik je tudi inteligentno optimiziran za velike predmete, kot so nizi NumPy. Območja podatkov lahko z uporabo delite v pomnilniku med procesi v istem sistemu numpy.memmap.

Ena stvar, ki je Joblib ne ponuja, je način za razporeditev opravil v več ločenih računalnikih. Teoretično je za to mogoče uporabiti Joblibov plinovod, verjetno pa je lažje uporabiti drug okvir, ki ga podpira.

Preberite več o Pythonu

  • Kaj je Python? Zmogljivo, intuitivno programiranje
  • Kaj je PyPy? Hitrejši Python brez bolečin
  • Kaj je Cython? Python s hitrostjo C.
  • Vadnica za Cython: Kako pospešiti Python
  • Kako namestiti Python na pameten način
  • Najboljše novosti v Pythonu 3.8
  • Boljše upravljanje Python projektov s Poetry
  • Virtualenv in venv: Razložena navidezna okolja Python
  • Python virtualenv in venv dela in ne sme
  • Razloženi navoji Python in podprocesi
  • Kako uporabljati razhroščevalnik Python
  • Kako uporabiti timeit za profiliranje kode Python
  • Kako uporabiti cProfile za profiliranje kode Python
  • Začnite z async v Pythonu
  • Kako uporabljati asyncio v Pythonu
  • Kako pretvoriti Python v JavaScript (in nazaj)
  • Python 2 EOL: Kako preživeti konec Pythona 2
  • 12 Pythonov za vsako programsko potrebo
  • 24 Python knjižnic za vsakega razvijalca Pythona
  • 7 sladkih ID-jev Python, ki ste jih morda zamudili
  • 3 glavne pomanjkljivosti Pythona - in njihove rešitve
  • 13 primerjanih spletnih okvirov Python
  • 4 Python testni okviri za zmečkanje napak
  • 6 odličnih novih funkcij Pythona, ki jih ne želite zamuditi
  • 5 distribucij Pythona za obvladovanje strojnega učenja
  • 8 odličnih Pythonovih knjižnic za obdelavo naravnega jezika
$config[zx-auto] not found$config[zx-overlay] not found