Ohjelmointi

6 Python-kirjastoa rinnakkaiskäsittelyä varten

Pythonilla on pitkä käyttömukavuus ja ohjelmoijaystävällisyys, mutta se ei ole nopein ohjelmointikieli. Jotkut sen nopeusrajoituksista johtuvat sen oletustoteutuksesta, cPython, yksisäikeisestä. Toisin sanoen cPython ei käytä useita laitteistoketjuja kerrallaan.

Ja vaikka voit käyttää pujottaminen Pythoniin sisäänrakennettu moduuli nopeuttamaan asioita, pujottaminen vain antaa sinulle samanaikaisuus, ei rinnakkaisuus. Se on hyvä suorittaa useita tehtäviä, jotka eivät ole suorittimen riippuvaisia, mutta ei tee mitään nopeuttaakseen useita tehtäviä, joista kukin vaatii täyden suorittimen.

Python sisältää natiivin tavan suorittaa Python-työkuormitus useissa suorittimissa. moniprosessointi moduuli pyörii useita kopioita Python-tulkkia, kukin erilliselle ytimelle, ja tarjoaa primitiivit tehtävien jakamiseksi ytimille. Mutta joskus jopamoniprosessointi ei riitä.

Joskus työ vaatii työn jakamista paitsi toisilleen useita ytimiä, mutta myös poikki useita koneita. Siellä nämä kuusi Python-kirjastoa ja kehystä tulevat sisään. Kaikkien alla olevien Python-työkalupakettien avulla voit ottaa olemassa olevan Python-sovelluksen ja levittää työn useille ytimille, useille koneille tai molemmille.

säde

Kalifornian yliopiston Berkeleyn tutkijaryhmän kehittämä Ray tukee useita hajautettuja koneoppimiskirjastoja. Mutta Ray ei rajoitu pelkästään koneoppimistehtäviin, vaikka se olisi ollut sen alkuperäinen käyttötapaus. Kaikki Python-tehtävät voidaan hajottaa ja jakaa järjestelmiin Rayn avulla.

Rayn syntaksit ovat vähäiset, joten sinun ei tarvitse muokata olemassa olevia sovelluksia perusteellisesti niiden rinnakkaistamiseksi. @ ray.remote sisustusarkkitehti jakaa tämän toiminnon kaikkien käytettävissä olevien Ray-klusterin solmujen välillä, ja valinnaisesti määritetyt parametrit sille, kuinka monta suorittinta tai grafiikkasuoritinta käytetään. Kunkin jaetun toiminnon tulokset palautetaan Python-objekteina, joten niitä on helppo hallita ja tallentaa, ja solmujen yli tai niiden sisällä tapahtuvan kopioinnin määrä pidetään minimissä. Tämä viimeinen ominaisuus on kätevä, kun käsitellään esimerkiksi NumPy-taulukoita.

Ray sisältää jopa oman sisäänrakennetun klusterinhallinnan, joka pystyy automaattisesti pyörittämään solmut tarvittaessa paikallisilla laitteistoilla tai suosituilla pilvipalvelualustoilla.

Liittyvä video: Käyttäminen moniprosessointi nopeuttaa Pythonia

Tehtävä

Ulkopuolelta Dask näyttää paljon kuin Ray. Se on myös kirjasto hajautettuun rinnakkaislaskentaan Pythonissa, jolla on oma tehtävien ajoitusjärjestelmä, tietoisuus Python-tietokehyksistä, kuten NumPy, ja kyky skaalata yhdestä koneesta moniin.

Tehtävä toimii kahdella perustavalla. Ensimmäinen on rinnakkaistettujen tietorakenteiden kautta - lähinnä Daskin omat versiot NumPy-matriiseista, luetteloista tai Pandas DataFrameista. Vaihda näiden rakenteiden Dask-versiot oletusarvoihinsa, ja Dask jakaa niiden suorituksen automaattisesti klusterisi yli. Tähän liittyy tyypillisesti muutakin kuin tuonnin nimen muuttaminen, mutta joskus se voi edellyttää uudelleenkirjoittamista toimiakseen kokonaan.

