Προγραμματισμός

6 βιβλιοθήκες Python για παράλληλη επεξεργασία

Η Python έχει μεγάλη άνεση και φιλικότητα στον προγραμματιστή, αλλά δεν είναι η πιο γρήγορη γλώσσα προγραμματισμού. Ορισμένοι από τους περιορισμούς ταχύτητας οφείλονται στην προεπιλεγμένη εφαρμογή του, το cPython, ως μονόστροφο. Δηλαδή, το cPython δεν χρησιμοποιεί περισσότερα από ένα νήματα υλικού κάθε φορά.

Και ενώ μπορείτε να χρησιμοποιήσετε το σπείρωμα ενότητα ενσωματωμένη στην Python για να επιταχύνει τα πράγματα, σπείρωμα σας δίνει μόνο συγχρονισμός, δεν παραλληλισμός. Είναι καλό για την εκτέλεση πολλαπλών εργασιών που δεν εξαρτώνται από την CPU, αλλά δεν κάνει τίποτα για να επιταχύνει πολλές εργασίες που η καθεμία απαιτεί πλήρη CPU.

Το Python περιλαμβάνει έναν εγγενή τρόπο εκτέλεσης φόρτου εργασίας Python σε πολλές CPU. ο πολυεπεξεργασία Η ενότητα περιστρέφει πολλαπλά αντίγραφα του διερμηνέα Python, το καθένα σε ξεχωριστό πυρήνα και παρέχει πρωταρχικά στοιχεία για τη διάσπαση εργασιών σε πυρήνες. Αλλά μερικές φορές ακόμηπολυεπεξεργασία δεν είναι αρκετό.

Μερικές φορές η εργασία απαιτεί τη διανομή εργασίας όχι μόνο σε όλη πολλαπλοί πυρήνες, αλλά και απέναντι πολλαπλές μηχανές. Εκεί έρχονται αυτές οι έξι βιβλιοθήκες και πλαίσια Python. Και οι έξι από τις παρακάτω εργαλειοθήκες Python σάς επιτρέπουν να πάρετε μια υπάρχουσα εφαρμογή Python και να διαδώσετε το έργο σε πολλούς πυρήνες, πολλά μηχανήματα ή και τα δύο.

ακτίνα

Αναπτύχθηκε από μια ομάδα ερευνητών στο Πανεπιστήμιο της Καλιφόρνια στο Μπέρκλεϋ, ο Ray υποστηρίζει μια σειρά από κατανεμημένες βιβλιοθήκες μηχανικής μάθησης. Όμως ο Ray δεν περιορίζεται μόνο σε εργασίες μηχανικής εκμάθησης, ακόμα κι αν αυτό ήταν η αρχική του περίπτωση χρήσης. Οποιαδήποτε εργασία Python μπορεί να χωριστεί και να διανεμηθεί σε συστήματα με το Ray.

Η σύνταξη του Ray είναι ελάχιστη, επομένως δεν χρειάζεται να επεξεργαστείτε εκ νέου τις υπάρχουσες εφαρμογές για να τις παραλληλίσετε. ο @ ray.remote Το decorator διανέμει αυτή τη λειτουργία σε όλους τους διαθέσιμους κόμβους σε ένα σύμπλεγμα Ray, με προαιρετικά καθορισμένες παραμέτρους για πόσους CPU ή GPU να χρησιμοποιήσουν. Τα αποτελέσματα κάθε κατανεμημένης λειτουργίας επιστρέφονται ως αντικείμενα Python, οπότε είναι εύκολο να διαχειριστούν και να αποθηκεύσουν και η ποσότητα της αντιγραφής σε κόμβους ή εντός των κόμβων περιορίζεται στο ελάχιστο. Αυτό το τελευταίο χαρακτηριστικό είναι χρήσιμο όταν ασχολείστε με συστοιχίες NumPy, για παράδειγμα.

Η Ray περιλαμβάνει ακόμη και τον δικό της ενσωματωμένο διαχειριστή συμπλέγματος, ο οποίος μπορεί αυτόματα να περιστρέφει κόμβους, όπως απαιτείται σε τοπικό υλικό ή δημοφιλείς πλατφόρμες υπολογιστικού νέφους.

