6 Perpustakaan Python untuk pemprosesan selari

Python sangat senang dan mesra pengaturcara, tetapi bukan bahasa pengaturcaraan terpantas. Sebilangan had kelajuannya adalah kerana pelaksanaannya yang lalai, cPython, menjadi utas tunggal. Maksudnya, cPython tidak menggunakan lebih daripada satu utas perkakasan pada satu masa.

Walaupun anda boleh menggunakan threadingmodul yang dibina di Python untuk mempercepat, threadinghanya memberi anda kesesuaian , bukan paralelisme . Bagus untuk menjalankan beberapa tugas yang tidak bergantung pada CPU, tetapi tidak melakukan apa-apa untuk mempercepat beberapa tugas yang masing-masing memerlukan CPU penuh. 

Python termasuk cara asli untuk menjalankan beban kerja Python di beberapa CPU. The multiprocessingmodul berputar sehingga berbilang salinan jurubahasa Python, setiap teras yang berasingan, dan menyediakan primitif untuk tugas-tugas membelah seluruh teras. Tetapi kadangkala  multiprocessing tidak mencukupi.

Kadang-kadang pekerjaan memerlukan pengagihan kerja bukan sahaja di beberapa teras , tetapi juga di beberapa mesin . Di situlah terdapat enam perpustakaan dan kerangka kerja Python ini. Keenam-enam kit alat Python di bawah ini membolehkan anda mengambil aplikasi Python yang ada dan menyebarkan karya tersebut di beberapa teras, beberapa mesin, atau kedua-duanya.

Ray

Dibangunkan oleh pasukan penyelidik di University of California, Berkeley, Ray menyokong sejumlah perpustakaan pembelajaran mesin yang diedarkan. Tetapi Ray tidak terhad kepada tugas pembelajaran mesin sahaja, walaupun itu adalah kes penggunaan asalnya. Sebarang tugas Python dapat dipecah dan diedarkan di seluruh sistem dengan Ray.

Sintaksis Ray minimum, jadi anda tidak perlu menyusun semula aplikasi yang ada secara meluas untuk menyelaraskannya. The @ray.remotepenghias mengedarkan fungsi yang merentasi mana-mana nod didapati dalam kelompok Ray, dengan parameter pilihan ditetapkan untuk berapa banyak CPU atau GPU untuk digunakan. Hasil dari setiap fungsi yang diedarkan dikembalikan sebagai objek Python, sehingga mudah dikendalikan dan disimpan, dan jumlah penyalinan di seberang atau di dalam nod dikurangkan minimum. Ciri terakhir ini sangat berguna ketika berurusan dengan tatasusunan NumPy, misalnya.

Ray bahkan menyertakan pengurus kluster terbina dalam, yang secara automatik dapat memutar nod seperti yang diperlukan pada perkakasan tempatan atau platform pengkomputeran awan yang popular.

Video berkaitan: Menggunakan multiprocessinguntuk mempercepat Python

Senja

Dari luar, Dask kelihatan seperti Ray. Ia juga merupakan perpustakaan untuk pengkomputeran selari yang diedarkan di Python, dengan sistem penjadwalan tugasnya sendiri, kesedaran mengenai kerangka data Python seperti NumPy, dan kemampuan untuk membuat skala dari satu mesin ke banyak.

Dask berfungsi dalam dua cara asas. Yang pertama adalah dengan menggunakan struktur data yang selari - pada dasarnya, versi Dask sendiri dari array, senarai, atau Pandas DataFrames versi NumPy. Tukar versi Dask dari konstruksi tersebut untuk lalai mereka, dan Dask secara automatik akan menyebarkan pelaksanaannya ke seluruh kelompok anda. Ini biasanya memerlukan sedikit lebih banyak daripada menukar nama import, tetapi kadang-kadang memerlukan penulisan semula untuk berfungsi sepenuhnya.

Cara kedua adalah melalui mekanisme paralelisasi tingkat rendah Dask, termasuk penghias fungsi, yang membahagikan pekerjaan merentasi node dan mengembalikan hasil secara serentak (mod "segera") atau tidak segerak ("malas"). Kedua-dua mod boleh dicampur mengikut keperluan juga.

Satu perbezaan utama antara Dask dan Ray adalah mekanisme penjadualan. Dask menggunakan penjadual terpusat yang menangani semua tugas untuk kluster. Ray terdesentralisasi, yang bermaksud setiap mesin menjalankan penjadualnya sendiri, jadi setiap masalah dengan tugas yang dijadualkan ditangani pada tahap mesin individu, bukan keseluruhan kluster.

Dask juga menawarkan ciri maju dan masih eksperimental yang disebut "pelakon." Pelakon adalah objek yang menunjukkan pekerjaan pada nod Dask yang lain. Dengan cara ini, pekerjaan yang memerlukan banyak negara lokal dapat dijalankan di tempat dan dipanggil dari jarak jauh oleh simpul lain, sehingga status pekerjaan tidak harus ditiru. Ray tidak mempunyai apa-apa seperti model pelakon Dask untuk menyokong pengagihan pekerjaan yang lebih canggih.

Dispy

Dispy membolehkan anda mengedarkan keseluruhan program Python atau hanya fungsi individu di sekumpulan mesin untuk pelaksanaan yang selari. Ia menggunakan mekanisme asli platform untuk komunikasi rangkaian untuk memastikan segala sesuatu tetap cepat dan efisien, sehingga mesin Linux, MacOS, dan Windows berfungsi dengan baik.

