Programavimas

6 Python bibliotekos lygiagrečiam apdorojimui

„Python“ ilgai naudojasi patogumu ir patogumu programuotojams, tačiau tai nėra pati greičiausia programavimo kalba. Kai kuriuos greičio apribojimus lemia numatytasis diegimas „cPython“, turintis vieną giją. Tai yra, „cPython“ vienu metu nenaudoja daugiau nei vienos aparatūros gijos.

Ir nors jūs galite naudoti sriegimas „Python“ įmontuotas modulis, kad viskas paspartėtų sriegimas tik tau duoda sutapimas, ne lygiagretumas. Tai tinka vykdant kelias užduotis, kurios nepriklauso nuo procesoriaus, tačiau nieko nedaro, kad pagreitintų kelias užduotis, kurių kiekvienai reikia viso procesoriaus.

„Python“ taip pat yra įprastas būdas paleisti „Python“ darbo krūvį keliuose procesoriuose. daugiaprocesinis modulis sukioja kelias „Python“ vertėjo kopijas, kiekviena iš jų atskirame branduolyje, ir pateikia primityvų užduočių padalijimui tarp branduolių. Bet kartais netdaugiaprocesinis nepakanka.

Kartais darbas reikalauja paskirstyti darbą ne tik tarp kitų keli šerdys, bet ir skersai kelios mašinos. Čia yra šios šešios „Python“ bibliotekos ir sistemos. Visi šeši toliau pateikiami „Python“ įrankių rinkiniai leidžia jums pasirinkti esamą „Python“ programą ir paskirstyti darbą keliuose branduoliuose, keliose mašinose ar abiejuose.

Ray

Kalifornijos universiteto Berkeley tyrėjų grupės sukurtas Ray palaiko daugybę paskirstytų mašininio mokymosi bibliotekų. Tačiau „Ray“ neapsiriboja vien mašininio mokymosi užduotimis, net jei tai buvo jo pirminis naudojimo atvejis. Bet kurias „Python“ užduotis galima suskaidyti ir paskirstyti sistemoms naudojant „Ray“.

„Ray“ sintaksė yra minimali, todėl norint jas lygiagrečiai naudoti, nereikia daug pertvarkyti esamų programų. @ ray.remote dekoratorius paskirsto šią funkciją visuose galimuose „Ray“ sankaupos mazguose su pasirinktinai nurodytais parametrais, kiek procesorių ar GPU naudoti. Kiekvienos paskirstytos funkcijos rezultatai grąžinami kaip „Python“ objektai, todėl juos lengva valdyti ir saugoti, o kopijavimo per mazgus ar jų viduje kiekis yra minimalus. Ši paskutinė funkcija yra naudinga, kai kalbama, pavyzdžiui, su „NumPy“ masyvais.

„Ray“ netgi turi savo įmontuotą klasterių tvarkyklę, kuri prireikus gali automatiškai sukti mazgus vietinėje aparatinėje ar populiariose debesų kompiuterijos platformose.

Susijęs vaizdo įrašas: Naudojant daugiaprocesinis paspartinti „Python“

Užduotis

Iš išorės Daskas panašus į Rėjų. Tai taip pat yra paskirstyto lygiagretaus skaičiavimo „Python“ biblioteka, turinti savo užduočių planavimo sistemą, žinanti „Python“ duomenų sistemas, tokias kaip „NumPy“, ir galimybę keisti mastelį nuo vienos mašinos iki daugelio.

„Dask“ veikia dviem pagrindiniais būdais. Pirmasis yra lygiagrečių duomenų struktūrų būdas - iš esmės pačios Dask versijos „NumPy“ masyvų, sąrašų arba „Pandas DataFrame“ versijos. Pakeiskite šių konstrukcijų „Dask“ versijas pagal numatytuosius nustatymus, ir „Dask“ automatiškai paskirstys jų vykdymą jūsų klasteryje. Paprastai tai susiję tik su importo pavadinimo keitimu, tačiau kartais gali reikėti perrašyti, kad jis veiktų visiškai.

