Programovanie

6 knižníc Pythonu na paralelné spracovanie

Python je dlhý z hľadiska pohodlia a programovateľnosti, ale nie je to najrýchlejší programovací jazyk. Niektoré z jeho obmedzení rýchlosti sú spôsobené jeho predvolenou implementáciou cPython, ktorá je jednovláknová. To znamená, že cPython nepoužíva naraz viac ako jedno hardvérové ​​vlákno.

A zatiaľ čo môžete použiť závitovanie modul zabudovaný do Pythonu na zrýchlenie, závitovanie iba vám dáva súbežnosť, nie paralelizmus. Je to dobré na spustenie viacerých úloh, ktoré nezávisia od CPU, ale nerobí nič pre urýchlenie viacerých úloh, z ktorých každá vyžaduje plný CPU.

Python obsahuje natívny spôsob spustenia pracovného zaťaženia Pythonu na viacerých procesoroch. The viacprocesové modul roztáča viac kópií tlmočníka Pythonu, každú na samostatnom jadre, a poskytuje primitíva na rozdelenie úloh medzi jadrá. Ale niekedy dokoncaviacprocesové nestačí.

Niekedy práca vyžaduje distribúciu práce nielen naprieč viac jadier, ale aj naprieč viac strojov. To je miesto, kde prichádza týchto šesť knižníc a rámcov Pythonu. Všetkých šesť súprav nástrojov Python uvedených nižšie vám umožňuje prevziať existujúcu aplikáciu Python a rozšíriť prácu na viac jadier, viac strojov alebo oboje.

Ray

Ray, vyvinutý tímom vedcov z Kalifornskej univerzity v Berkeley, je základom mnohých distribuovaných knižníc strojového učenia. Ray sa však neobmedzuje iba na úlohy strojového učenia, aj keď to bol pôvodný prípad použitia. Akékoľvek úlohy v Pythone je možné rozdeliť a distribuovať medzi systémami pomocou Rayu.

Rayova syntax je minimálna, takže nemusíte existujúce aplikácie prepracovávať, aby ste ich paralelizovali. The @ ray.remote dekorátor distribuuje túto funkciu medzi všetky dostupné uzly v klastri Ray s voliteľne určenými parametrami pre počet CPU alebo GPU, ktoré sa majú použiť. Výsledky každej distribuovanej funkcie sa vrátia ako objekty v jazyku Python, takže sa dajú ľahko spravovať a ukladať a množstvo kopírovania cez uzly alebo v rámci nich je minimálne. Táto posledná funkcia sa hodí napríklad pri práci s poliami NumPy.

Ray dokonca obsahuje vlastného zabudovaného správcu klastrov, ktorý dokáže podľa potreby automaticky roztáčať uzly na lokálnom hardvéri alebo populárnych platformách cloud computingu.

Súvisiace video: Používanie viacprocesové na urýchlenie Pythonu

Dask

Zvonku vyzerá Dask veľmi ako Ray. Tiež je to knižnica pre distribuované paralelné výpočty v Pythone, s vlastným systémom plánovania úloh, povedomím o dátových rámcoch Pythonu, ako je NumPy, a možnosťou škálovania z jedného počítača na viac.

Dask funguje dvoma základnými spôsobmi. Prvý je prostredníctvom paralelných dátových štruktúr - v podstate Daskových vlastných verzií NumPy polí, zoznamov alebo Pandas DataFrames. Zamieňajte verzie týchto konštrukcií Dask za ich predvolené hodnoty a Dask automaticky rozšíri ich vykonávanie po vašom klastri. To zvyčajne nevyžaduje nič viac ako zmena názvu importu, ale niekedy môže byť potrebné prepísať, aby fungovala úplne.

Druhým spôsobom sú Daskove nízkoúrovňové paralelizačné mechanizmy vrátane dekorátorov funkcií, ktoré rozdeľujú úlohy naprieč uzlami a vracajú výsledky synchrónne („okamžitý“ režim) alebo asynchrónne („lenivý“). Oba režimy je možné podľa potreby tiež kombinovať.

Jedným z kľúčových rozdielov medzi Daskom a Rayom je mechanizmus plánovania. Dask používa centralizovaný plánovač, ktorý spracováva všetky úlohy pre klaster. Ray je decentralizovaný, čo znamená, že každý stroj má svoj vlastný plánovač, takže akékoľvek problémy s naplánovanou úlohou sa riešia na úrovni jednotlivých strojov, nie celého klastra.

Dask tiež ponúka pokročilú a stále experimentálnu funkciu nazvanú „herci“. Herec je objekt, ktorý ukazuje na úlohu v inom uzle Dask. Takto môže úloha, ktorá vyžaduje veľa miestneho stavu, bežať na mieste a byť volaná na diaľku inými uzlami, takže stav úlohy nie je potrebné replikovať. Rayovi na podporu sofistikovanejšej distribúcie úloh chýba čokoľvek ako Daskov herecký model.

Dispy

Dispy vám umožňuje distribuovať celé programy Pythonu alebo iba jednotlivé funkcie v klastri strojov na paralelné vykonávanie. Na zabezpečenie rýchlej a efektívnej práce využíva mechanizmy natívnej platformy pre sieťovú komunikáciu, takže počítače so systémami Linux, MacOS a Windows fungujú rovnako dobre.