Σχετικό βίντεο: Χρήση πολυεπεξεργασία για να επιταχύνει την Python

Ντάσκ

Από έξω, ο Ντάσκ μοιάζει πολύ με τον Ρέι. Είναι επίσης μια βιβλιοθήκη για κατανεμημένους παράλληλους υπολογιστές στην Python, με το δικό του σύστημα προγραμματισμού εργασιών, την επίγνωση των πλαισίων δεδομένων της Python όπως το NumPy και τη δυνατότητα κλιμάκωσης από ένα μηχάνημα σε πολλά.

Το Dask λειτουργεί με δύο βασικούς τρόπους. Το πρώτο είναι μέσω παραλληλισμένων δομών δεδομένων - ουσιαστικά, των εκδόσεων του Dask των συστοιχιών NumPy, των λιστών ή των Pandas DataFrames. Ανταλλάξτε τις εκδόσεις Dask αυτών των κατασκευών για τις προεπιλογές τους και το Dask θα διαδώσει αυτόματα την εκτέλεση σε όλο το σύμπλεγμα. Αυτό συνήθως περιλαμβάνει κάτι περισσότερο από το να αλλάξετε το όνομα μιας εισαγωγής, αλλά μπορεί μερικές φορές να απαιτείται επανεγγραφή για να λειτουργήσει πλήρως.

Ο δεύτερος τρόπος είναι μέσω των μηχανισμών παραλληλισμού χαμηλού επιπέδου του Dask, συμπεριλαμβανομένων των διακοσμητικών λειτουργιών, που χωρίζουν τις εργασίες σε κόμβους και επιστρέφουν αποτελέσματα συγχρονισμένα ("άμεση" λειτουργία) ή ασύγχρονα ("τεμπέλης"). Και οι δύο λειτουργίες μπορούν να αναμειχθούν όπως απαιτείται.

Μία βασική διαφορά μεταξύ Dask και Ray είναι ο μηχανισμός προγραμματισμού. Το Dask χρησιμοποιεί έναν κεντρικό προγραμματιστή που χειρίζεται όλες τις εργασίες για ένα σύμπλεγμα. Ο Ray είναι αποκεντρωμένος, που σημαίνει ότι κάθε μηχάνημα εκτελεί το δικό του χρονοπρογραμματιστή, οπότε τυχόν προβλήματα με μια προγραμματισμένη εργασία αντιμετωπίζονται στο επίπεδο του κάθε μηχανήματος και όχι σε ολόκληρο το σύμπλεγμα.

Το Dask προσφέρει επίσης ένα προηγμένο και ακόμα πειραματικό χαρακτηριστικό που ονομάζεται «ηθοποιοί». Ένας ηθοποιός είναι ένα αντικείμενο που δείχνει μια εργασία σε έναν άλλο κόμβο Dask. Με αυτόν τον τρόπο, μια εργασία που απαιτεί πολλή τοπική πολιτεία μπορεί να εκτελεστεί στη θέση της και να κληθεί απομακρυσμένα από άλλους κόμβους, οπότε η κατάσταση για την εργασία δεν χρειάζεται να αναπαραχθεί. Ο Ray δεν έχει τίποτα σαν το μοντέλο ηθοποιού του Dask για να υποστηρίξει πιο εξελιγμένη κατανομή εργασίας.

Δίσκος

Το Dispy σάς επιτρέπει να διανέμετε ολόκληρα προγράμματα Python ή μόνο μεμονωμένες λειτουργίες σε ένα σύμπλεγμα μηχανών για παράλληλη εκτέλεση. Χρησιμοποιεί μηχανισμούς τοπικής πλατφόρμας για επικοινωνία δικτύου για να διατηρεί τα πράγματα γρήγορα και αποτελεσματικά, έτσι ώστε οι μηχανές Linux, MacOS και Windows να λειτουργούν εξίσου καλά.