Toinen tapa on Daskin matalan tason rinnakkaistamismekanismit, mukaan lukien toimintojen sisustajat, jotka jakavat työt solmujen yli ja palauttavat tulokset synkronisesti ("välitön" -tila) tai asynkronisesti ("laiska"). Molemmat tilat voidaan sekoittaa tarvittaessa.

Yksi keskeinen ero Daskin ja Rayn välillä on ajoitusmekanismi. Dask käyttää keskitettyä ajoitinta, joka hoitaa kaikki klusterin tehtävät. Ray on hajautettu, mikä tarkoittaa, että jokainen kone käyttää omaa ajastinta, joten kaikki ajoitetun tehtävän ongelmat hoidetaan yksittäisen koneen tasolla, ei koko klusterin tasolla.

Dask tarjoaa myös edistyneen ja edelleen kokeellisen ominaisuuden, jota kutsutaan näyttelijöiksi. Näyttelijä on esine, joka osoittaa toisen Dask-solmun työtä. Tällä tavoin työtä, joka vaatii paljon paikallista valtiota, voidaan suorittaa paikallaan, ja muut solmut voivat kutsua sitä etäyhteyden kautta, joten työn tilaa ei tarvitse toistaa. Rayiltä puuttuu Daskin näyttelijämallin kaltaista tukea kehittyneemmälle työnjaolle.

Poista

Dispy antaa sinun jakaa kokonaisia ​​Python-ohjelmia tai vain yksittäisiä toimintoja koneiden joukossa rinnakkaista suoritusta varten. Se käyttää alustan natiivimekanismeja verkkoviestinnässä pitääkseen asiat nopeasti ja tehokkaasti, joten Linux-, MacOS- ja Windows-koneet toimivat yhtä hyvin.

Dispy-syntakse muistuttaa jonkin verran moniprosessointi siinä, että luot nimenomaisesti klusterin (missä moniprosessointi haluatko luoda prosessiryhmän), lähetä työ klusterille ja noudata tuloksia. Hieman enemmän työtä saatetaan tarvita töiden muokkaamiseksi toimimaan Dispy: n kanssa, mutta saat myös tarkan hallinnan siitä, kuinka nämä työpaikat lähetetään ja palautetaan. Voit esimerkiksi palauttaa alustavia tai osittain valmiita tuloksia, siirtää tiedostoja osana työnjakoprosessia ja käyttää SSL-salausta tietojen siirtämisessä.

Pandaral·lel

Pandaral·lel, kuten nimestä voi päätellä, on tapa rinnastaa Pandas-työt useiden solmujen välillä. Haittapuoli on, että Pandaral·lel toimii vain Pandojen kanssa. Mutta jos käytät Pandoja ja tarvitset vain tavan nopeuttaa Pandas-töitä useissa ytimissä yhdellä tietokoneella, Pandaral·lel keskittyy lasertehtävään.

Huomaa, että vaikka Pandaral·lel toimii Windowsissa, se toimii vain Python-istunnoista, jotka on käynnistetty Windows-alijärjestelmässä Linuxille. MacOS- ja Linux-käyttäjät voivat suorittaa Pandaral·lelin sellaisenaan.

Ipyparallel

Ipyparallel on toinen tiukasti kohdennettu moniprosessointi- ja tehtävienjakojärjestelmä, joka on tarkoitettu erityisesti Jupyter-muistikirjan koodin suorittamisen rinnastamiseen klusterin yli. Jupyterissa jo työskentelevät projektit ja ryhmät voivat alkaa käyttää Ipyparallelia välittömästi.

Ipyparallel tukee monia lähestymistapoja koodin rinnakkaistamiseen. Yksinkertaisessa päässä on kartta, joka käyttää mitä tahansa toimintoa sekvenssiin ja jakaa työn tasaisesti käytettävissä oleviin solmuihin. Monimutkaisempaa työtä varten voit sisustaa tiettyjä toimintoja aina etänä tai rinnakkain.

