6 perpustakaan Python untuk pemrosesan paralel

Python lama dalam kenyamanan dan keramahan programmer, tetapi ini bukan bahasa pemrograman tercepat. Beberapa batasan kecepatannya disebabkan oleh implementasi defaultnya, cPython, menjadi single-threaded. Artinya, cPython tidak menggunakan lebih dari satu utas perangkat keras pada satu waktu.

Dan meskipun Anda dapat menggunakan threadingmodul yang dibangun ke dalam Python untuk mempercepat, threadinghanya memberi Anda konkurensi , bukan paralelisme . Ini bagus untuk menjalankan banyak tugas yang tidak bergantung pada CPU, tetapi tidak melakukan apa pun untuk mempercepat banyak tugas yang masing-masing memerlukan CPU penuh. 

Python memang menyertakan cara asli untuk menjalankan beban kerja Python di banyak CPU. The multiprocessingModul berputar sampai beberapa salinan dari interpreter Python, masing-masing pada inti yang terpisah, dan menyediakan primitif untuk tugas-tugas membelah di core. Tapi terkadang bahkan  multiprocessing tidak cukup.

Terkadang tugas tersebut memerlukan pendistribusian pekerjaan tidak hanya di beberapa inti , tetapi juga di beberapa mesin . Di situlah enam pustaka dan kerangka kerja Python ini masuk. Keenam toolkit Python di bawah ini memungkinkan Anda untuk menggunakan aplikasi Python yang ada dan menyebarkan pekerjaan ke banyak inti, banyak mesin, atau keduanya.

sinar

Dikembangkan oleh tim peneliti di University of California, Berkeley, Ray mendukung sejumlah perpustakaan pembelajaran mesin terdistribusi. Tetapi Ray tidak terbatas pada tugas pembelajaran mesin saja, bahkan jika itu adalah kasus penggunaan aslinya. Setiap tugas Python dapat dipecah dan didistribusikan ke seluruh sistem dengan Ray.

Sintaks Ray minimal, jadi Anda tidak perlu mengerjakan ulang aplikasi yang ada secara ekstensif untuk memparalelkannya. The @ray.remotedekorator mendistribusikan bahwa fungsi di setiap node yang tersedia di cluster Ray, dengan parameter opsional yang ditentukan untuk berapa banyak CPU atau GPU untuk digunakan. Hasil dari setiap fungsi terdistribusi dikembalikan sebagai objek Python, sehingga mudah dikelola dan disimpan, dan jumlah penyalinan di dalam atau di dalam node dijaga seminimal mungkin. Fitur terakhir ini berguna saat menangani array NumPy, misalnya.

Ray bahkan menyertakan manajer klaster bawaannya sendiri, yang dapat secara otomatis memutar node sesuai kebutuhan pada perangkat keras lokal atau platform komputasi awan populer.

Video terkait: Menggunakan multiprocessinguntuk mempercepat Python

Dask

Dari luar, Dask sangat mirip dengan Ray. Ini juga merupakan pustaka untuk komputasi paralel terdistribusi dengan Python, dengan sistem penjadwalan tugasnya sendiri, kesadaran kerangka data Python seperti NumPy, dan kemampuan untuk menskalakan dari satu mesin ke banyak mesin.

Dask bekerja dalam dua cara dasar. Yang pertama adalah melalui struktur data yang diparalelkan - pada dasarnya, versi array NumPy, daftar, atau Pandas DataFrames Dask sendiri. Tukar dalam versi Dask dari konstruksi tersebut untuk defaultnya, dan Dask akan secara otomatis menyebarkan eksekusinya ke seluruh cluster Anda. Ini biasanya melibatkan sedikit lebih dari sekadar mengubah nama impor, tetapi terkadang mungkin memerlukan penulisan ulang agar berfungsi sepenuhnya.

Cara kedua adalah melalui mekanisme paralelisasi tingkat rendah Dask, termasuk penghias fungsi, yang membagi tugas di seluruh node dan menampilkan hasil secara sinkron (mode "langsung") atau secara asinkron ("malas"). Kedua mode tersebut juga dapat digabungkan sesuai kebutuhan.

Salah satu perbedaan utama antara Dask dan Ray adalah mekanisme penjadwalan. Dask menggunakan penjadwal terpusat yang menangani semua tugas untuk sebuah cluster. Ray terdesentralisasi, artinya setiap mesin menjalankan penjadwal sendiri, sehingga masalah apa pun dengan tugas terjadwal ditangani pada tingkat mesin individu, bukan seluruh cluster.

Dask juga menawarkan fitur lanjutan dan masih eksperimental yang disebut "aktor". Aktor adalah objek yang menunjuk ke pekerjaan di node Dask lain. Dengan cara ini, pekerjaan yang membutuhkan banyak status lokal dapat berjalan di tempat dan dipanggil dari jarak jauh oleh node lain, sehingga status untuk pekerjaan tersebut tidak harus direplikasi. Ray tidak memiliki model aktor seperti Dask untuk mendukung distribusi pekerjaan yang lebih canggih.

Dispy

Dispy memungkinkan Anda mendistribusikan seluruh program Python atau hanya fungsi individu di sekumpulan mesin untuk eksekusi paralel. Ini menggunakan mekanisme asli platform untuk komunikasi jaringan untuk menjaga agar semuanya tetap cepat dan efisien, sehingga mesin Linux, MacOS, dan Windows bekerja sama dengan baik.