Antrasis būdas yra naudojant „Dask“ žemo lygio lygiagretinimo mechanizmus, įskaitant funkcijų dekoratorius, kurie išskiria darbus per mazgus ir grąžina rezultatus sinchroniškai („tiesioginis“ režimas) arba asinchroniškai („tingus“). Abu režimai taip pat gali būti maišomi pagal poreikį.

Vienas pagrindinių Dask ir Ray skirtumų yra planavimo mechanizmas. „Dask“ naudoja centralizuotą tvarkaraštį, kuris tvarko visas klasterio užduotis. „Ray“ yra decentralizuotas, tai reiškia, kad kiekviena mašina valdo savo planuoklį, todėl visi suplanuotos užduoties klausimai sprendžiami atskiros mašinos, o ne viso klasterio lygiu.

„Dask“ taip pat siūlo pažangią ir vis dar eksperimentinę funkciją, vadinamą „aktoriais“. Aktorius yra objektas, nurodantis darbą kitame „Dask“ mazge. Tokiu būdu darbas, kuriam reikia daug vietos valstybės, gali būti vykdomas vietoje ir jį gali iškviesti kiti mazgai nuotoliniu būdu, todėl valstybei už darbą nereikia kartoti. Ray'ui trūksta nieko panašaus į Dasko aktoriaus modelį, kad būtų palaikomas rafinuotesnis darbo paskirstymas.

Dispy

„Dispy“ leidžia lygiagrečiam vykdymui paskirstyti visas „Python“ programas arba tik atskiras funkcijas mašinų grupėje. Tinklo komunikacijai ji naudoja vietinius platformos mechanizmus, kad viskas būtų greitai ir efektyviai, todėl „Linux“, „MacOS“ ir „Windows“ mašinos veikia vienodai gerai.

Dispy sintaksė šiek tiek panaši daugiaprocesinis tuo jūs aiškiai sukuriate klasterį (kur daugiaprocesinis sukūrėte procesų grupę), pateikite darbą klasteriui, tada gaukite rezultatus. Gali prireikti šiek tiek daugiau darbo, kad pakeistumėte darbus, kad galėtumėte dirbti su „Dispy“, bet jūs taip pat tiksliai kontroliuojate, kaip tos darbo vietos išsiunčiamos ir grąžinamos. Pvz., Galite grąžinti laikinus arba iš dalies užbaigtus rezultatus, perkelti failus kaip darbo paskirstymo proceso dalį ir naudoti SSL šifravimą, kai perkeliate duomenis.

Pandaral·lel

Kaip rodo pavadinimas, „Pandaral·lel“ yra būdas „Pandas“ užduotis lyginti keliuose mazguose. Neigiama yra tai, kad „Pandaral·lel“ veikia tik su Pandomis. Bet jei jūs naudojate „Pandas“ ir jums tereikia tik pagreitinti „Pandas“ darbus keliuose branduoliuose viename kompiuteryje, „Pandaral·lel“ yra nukreiptas į lazerį.

Atkreipkite dėmesį, kad nors „Pandaral·lel“ veikia „Windows“, jis bus vykdomas tik iš „Python“ seansų, paleistų „Windows“ sistemoje, skirtoje „Linux“. „MacOS“ ir „Linux“ vartotojai gali paleisti „Pandaral·lel as-is“.

Ipyparallel

„Ipyparallel“ yra dar viena griežtai orientuota daugiaprocesinė ir užduočių paskirstymo sistema, specialiai skirta „Jupyter“ nešiojamojo kompiuterio kodo vykdymui klasteriuose lyginti. Projektai ir komandos, jau dirbantys „Jupyter“, gali iš karto pradėti naudoti „Ipyparallel“.

„Ipyparallel“ palaiko daugybę būdų lygiagretinti kodą. Paprasčiausia yra žemėlapis, kuris sekai taiko bet kokią funkciją ir tolygiai padalija darbą tarp galimų mazgų. Norėdami atlikti sudėtingesnį darbą, galite papuošti konkrečias funkcijas, kad jos visada veiktų nuotoliniu būdu arba lygiagrečiai.