Η σύνταξη Dispy μοιάζει κάπως πολυεπεξεργασία στο ότι δημιουργείτε ρητά ένα σύμπλεγμα (όπου πολυεπεξεργασία θα θέλατε να δημιουργήσετε μια ομάδα επεξεργασίας), να υποβάλετε εργασία στο σύμπλεγμα και, στη συνέχεια, να ανακτήσετε τα αποτελέσματα. Ίσως χρειαστεί λίγο περισσότερη δουλειά για την τροποποίηση των εργασιών ώστε να λειτουργεί με το Dispy, αλλά αποκτάτε επίσης ακριβή έλεγχο του τρόπου αποστολής και επιστροφής αυτών των εργασιών. Για παράδειγμα, μπορείτε να επιστρέψετε προσωρινά ή μερικώς ολοκληρωμένα αποτελέσματα, να μεταφέρετε αρχεία ως μέρος της διαδικασίας διανομής εργασίας και να χρησιμοποιήσετε κρυπτογράφηση SSL κατά τη μεταφορά δεδομένων.

Πανταράλ

Το Pandaral·lel, όπως υποδηλώνει το όνομα, είναι ένας τρόπος παράλληλης εργασίας των Pandas σε πολλούς κόμβους. Το μειονέκτημα είναι ότι λειτουργεί το Pandaral·lel μόνο με τον Πάντα. Αλλά αν το Pandas είναι αυτό που χρησιμοποιείτε και το μόνο που χρειάζεστε είναι ένας τρόπος να επιταχύνετε τις εργασίες Pandas σε πολλούς πυρήνες σε έναν μόνο υπολογιστή, το Pandaral·lel επικεντρώνεται με λέιζερ στην εργασία.

Σημειώστε ότι ενώ το Pandaral·lel εκτελείται σε Windows, θα εκτελείται μόνο από συνεδρίες Python που ξεκίνησαν στο Υποσύστημα Windows για Linux. Οι χρήστες MacOS και Linux μπορούν να εκτελέσουν το Pandaral·lel ως έχει.

Ipyparallel

Το Ipyparallel είναι ένα άλλο σύστημα πολλαπλής επεξεργασίας και κατανομής εργασιών, ειδικά για την παράλληλη εκτέλεση του κώδικα φορητού υπολογιστή Jupyter σε ένα σύμπλεγμα. Έργα και ομάδες που εργάζονται ήδη στο Jupyter μπορούν να αρχίσουν να χρησιμοποιούν το Ipyparallel αμέσως.

Το Ipyparallel υποστηρίζει πολλές προσεγγίσεις στον παράλληλο κώδικα. Στο απλό τέλος, υπάρχει χάρτης, η οποία εφαρμόζει οποιαδήποτε λειτουργία σε μια ακολουθία και χωρίζει την εργασία ομοιόμορφα σε όλους τους διαθέσιμους κόμβους. Για πιο περίπλοκη εργασία, μπορείτε να διακοσμήσετε συγκεκριμένες λειτουργίες ώστε να εκτελούνται πάντα εξ αποστάσεως ή παράλληλα.

Τα σημειωματάρια Jupyter υποστηρίζουν «μαγικές εντολές» για ενέργειες που είναι δυνατές μόνο σε περιβάλλον φορητού υπολογιστή. Το Ipyparallel προσθέτει μερικές μαγικές εντολές. Για παράδειγμα, μπορείτε να προθέσετε οποιαδήποτε δήλωση Python με % px να το παραλληλίζει αυτόματα.

Joblib

Το Joblib έχει δύο βασικούς στόχους: εκτελεί παράλληλα θέσεις εργασίας και δεν υπολογίζει τα αποτελέσματα εάν δεν έχει αλλάξει τίποτα. Αυτές οι αποδόσεις καθιστούν το Joblib κατάλληλο για επιστημονικούς υπολογιστές, όπου τα αναπαραγώγιμα αποτελέσματα είναι ιερά. Η τεκμηρίωση του Joblib παρέχει πολλά παραδείγματα για τον τρόπο χρήσης όλων των χαρακτηριστικών της.

