DeepMind a publié le code source de S6, un compilateur JIT pour Python

S6-esprit profond

S6, est une bibliothèque de compilateur JIT autonome pour CPython

l'esprit profond, connu pour ses développements dans le domaine de l'intelligence artificielle, a récemment annoncé que a pris la décision de publier le code source du projet S6, qui est il développé à partir d'un compilateur JIT pour le langage Python.

Le projet est intéressant parce que est conçu comme une bibliothèque d'extension qui peut être intégré avec CPython standard, qui fournit une compatibilité CPython complète et ne nécessite aucune modification du code interprète. Le projet est en développement depuis 2019, mais a malheureusement été réduit et n'est plus en développement.

S6 était un projet lancé au sein de DeepMind en 2019 pour accélérer CPython avec une compilation juste-à-temps ("JIT"). Ces fonctions seraient fournies comme une bibliothèque Python normale et aucune modification de l'interpréteur CPython ne serait nécessaire. S6 avait l'intention de faire pour Python ce que V8 faisait pour Javascript (le nom est un hommage à V8). Le travail était basé sur CPython version 3.7. En fonction de la charge de travail, nous avons constaté des accélérations allant jusqu'à 9.5x dans les benchmarks courants.

La principale raison pour laquelle il a été décidé de publier le code source, l'une d'entre elles et comme déjà mentionné était que le projet n'avait plus de support, une autre des principales raisons a été donnée que sur la base des développements créés, ceux-ci peuvent encore être utiles pour améliorer python .

Nous avons arrêté de travailler sur S6 en interne. En tant que tel, ce référentiel a été archivé et nous n'acceptons pas les demandes d'extraction ou les problèmes. Nous avons ouvert la source et fourni un aperçu de la conception ci-dessous pour stimuler les conversations au sein de la communauté Python et inspirer les travaux futurs pour améliorer Python.

Concernant le fonctionnement de S6, il faut mentionner que S6 pour Python se compare au moteur V8 pour JavaScript en termes de tâches qu'il résout. La bibliothèque remplace le pilote d'interpréteur de bytecode ceval.c existant par sa propre implémentation qui utilise la compilation JIT pour accélérer l'exécution.

S6 vérifie si la fonction actuelle a déjà été compilée et, si c'est le cas, exécute le code compilé, et sinon, exécute la fonction dans un mode d'interprétation de bytecode similaire à l'interpréteur CPython. L'interprétation compte le nombre d'instructions exécutées et d'appels associés à la fonction en cours de traitement.

Après avoir atteint un certain jalon, le processus de construction est lancé pour accélérer le code qui tourne fréquemment. La compilation est effectuée sur la représentation intermédiaire strongjit, qui, après optimisation, est convertie en instructions machine du système cible à l'aide de la bibliothèque asmjit.

Selon la nature de la charge, dans des conditions optimales, S6 démontre une augmentation de la vitesse d'exécution des tests jusqu'à 9,5 fois par rapport à CPython classique.

Lorsque 100 itérations sont exécutées de la suite de tests de Richards, il y a une accélération de 7 fois, et lors de l'exécution du test Raytrace, qui contient beaucoup de mathématiques, il est 3 à 4,5 fois plus rapide.

Des tâches difficiles à optimiser avec S6 sont les projets qui utilisent l'API C, comme NumPy, ainsi que les opérations liées à la nécessité de vérifier les types d'un grand nombre de valeurs.

Des performances médiocres sont également observées pour les appels de fonction uniques qui consomment beaucoup de ressources en raison de l'utilisation de l'implémentation non optimisée de l'interpréteur Python S6 (le développement n'a pas atteint le stade de l'optimisation du mode interprétation).

Par exemple, dans le test Unpack Sequence, qui décompresse de grands ensembles de tableaux/tuples, un seul appel montre un ralentissement jusqu'à 5 fois, et un appel cyclique donne 0,97 à partir de CPython.

Enfin pour ceux qui souhaitent en savoir plus, il faut savoir que le code du compilateur JIT est écrit en C++ et est actuellement basé sur CPython 3.7, en plus du fait que le code source est déjà ouvert sous la licence Apache 2.0 et peut être consulté à partir du lien ci-dessous.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.