Sintaks Dispy agak mirip multiprocessing dengan Anda secara eksplisit membuat cluster (di mana Anda multiprocessingakan membuat pool proses), mengirimkan pekerjaan ke cluster, lalu mengambil hasilnya. Sedikit lebih banyak pekerjaan mungkin diperlukan untuk memodifikasi pekerjaan agar dapat digunakan dengan Dispy, tetapi Anda juga mendapatkan kontrol yang tepat atas bagaimana pekerjaan tersebut dikirim dan dikembalikan. Misalnya, Anda dapat mengembalikan hasil sementara atau sebagian selesai, mentransfer file sebagai bagian dari proses distribusi pekerjaan, dan menggunakan enkripsi SSL saat mentransfer data.

Pandaral incredlel

Pandaral incredlel, seperti namanya, adalah cara untuk memparalelkan pekerjaan Pandas di beberapa node. Kekurangannya adalah Pandaral incredlel hanya bekerja  dengan Panda. Tetapi jika Pandas adalah yang Anda gunakan, dan yang Anda butuhkan hanyalah cara untuk mempercepat pekerjaan Pandas di beberapa inti pada satu komputer, Pandaral.elel berfokus pada tugas laser.

Perhatikan bahwa meskipun Pandarali>lel berjalan di Windows, ia hanya akan berjalan dari sesi Python yang diluncurkan di Subsistem Windows untuk Linux. Pengguna MacOS dan Linux dapat menjalankan Pandaral incredlel apa adanya. 

Ipyparallel

Ipyparallel adalah sistem multiprosesing dan distribusi tugas yang sangat terfokus, khusus untuk memparalelkan eksekusi kode notebook Jupyter di seluruh cluster. Proyek dan tim yang sudah bekerja di Jupyter dapat segera mulai menggunakan Ipyparallel.

Ipyparallel mendukung banyak pendekatan untuk memparalelkan kode. Sederhananya, ada map, yang menerapkan fungsi apa pun ke urutan dan membagi pekerjaan secara merata di seluruh node yang tersedia. Untuk pekerjaan yang lebih kompleks, Anda dapat menghias fungsi tertentu agar selalu berjalan dari jarak jauh atau paralel.

Notebook Jupyter mendukung "perintah ajaib" untuk tindakan yang hanya dapat dilakukan di lingkungan notebook. Ipyparallel menambahkan beberapa perintah ajaibnya sendiri. Misalnya, Anda dapat memberi awalan pernyataan Python apa pun dengan %pxuntuk memparalelkannya secara otomatis.

Joblib

Joblib memiliki dua tujuan utama: menjalankan pekerjaan secara paralel dan tidak menghitung ulang hasil jika tidak ada yang berubah. Efisiensi ini membuat Joblib sangat cocok untuk komputasi ilmiah, di mana hasil yang dapat direproduksi itu suci. Dokumentasi Joblib memberikan banyak contoh tentang cara menggunakan semua fiturnya.

Sintaks Joblib untuk memparalelkan pekerjaan cukup sederhana — ini sama dengan dekorator yang dapat digunakan untuk membagi pekerjaan di seluruh prosesor, atau untuk menyimpan hasil. Pekerjaan paralel dapat menggunakan utas atau proses.

Joblib menyertakan cache disk transparan untuk objek Python yang dibuat oleh pekerjaan komputasi. Cache ini tidak hanya membantu Joblib menghindari pengulangan pekerjaan, seperti disebutkan di atas, tetapi juga dapat digunakan untuk menangguhkan dan melanjutkan pekerjaan yang sudah berjalan lama, atau melanjutkan pekerjaan yang ditinggalkan setelah terjadi crash. Cache juga dioptimalkan dengan cerdas untuk objek besar seperti array NumPy. Region data dapat dibagi dalam memori antara proses pada sistem yang sama dengan menggunakan numpy.memmap.

Satu hal yang tidak ditawarkan Joblib adalah cara untuk mendistribusikan pekerjaan ke beberapa komputer terpisah. Secara teori, mungkin saja menggunakan pipeline Joblib untuk melakukan ini, tetapi mungkin lebih mudah menggunakan framework lain yang mendukungnya secara native. 

Baca lebih lanjut tentang Python

  • Apa itu Python? Pemrograman yang kuat dan intuitif
  • Apa itu PyPy? Python lebih cepat tanpa rasa sakit
  • Apa itu Cython? Python dengan kecepatan C
  • Tutorial Cython: Cara mempercepat Python
  • Cara menginstal Python dengan cara cerdas
  • Fitur baru terbaik di Python 3.8
  • Manajemen proyek Python yang lebih baik dengan Poetry
  • Virtualenv dan venv: Penjelasan lingkungan virtual Python
  • Python virtualenv dan venv lakukan dan tidak boleh dilakukan
  • Penjelasan threading dan subproses Python
  • Cara menggunakan debugger Python
  • Cara menggunakan timeit untuk membuat profil kode Python
  • Cara menggunakan cProfile untuk membuat profil kode Python
  • Mulailah dengan async dengan Python
  • Cara menggunakan asyncio dengan Python
  • Cara mengonversi Python ke JavaScript (dan kembali lagi)
  • Python 2 EOL: Cara bertahan dari akhir Python 2
  • 12 Pythons untuk setiap kebutuhan pemrograman
  • 24 perpustakaan Python untuk setiap pengembang Python
  • 7 IDE Python manis yang mungkin Anda lewatkan
  • 3 kekurangan utama Python — dan solusinya
  • 13 kerangka web Python dibandingkan
  • 4 kerangka uji Python untuk menghancurkan bug Anda
  • 6 fitur Python baru yang hebat yang tidak ingin Anda lewatkan
  • 5 distribusi Python untuk menguasai pembelajaran mesin
  • 8 perpustakaan Python yang bagus untuk pemrosesan bahasa alami