Η σύνταξη Joblib για παράλληλη εργασία είναι αρκετά απλή - ισοδυναμεί με διακοσμητή που μπορεί να χρησιμοποιηθεί για τη διάσπαση εργασιών σε επεξεργαστές ή για την προσωρινή αποθήκευση αποτελεσμάτων. Οι παράλληλες εργασίες μπορούν να χρησιμοποιούν νήματα ή διαδικασίες.

Το Joblib περιλαμβάνει μια διαφανή προσωρινή μνήμη δίσκου για αντικείμενα Python που δημιουργήθηκαν από εργασίες υπολογιστών. Αυτή η προσωρινή μνήμη όχι μόνο βοηθά το Joblib να αποφύγει την επανάληψη της εργασίας, όπως σημειώνεται παραπάνω, αλλά μπορεί επίσης να χρησιμοποιηθεί για την αναστολή και τη συνέχιση μακροχρόνιων εργασιών, ή για την παραλαβή από την εργασία που είχε σταματήσει μετά από ένα σφάλμα. Η κρυφή μνήμη βελτιστοποιείται επίσης έξυπνα για μεγάλα αντικείμενα όπως οι συστοιχίες NumPy. Περιοχές δεδομένων μπορούν να μοιραστούν στη μνήμη μεταξύ διεργασιών στο ίδιο σύστημα χρησιμοποιώντας numpy.memmap.

Ένα πράγμα που δεν προσφέρει η Joblib είναι ένας τρόπος διανομής εργασιών σε πολλούς ξεχωριστούς υπολογιστές. Θεωρητικά είναι δυνατό να χρησιμοποιήσετε τον αγωγό Joblib για να το κάνετε αυτό, αλλά είναι πιθανώς πιο εύκολο να χρησιμοποιήσετε ένα άλλο πλαίσιο που το υποστηρίζει εγγενώς.

Διαβάστε περισσότερα για Python

  • Τι είναι το Python; Ισχυρός, διαισθητικός προγραμματισμός
  • Τι είναι το PyPy; Γρηγορότερη Python χωρίς πόνο
  • Τι είναι το Cython; Python με ταχύτητα C
  • Εκμάθηση Cython: Πώς να επιταχύνετε το Python
  • Πώς να εγκαταστήσετε το Python με τον έξυπνο τρόπο
  • Οι καλύτερες νέες δυνατότητες στο Python 3.8
  • Καλύτερη διαχείριση έργου Python με την Ποίηση
  • Virtualenv και venv: Εξηγήθηκαν εικονικά περιβάλλοντα Python
  • Το Python virtualenv και το venv κάνουν και δεν πρέπει
  • Η εξήγηση και οι υποεπεξεργασίες Python εξηγούνται
  • Πώς να χρησιμοποιήσετε το πρόγραμμα εντοπισμού σφαλμάτων Python
  • Πώς να χρησιμοποιήσετε το χρονοδιάγραμμα για τον προφίλ κώδικα Python
  • Πώς να χρησιμοποιήσετε το cProfile για να προβάλετε τον κώδικα Python
  • Ξεκινήστε με το async στο Python
  • Πώς να χρησιμοποιήσετε το asyncio στο Python
  • Πώς να μετατρέψετε το Python σε JavaScript (και να επιστρέψετε ξανά)
  • Python 2 EOL: Πώς να επιβιώσετε στο τέλος του Python 2
  • 12 Pythons για κάθε ανάγκη προγραμματισμού
  • 24 βιβλιοθήκες Python για κάθε προγραμματιστή Python
  • 7 γλυκά IDE Python που ίσως έχετε χάσει
  • 3 μεγάλες αδυναμίες της Python - και οι λύσεις τους
  • Συγκρίθηκαν 13 πλαίσια Ιστού Python
  • 4 Πλαίσια δοκιμής Python για τη συντριβή των σφαλμάτων σας
  • 6 υπέροχες νέες δυνατότητες Python που δεν θέλετε να χάσετε
  • 5 Διανομές Python για την εξάσκηση της μηχανικής μάθησης
  • 8 υπέροχες βιβλιοθήκες Python για επεξεργασία φυσικής γλώσσας