Sintaks diskpy agak menyerupai multiprocessing kerana anda secara eksplisit membuat kluster (di mana anda multiprocessingmahu membuat kumpulan proses), menyerahkan karya ke kluster, kemudian mengambil hasilnya. Sedikit lebih banyak kerja mungkin diperlukan untuk mengubah tugas agar dapat bekerja dengan Dispy, tetapi anda juga mendapat kawalan yang tepat mengenai bagaimana pekerjaan tersebut dikirim dan dikembalikan. Sebagai contoh, anda dapat mengembalikan hasil sementara atau sebagian selesai, memindahkan fail sebagai bagian dari proses pengagihan pekerjaan, dan menggunakan enkripsi SSL ketika memindahkan data.

Pandaral·lel

Pandaral·lel, seperti namanya, adalah cara untuk menyelaraskan pekerjaan Pandas di beberapa nod. Kelemahannya ialah Pandaral·lel hanya berfungsi  dengan Pandas. Tetapi jika Pandas adalah yang anda gunakan, dan semua yang anda perlukan adalah cara untuk mempercepat pekerjaan Pandas di beberapa teras pada satu komputer, Pandaral·lel berfokus pada tugas.

Perhatikan bahawa sementara Pandaral·lel berjalan di Windows, ia akan berjalan hanya dari sesi Python yang dilancarkan di Windows Subsistem untuk Linux. Pengguna MacOS dan Linux boleh menjalankan Pandaral·lel apa adanya. 

Ipyparallel

Ipyparallel adalah sistem multiprosesan dan pembahagian tugas yang difokuskan dengan ketat, khusus untuk menyelaraskan pelaksanaan kod notebook Jupyter di sekumpulan. Projek dan pasukan yang sudah bekerja di Jupyter dapat mula menggunakan Ipyparallel dengan segera.

Ipyparallel menyokong banyak pendekatan untuk memaralelasikan kod. Di hujung yang sederhana, ada map, yang menerapkan fungsi apa pun pada urutan dan membagi kerja secara merata di nod yang tersedia. Untuk kerja yang lebih kompleks, anda boleh menghiasi fungsi tertentu agar sentiasa berjalan dari jauh atau selari.

Notebook Jupyter menyokong "perintah ajaib" untuk tindakan yang hanya mungkin dilakukan di persekitaran notebook. Ipyparallel menambah beberapa perintah ajaibnya sendiri. Contohnya, anda boleh membuat awalan penyataan Python dengan %pxsecara automatik menyelaraskannya.

Joblib

Joblib mempunyai dua tujuan utama: menjalankan pekerjaan secara selari dan tidak mengira hasil jika tidak ada yang berubah. Kecekapan ini menjadikan Joblib sangat sesuai untuk pengkomputeran saintifik, di mana hasil yang boleh dihasilkan semula adalah suci. Dokumentasi Joblib memberikan banyak contoh bagaimana menggunakan semua ciri-cirinya.

Sintaks Joblib untuk menyelaraskan kerja cukup mudah - ia sama dengan penghias yang dapat digunakan untuk membagi pekerjaan di seluruh prosesor, atau untuk menyimpan hasil. Pekerjaan selari boleh menggunakan utas atau proses.

Joblib menyertakan cache cakera lutsinar untuk objek Python yang dibuat oleh pekerjaan komputasi. Cache ini tidak hanya membantu Joblib menghindari pekerjaan yang berulang, seperti yang disebutkan di atas, tetapi juga dapat digunakan untuk menangguhkan dan melanjutkan pekerjaan yang sudah lama berjalan, atau mengambil tempat dari pekerjaan yang ditinggalkan setelah kemalangan. Cache juga dioptimumkan secara bijak untuk objek besar seperti tatasusunan NumPy. Kawasan data dapat dibagi dalam memori antara proses pada sistem yang sama dengan menggunakan numpy.memmap.

Satu perkara yang tidak ditawarkan Joblib adalah cara untuk menyebarkan pekerjaan di pelbagai komputer yang berasingan. Secara teori mungkin menggunakan saluran paip Joblib untuk melakukan ini, tetapi mungkin lebih mudah menggunakan kerangka lain yang menyokongnya secara semula jadi. 

Baca lebih lanjut mengenai Python

  • Apa itu Python? Pengaturcaraan yang hebat dan intuitif
  • Apa itu PyPy? Python lebih cepat tanpa rasa sakit
  • Apa itu Cython? Python pada kelajuan C
  • Tutorial Cython: Cara mempercepat Python
  • Cara memasang Python dengan cara yang bijak
  • Ciri baru terbaik di Python 3.8
  • Pengurusan projek Python yang lebih baik dengan Puisi
  • Virtualenv dan venv: Persekitaran maya Python dijelaskan
  • Python virtualenv dan venv lakukan dan tidak boleh dilakukan
  • Penjelasan dan proses subtitle Python dijelaskan
  • Cara menggunakan debugger Python
  • Cara menggunakan timeit untuk profil kod Python
  • Cara menggunakan cProfile untuk profil kod Python
  • Mulakan dengan async di Python
  • Cara menggunakan asyncio di Python
  • Cara menukar Python ke JavaScript (dan kembali lagi)
  • Python 2 EOL: Cara bertahan pada akhir Python 2
  • 12 Pythons untuk setiap keperluan pengaturcaraan
  • 24 perpustakaan Python untuk setiap pembangun Python
  • 7 IDE Python manis yang mungkin anda terlepas
  • 3 kekurangan utama Python - dan penyelesaiannya
  • 13 Kerangka web Python dibandingkan
  • 4 Kerangka ujian Python untuk menghancurkan pepijat anda
  • 6 ciri Python baru yang hebat yang anda tidak mahu ketinggalan
  • 5 Pembahagian Python untuk menguasai pembelajaran mesin
  • 8 perpustakaan Python yang hebat untuk pemprosesan bahasa semula jadi