Programmēšana

6 Python bibliotēkas paralēlai apstrādei

Python jau sen izmanto ērtības un programmētāju draudzīgumu, taču tā nav visātrākā programmēšanas valoda. Daži no tā ātruma ierobežojumiem ir saistīti ar tā noklusējuma ieviešanu - cPython - ar vienu pavedienu. Tas nozīmē, ka cPython vienlaikus neizmanto vairāk nekā vienu aparatūras pavedienu.

Un, kamēr jūs varat izmantot vītņošana modulis, kas iebūvēts Python, lai paātrinātu lietas, vītņošana tikai tev dod vienlaikus, nevis paralēlisms. Tas ir piemērots vairāku uzdevumu izpildei, kas nav atkarīgi no procesora, taču neko nedara, lai paātrinātu vairākus uzdevumus, kuriem katram nepieciešams pilns centrālais procesors.

Python patiešām ietver vietējo veidu, kā palaist Python darba slodzi vairākos CPU. The daudzapstrāde modulis apgriež vairākas Python tulka kopijas, katra no tām atrodas atsevišķā kodolā, un nodrošina primitīvus uzdevumu sadalīšanai pa kodoliem. Bet dažreiz patdaudzapstrāde nepietiek.

Dažreiz darbs prasa darba sadalīšanu ne tikai visā vairāki kodoli, bet arī pāri vairākas mašīnas. Tieši šeit ir šīs sešas Python bibliotēkas un ietvari. Visi seši tālāk norādītie Python rīku komplekti ļauj jums paņemt esošu Python lietojumprogrammu un izplatīt darbu vairākos kodolos, vairākās mašīnās vai abos.

Rejs

Izstrādājis Kalifornijas Universitātes Berkeley pētnieku grupa, Rejs ir daudzu izplatītu mašīnmācīšanās bibliotēku pamatā. Bet Rejs neaprobežojas tikai ar mašīnmācīšanās uzdevumiem, pat ja tas bija tā sākotnējais lietošanas gadījums. Jebkurus Python uzdevumus var sadalīt un sadalīt pa sistēmām ar Ray.

Ray sintakse ir minimāla, tāpēc jums nav nepieciešams daudz pārstrādāt esošās lietotnes, lai tās paralēlizētu. The @ ray.remote dekorators izplata šo funkciju visos pieejamos Ray klastera mezglos, pēc izvēles norādot parametrus, cik CPU vai GPU izmantot. Katras izplatītās funkcijas rezultāti tiek atgriezti kā Python objekti, tāpēc tos ir viegli pārvaldīt un saglabāt, un kopēšanas apjoms mezglos vai to iekšienē ir minimāls. Šī pēdējā funkcija ir noderīga, piemēram, strādājot ar NumPy masīviem.

Ray pat ietver savu iebūvēto kopu pārvaldnieku, kas pēc vajadzības var automātiski apgriezt mezglus vietējā aparatūrā vai populārās mākoņdatošanas platformās.

Saistītais video: Izmantojot daudzapstrāde lai paātrinātu Python

Dask

No ārpuses Dask izskatās daudz kā Rejs. Tā arī ir bibliotēka izplatītai paralēlai skaitļošanai Python, ar savu uzdevumu plānošanas sistēmu, izpratni par Python datu ietvariem, piemēram, NumPy, un iespēju mērogot no vienas mašīnas uz daudzām.

Dask darbojas divos galvenajos veidos. Pirmais ir izmantojot paralēlas datu struktūras - būtībā pašas Dask savas NumPy masīvu, sarakstu vai Pandas DataFrame versijas. Mainiet šo konstrukciju Dask versijas pēc noklusējuma, un Dask automātiski izplatīs to izpildi visā klasterī. Tas parasti ietver nedaudz vairāk nekā mainot importa nosaukumu, bet dažreiz var būt nepieciešama pārrakstīšana, lai tas darbotos pilnībā.

Otrais veids ir Dask zemā līmeņa paralelizācijas mehānismi, ieskaitot funkciju dekorētājus, kas izdala darbus pāri mezgliem un atgriež rezultātus sinhroni (“tūlītējais” režīms) vai asinhroni (“slinks”). Abus režīmus var arī jaukt pēc vajadzības.

Viena no galvenajām atšķirībām starp Dask un Ray ir plānošanas mehānisms. Uzdevums izmanto centralizētu plānotāju, kas apstrādā visus klastera uzdevumus. Ray ir decentralizēts, tas nozīmē, ka katra mašīna vada savu plānotāju, tāpēc visas problēmas ar ieplānoto uzdevumu tiek risinātas atsevišķas mašīnas līmenī, nevis visas kopas līmenī.

Dask piedāvā arī uzlabotu un joprojām eksperimentālu funkciju, ko sauc par “aktieriem”. Aktieris ir objekts, kas norāda uz darbu citā Dask mezglā. Tādējādi darbs, kuram nepieciešams daudz vietējā štata, var darboties uz vietas, un citi mezgli tos var izsaukt no attāluma, tāpēc darba štats nav jāatkārto. Rejam trūkst kaut kas līdzīgs Dask aktiera modelim, lai atbalstītu sarežģītāku darba sadalījumu.

Dispy

Dispy ļauj paralēli izpildīt izplatīt visas Python programmas vai tikai atsevišķas funkcijas pa mašīnu kopu. Tīkla saziņai tā izmanto platformas pamatmehānismus, lai lietas būtu ātras un efektīvas, tāpēc Linux, MacOS un Windows mašīnas darbojas vienlīdz labi.