„Jupyter“ nešiojamieji kompiuteriai palaiko „stebuklingas komandas“ veiksmams, kurie įmanomi tik nešiojamojo kompiuterio aplinkoje. „Ipyparallel“ prideda kelias savo magiškas komandas. Pvz., Prieš bet kurį „Python“ sakinį galite įvesti % piks kad jis būtų automatiškai lygiagretus.

Joblibas

Joblibas turi du pagrindinius tikslus: lygiagrečiai vykdyti darbus ir neperskaičiuoti rezultatų, jei niekas nepasikeitė. Dėl šių efektyvumų „Joblib“ puikiai tinka moksliniam skaičiavimui, kur atkuriami rezultatai yra šventi. „Joblib“ dokumentuose pateikiama daugybė pavyzdžių, kaip naudotis visomis jo funkcijomis.

„Joblib“ sintaksė, skirta lygiagrečiam darbui, yra pakankamai paprasta - ji prilygsta dekoratoriui, kurį galima naudoti norint padalinti užduotis procesoriuose arba talpinti rezultatus talpykloje. Lygiagrečiuose darbuose gali būti naudojamos gijos ar procesai.

„Joblib“ yra skaidri „Python“ objektų disko talpykla, sukurta skaičiuojant užduotis. Ši talpykla ne tik padeda „Joblib“ išvengti darbo kartojimo, kaip minėta aukščiau, bet ir gali būti naudojama sustabdyti ir atnaujinti ilgai dirbančius darbus arba pasiimti ten, kur darbas nutrūko po avarijos. Talpykla taip pat sumaniai optimizuota dideliems objektams, pvz., „NumPy“ masyvams. Duomenų regionai gali būti dalijami atmintyje tarp tos pačios sistemos procesų naudojant numpy.memmap.

Vienas dalykas, kurio „Joblib“ nesiūlo, yra būdas paskirstyti darbus keliems atskiriems kompiuteriams. Teoriškai tam galima naudoti „Joblib“ vamzdyną, tačiau tikriausiai lengviau naudoti kitą sistemą, kuri ją palaiko savaime.

Skaitykite daugiau apie „Python“

  • Kas yra „Python“? Galingas, intuityvus programavimas
  • Kas yra PyPy? Greitesnis „Python“ be skausmo
  • Kas yra „Cython“? Python C greičiu
  • „Cython“ pamoka: kaip pagreitinti „Python“
  • Kaip įdiegti „Python“ išmaniuoju būdu
  • Geriausios naujos „Python 3.8“ funkcijos
  • Geresnis „Python“ projektų valdymas naudojant „Poetry“
  • „Virtualenv“ ir „venv“: paaiškintos „Python“ virtualios aplinkos
  • „Python virtualenv“ ir „venv do and donts“
  • Paaiškinta „Python“ sriegimas ir antriniai procesai
  • Kaip naudotis „Python“ derintuvu
  • Kaip naudoti „Timeit“, kad būtų galima nustatyti „Python“ kodą
  • Kaip naudoti „cProfile“ „Python“ kodui nustatyti
  • Pradėkite naudoti „Python“ asinchronizavimą
  • Kaip naudoti „asyncio“ Python
  • Kaip konvertuoti „Python“ į „JavaScript“ (ir dar kartą)
  • „Python 2“ EOL: kaip išgyventi „Python 2“ pabaigą
  • 12 pitonų kiekvienam programavimo poreikiui
  • 24 „Python“ bibliotekos kiekvienam „Python“ kūrėjui
  • 7 mieli „Python“ IDE, kurių galbūt praleidote
  • 3 pagrindiniai „Python“ trūkumai ir jų sprendimo būdai
  • Palyginti 13 „Python“ žiniatinklio sistemų
  • 4 „Python“ testavimo sistemos, kad sutriuškintumėte jūsų klaidas
  • 6 puikios naujos „Python“ funkcijos, kurių nenorite praleisti
  • 5 „Python“ paskirstymai, skirti įsisavinti mašininį mokymąsi
  • 8 puikios „Python“ bibliotekos, skirtos natūraliai kalbai apdoroti