Dispy syntax sa trochu podobá viacprocesové v tom, že výslovne vytvoríte klaster (kde viacprocesové chcete vytvoriť fond procesov), odoslať prácu do klastra a potom načítať výsledky. Možno bude treba trochu viac práce s úpravou úloh tak, aby fungovali s Dispy, ale získate tiež presnú kontrolu nad tým, ako sa tieto úlohy odosielajú a vracajú. Môžete napríklad vrátiť predbežné alebo čiastočne vyplnené výsledky, preniesť súbory ako súčasť procesu distribúcie úloh a pri prenose údajov použiť šifrovanie SSL.

Pandaral·lel

Pandaral·lel, ako už z názvu vyplýva, je spôsob, ako paralelizovať úlohy Pandas vo viacerých uzloch. Nevýhodou je, že Pandaral·lel funguje iba s Pandami. Ale ak Pandas je to, čo práve používaš, a všetko, čo potrebuješ, je spôsob, ako urýchliť úlohy Pandas na viacerých jadrách na jednom počítači, Pandaral·lel je na túto úlohu zameraný laserom.

Upozorňujeme, že zatiaľ čo program Pandaral·lel funguje v systéme Windows, bude sa spúšťať iba z relácií Pythonu spustených v subsystéme Windows pre Linux. Používatelia systémov MacOS a Linux môžu program Pandaral·lel spúšťať tak, ako sú.

Paralelne

Ipyparallel je ďalší úzko zameraný systém na viacnásobné spracovanie a distribúciu úloh, konkrétne na paralelizáciu vykonávania kódu notebooku Jupyter v klastri. Projekty a tímy, ktoré už pracujú v Jupyteri, môžu Ipyparallel okamžite začať používať.

Ipyparallel podporuje mnoho prístupov k paralelizácii kódu. Jednoduchý koniec je tu mapa, ktorý na sekvenciu použije ľubovoľnú funkciu a prácu rovnomerne rozdelí medzi dostupné uzly. Pre zložitejšiu prácu môžete vyzdobiť konkrétne funkcie tak, aby vždy bežali na diaľku alebo paralelne.

Notebooky Jupyter podporujú „magické príkazy“ pre akcie, ktoré sú možné iba v prostredí notebooku. Ipyparallel pridáva niekoľko vlastných magických príkazov. Môžete napríklad predponu vložiť pred akýkoľvek príkaz v jazyku Python % px aby sa to automaticky paralelizovalo.

Joblib

Joblib má dva hlavné ciele: spúšťať úlohy paralelne a neprepočítavať výsledky, ak sa nič nezmenilo. Vďaka tejto efektívnosti je Joblib vhodný na vedecké výpočty, kde sú reprodukovateľné výsledky posvätné. Dokumentácia Joblibu poskytuje množstvo príkladov, ako využiť všetky jeho funkcie.

Syntax Joblib na paralelizáciu práce je dosť jednoduchá - jedná sa o dekorátor, ktorý je možné použiť na rozdelenie úloh medzi procesory alebo na uloženie výsledkov do medzipamäte. Paralelné úlohy môžu používať vlákna alebo procesy.

Joblib obsahuje priehľadnú diskovú medzipamäť pre objekty Pythonu vytvorené výpočtovými úlohami. Táto vyrovnávacia pamäť nielenže pomáha Joblibu vyhnúť sa opakovaniu práce, ako je uvedené vyššie, ale je možné ju použiť aj na pozastavenie a obnovenie dlhotrvajúcich úloh alebo na pokračovanie v práci, kde po zlyhaní úloha skončila. Vyrovnávacia pamäť je tiež inteligentne optimalizovaná pre veľké objekty, ako sú polia NumPy. Regióny údajov možno zdieľať v pamäti medzi procesmi v rovnakom systéme pomocou numpy.memmap.

Jedna vec, ktorú Joblib neponúka, je spôsob distribúcie úloh medzi viac samostatných počítačov. Teoreticky je na to možné použiť potrubie Joblibu, ale pravdepodobne je jednoduchšie použiť iný rámec, ktorý to natívne podporuje.

Prečítajte si viac o Pythone

  • Čo je to Python? Výkonné a intuitívne programovanie
  • Čo je to PyPy? Rýchlejší Python bez bolesti
  • Čo je to Cython? Python rýchlosťou C
  • Výukový program pre Cython: Ako zrýchliť Python
  • Ako inteligentne nainštalovať Python
  • Najlepšie nové funkcie v Pythone 3.8
  • Lepšie riadenie projektov v Pythone s Poetry
  • Virtualenv a venv: Vysvetlenie virtuálnych prostredí Pythonu
  • Python virtualenv a venv robí a nerobí
  • Vysvetlenie vlákien a podprocesov v jazyku Python
  • Ako používať debugger Pythonu
  • Ako používať timeit na profilovanie kódu Pythonu
  • Ako používať cProfile na profilovanie kódu Pythonu
  • Začnite s asynchronizáciou v Pythone
  • Ako používať asyncio v Pythone
  • Ako previesť Python na JavaScript (a späť)
  • Python 2 EOL: Ako prežiť koniec Pythonu 2
  • 12 pytónov pre každú potrebu programovania
  • 24 knižníc Pythonu pre každého vývojára Pythonu
  • Sedem sladkých IDE Pythonu, ktoré vám mohli chýbať
  • 3 hlavné nedostatky Pythonu - a ich riešenia
  • 13 porovnávaných webových rámcov Pythonu
  • 4 testovacie rámce Pythonu na rozdrvenie vašich chýb
  • 6 skvelých nových funkcií Pythonu, ktoré vám určite nebudú chýbať
  • 5 distribúcií Pythonu na zvládnutie strojového učenia
  • 8 skvelých knižníc Pythonu na spracovanie prirodzeného jazyka
$config[zx-auto] not found$config[zx-overlay] not found