Η DeepMind κυκλοφόρησε τον πηγαίο κώδικα για το S6, έναν μεταγλωττιστή JIT για την Python

s6-deepmind

Το S6, είναι μια αυτόνομη βιβλιοθήκη μεταγλωττιστή JIT για το CPython

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

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

Το S6 ήταν ένα έργο που ξεκίνησε στο DeepMind το 2019 για την επιτάχυνση του CPython με τη συλλογή just-in-time ("JIT"). Αυτές οι συναρτήσεις θα παρέχονται ως μια κανονική βιβλιοθήκη Python και δεν θα απαιτούνται αλλαγές στον διερμηνέα CPython. Το S6 σκόπευε να κάνει για την Python ό,τι έκανε το V8 για το Javascript (το όνομα είναι φόρος τιμής στο V8). Η εργασία βασίστηκε στην έκδοση 3.7 του CPython. Ανάλογα με τον φόρτο εργασίας, είδαμε επιταχύνσεις έως και 9.5 φορές σε κοινά σημεία αναφοράς.

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

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

Σχετικά με τη λειτουργία του S6 να αναφέρουμε ότι Το S6 για Python συγκρίνεται με τον κινητήρα V8 για JavaScript όσον αφορά τις εργασίες που επιλύει. Η βιβλιοθήκη αντικαθιστά το υπάρχον πρόγραμμα οδήγησης διερμηνέα bytecode ceval.c με τη δική της υλοποίηση που χρησιμοποιεί τη μεταγλώττιση JIT για να επιταχύνει την εκτέλεση.

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

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

Ανάλογα με τη φύση του φορτίου, υπό βέλτιστες συνθήκες, το S6 επιδεικνύει αύξηση στην ταχύτητα εκτέλεσης της δοκιμής έως και 9,5 φορές σε σύγκριση με το κανονικό CPython.

Όταν εκτελούνται 100 επαναλήψεις από τη δοκιμαστική σουίτα Richards, υπάρχει επιτάχυνση 7 φορές, και όταν εκτελείτε το τεστ Raytrace, το οποίο περιέχει πολλά μαθηματικά, είναι 3 έως 4,5 φορές πιο γρήγορο.

Εργασίες που είναι δύσκολο να βελτιστοποιηθούν με S6 είναι τα έργα που χρησιμοποιούν το C API, όπως το NumPy, καθώς και λειτουργίες που σχετίζονται με την ανάγκη ελέγχου των τύπων ενός μεγάλου αριθμού τιμών.

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

Για παράδειγμα, στη δοκιμή Unpack Sequence, η οποία αποσυσκευάζει μεγάλα σύνολα πινάκων/πλειάδων, μια μεμονωμένη κλήση δείχνει επιβράδυνση έως και 5 φορές και μια κυκλική κλήση αποδίδει 0,97 από το CPython.

Τελικά για όσους ενδιαφέρονται να μάθουν περισσότερα γι 'αυτό, θα πρέπει να γνωρίζετε ότι ο κώδικας μεταγλωττιστή JIT είναι γραμμένος σε C++ και βασίζεται επί του παρόντος στο CPython 3.7, επιπλέον του γεγονότος ότι ο πηγαίος κώδικας είναι ήδη ανοιχτός υπό την άδεια Apache 2.0 και μπορείτε να τον συμβουλευτείτε από τον παρακάτω σύνδεσμο.


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.