Jupyter-muistikirjat tukevat "taikakomentoja" toiminnoille, jotka ovat mahdollisia vain kannettavan ympäristössä. Ipyparallel lisää muutaman oman taikakomennon. Voit esimerkiksi etuliittää minkä tahansa Python-käskyn % px automaattisesti rinnakkain sen kanssa.

Joblib

Joblibillä on kaksi päätavoitetta: suorittaa töitä rinnakkain äläkä laske tuloksia uudelleen, jos mikään ei ole muuttunut. Nämä tehokkuudet tekevät Joblibista sopivan hyvin tieteelliseen laskentaan, jossa toistettavat tulokset ovat pyhiä. Joblibin dokumentaatio tarjoaa runsaasti esimerkkejä kaikkien ominaisuuksien käytöstä.

Joblib-syntaksi työn rinnakkaistamiseksi on riittävän yksinkertainen - se tarkoittaa sisustajaa, jota voidaan käyttää työn jakamiseen prosessoreille tai välimuistiin. Rinnakkaistyöt voivat käyttää ketjuja tai prosesseja.

Joblib sisältää läpinäkyvän levyvälimuistin laskentatehtävien luomilla Python-objekteilla. Tämä välimuisti auttaa Joblibia välttämään työn toistamista, kuten edellä todettiin, mutta sitä voidaan käyttää myös keskeyttämään ja jatkamaan pitkään jatkuneita töitä tai jatkamaan sitä, mistä työ keskeytyi kaatumisen jälkeen. Välimuisti on myös optimoitu älykkäästi suurille kohteille, kuten NumPy-ryhmille. Tietojen alueet voidaan jakaa muistissa saman järjestelmän prosessien välillä käyttämällä numpy.memmap.

Yksi asia, jota Joblib ei tarjoa, on tapa jakaa työpaikat useille erillisille tietokoneille. Teoriassa on mahdollista käyttää Joblibin putkea tähän, mutta luultavasti on helpompaa käyttää toista kehystä, joka tukee sitä luonnollisesti.

Lue lisää Pythonista

  • Mikä on Python? Tehokas, intuitiivinen ohjelmointi
  • Mikä on PyPy? Nopeampi Python ilman kipua
  • Mikä on Cython? Python nopeudella C
  • Cython-opetusohjelma: Kuinka nopeuttaa Pythonia
  • Kuinka asentaa Python älykkäästi
  • Python 3.8: n parhaat uudet ominaisuudet
  • Parempi Python-projektinhallinta Poetryn avulla
  • Virtualenv ja venv: Python-virtuaaliympäristöt selitetty
  • Python virtualenv ja venv do and don'ts
  • Python-ketjuttaminen ja aliprosessit on selitetty
  • Kuinka käyttää Python-virheenkorjainta
  • Kuinka käyttää timeit Python-koodin profilointiin
  • CProfilen käyttäminen Python-koodin profilointiin
  • Aloita asynkronointi Pythonissa
  • Asyncion käyttäminen Pythonissa
  • Kuinka muuntaa Python JavaScriptiksi (ja takaisin)
  • Python 2 EOL: Kuinka selvitä Python 2: n loppu
  • 12 pyytonia jokaiselle ohjelmointitarpeelle
  • 24 Python-kirjastoa jokaiselle Python-kehittäjälle
  • 7 suloista Python IDE: tä, jotka saatat olla unohtanut
  • 3 suurta Python-puutetta - ja niiden ratkaisut
  • 13 Python-verkkokehystä verrattiin
  • 4 Python-testikehystä vikojen murskaamiseksi
  • 6 upeaa uutta Python-ominaisuutta, joita et halua hukata
  • 5 Python-jakelua koneoppimisen hallitsemiseksi
  • 8 suurta Python-kirjastoa luonnollisen kielen käsittelyyn
$config[zx-auto] not found$config[zx-overlay] not found