Dispy sintakse nedaudz atgādina daudzapstrāde tajā, ka jūs skaidri izveidojat kopu (kur daudzapstrāde vai jūs izveidotu procesu kopu), iesniedziet darbu kopai un pēc tam izgūstiet rezultātus. Iespējams, būs vajadzīgs nedaudz vairāk darba, lai modificētu darbus, lai strādātu ar Dispy, taču jūs arī iegūstat precīzu kontroli pār to, kā šie darbi tiek nosūtīti un atgriezti. Piemēram, jūs varat atgriezt provizoriskus vai daļēji pabeigtus rezultātus, pārsūtīt failus kā daļu no darba izplatīšanas procesa un datu pārsūtīšanas laikā izmantot SSL šifrēšanu.

Pandaral·lel

Kā norāda nosaukums, Pandaral·lel ir veids, kā Pandas darbus paralēli savienot vairākos mezglos. Negatīvie ir tas, ka Pandaral·lel darbojas tikai ar Pandām. Bet, ja jūs izmantojat Pandas, un viss, kas jums nepieciešams, ir veids, kā paātrināt Pandas darbus vairākos kodolos vienā datorā, Pandaral·lel ir lāzera fokusā uz uzdevumu.

Ņemiet vērā, ka, lai arī Pandaral·lel darbojas sistēmā Windows, tas darbosies tikai no Python sesijām, kas palaistas Windows apakšsistēmā Linux. MacOS un Linux lietotāji var palaist Pandaral·lel as-is.

Ipyparallel

Ipyparallel ir vēl viena stingri vērsta daudzapstrādes un uzdevumu sadales sistēma, kas īpaši paredzēta Jupyter piezīmjdatora koda izpildes paralelizēšanai visā klasterī. Projekti un komandas, kas jau strādā Jupyter, var nekavējoties sākt lietot Ipyparallel.

Ipyparallel atbalsta daudzas pieejas koda paralelizēšanai. Vienkāršā galā ir karte, kas secībai piemēro jebkuru funkciju un vienmērīgi sadala darbu starp visiem pieejamajiem mezgliem. Sarežģītākam darbam varat izrotāt noteiktas funkcijas, lai tās vienmēr darbotos attālināti vai paralēli.

Jupyter piezīmjdatori atbalsta “burvju komandas” darbībām, kas iespējamas tikai piezīmjdatoru vidē. Ipyparallel pievieno dažas savas burvju komandas. Piemēram, jūs varat prefiksēt jebkuru Python priekšrakstu ar % px lai to automātiski paralēlotu.

Joblib

Joblibam ir divi galvenie mērķi: vadīt darbus paralēli un nepārrēķināt rezultātus, ja nekas nav mainījies. Šīs efektivitātes dēļ Joblib ir labi piemērota zinātniskai skaitļošanai, kur reproducējami rezultāti ir svēti. Jobliba dokumentācijā ir daudz piemēru, kā izmantot visas tā funkcijas.

Joblib sintakse darba paralelizēšanai ir pietiekami vienkārša - tā ir dekorators, kuru var izmantot, lai sadalītu darbus procesoros vai kešatmiņā saglabātu rezultātus. Paralēlos darbos var izmantot pavedienus vai procesus.

Joblib ietver caurspīdīgu diska kešatmiņu Python objektiem, kas izveidoti, aprēķinot darbus. Šī kešatmiņa ne tikai palīdz Joblibam izvairīties no darba atkārtošanas, kā jau minēts iepriekš, bet to var arī izmantot, lai apturētu un atsāktu ilgstošus darbus vai turpinātu darbu pēc avārijas. Kešatmiņa ir gudri optimizēta arī lieliem objektiem, piemēram, NumPy masīviem. Datu reģionus var koplietot atmiņā starp vienas sistēmas procesiem, izmantojot numpy.memmap.

Viena lieta, ko Joblib nepiedāvā, ir veids, kā sadalīt darbus vairākos atsevišķos datoros. Teorētiski ir iespējams izmantot Joblib cauruļvadu, taču, iespējams, ir vieglāk izmantot citu sistēmu, kas to atbalsta dabiski.

Lasiet vairāk par Python

  • Kas ir Python? Jaudīga, intuitīva programmēšana
  • Kas ir PyPy? Ātrāks Python bez sāpēm
  • Kas ir Cython? Python ar ātrumu C
  • Cython apmācība: kā paātrināt Python
  • Kā instalēt Python viedajā veidā
  • Labākās Python 3.8 jaunās funkcijas
  • Labāka Python projektu vadība ar dzeju
  • Virtualenv un venv: paskaidrotas virtuālās Python vides
  • Python virtualenv un venv do's un don'ts
  • Paskaidrots Python vītne un apakšprocesi
  • Kā izmantot Python atkļūdotāju
  • Kā izmantot Timeit, lai profilētu Python kodu
  • Kā izmantot cProfile Python koda profilēšanai
  • Sāciet darbu ar asinhronizāciju Python
  • Kā lietot asyncio Python
  • Kā konvertēt Python uz JavaScript (un atkal atpakaļ)
  • Python 2 EOL: kā izdzīvot Python 2 beigās
  • 12 pitoni visām programmēšanas vajadzībām
  • 24 Python bibliotēkas katram Python izstrādātājam
  • 7 saldie Python IDE, kurus jūs varētu palaist garām
  • 3 galvenie Python trūkumi un to risinājumi
  • Salīdzināti 13 Python tīmekļa ietvari
  • 4 Python testa ietvari, lai iznīcinātu jūsu kļūdas
  • 6 lieliskas jaunas Python funkcijas, kuras nevēlaties palaist garām
  • 5 Python izplatījumi mašīnmācīšanās apgūšanai
  • 8 lieliskas Python bibliotēkas dabiskās valodas apstrādei
$config[zx-auto] not found$config[zx-overlay] not found