DeepMind heeft de broncode vrijgegeven voor S6, een JIT-compiler voor Python

s6-deepmind

S6, is een zelfstandige JIT-compilerbibliotheek voor CPython

diepzinnig, bekend om zijn ontwikkelingen op het gebied van kunstmatige intelligentie, kondigde onlangs aan dat: heeft de beslissing genomen om de broncode van het S6-project vrij te geven, die hij heeft ontwikkeld op basis van een JIT-compiler voor de Python-taal.

Het project is interessant omdat is ontworpen als een extensiebibliotheek die kan worden geïntegreerd met standaard CPython, die: biedt volledige CPython-compatibiliteit en hoeft niet te worden gewijzigd van de tolkcode. Het project is sinds 2019 in ontwikkeling, maar is helaas teruggeschroefd en niet meer in ontwikkeling.

S6 was een project dat in 2019 binnen DeepMind is gestart om CPython te versnellen met just-in-time ("JIT") compilatie. Deze functies worden geleverd als een normale Python-bibliotheek en er zijn geen wijzigingen in de CPython-interpreter vereist. S6 was bedoeld om voor Python te doen wat V8 deed voor Javascript (de naam is een eerbetoon aan V8). Het werk was gebaseerd op CPython versie 3.7. Afhankelijk van de workload zagen we versnellingen tot 9.5x in veelgebruikte benchmarks.

De belangrijkste reden waarom werd besloten om de broncode vrij te geven, een daarvan en zoals al vermeld was dat het project geen ondersteuning meer had, een andere van de belangrijkste redenen werd gegeven dat deze op basis van de gecreëerde ontwikkelingen nog steeds nuttig kunnen zijn voor het verbeteren van python .

We zijn intern gestopt met werken aan S6. Als zodanig is deze repository gearchiveerd en accepteren we geen pull-verzoeken of problemen. We hebben open source en hebben hieronder een ontwerpoverzicht gegeven om gesprekken binnen de Python-gemeenschap te stimuleren en toekomstig werk te inspireren om Python te verbeteren.

Wat betreft de werking van S6, moeten we vermelden dat: S6 voor Python is te vergelijken met V8-engine voor JavaScript in termen van taken die het oplost. De bibliotheek vervangt het bestaande ceval.c bytecode-interpreterstuurprogramma door zijn eigen implementatie die JIT-compilatie gebruikt om de uitvoering te versnellen.

S6 controleert of de huidige functie al is gecompileerd en, als dat zo is, voert het de gecompileerde code uit, en zo niet, voert het de functie uit in een bytecode-interpretatiemodus vergelijkbaar met de CPython-interpreter. De interpretatie telt het aantal uitgevoerde instructies en oproepen dat is gekoppeld aan de functie die wordt verwerkt.

Na het bereiken van een bepaalde mijlpaal wordt het bouwproces gestart om de code te versnellen die vaak rijdt. Compilatie wordt uitgevoerd op de strongjit intermediaire representatie, die, na optimalisatie, wordt geconverteerd naar machine-instructies van het doelsysteem met behulp van de asmjit-bibliotheek.

Afhankelijk van de aard van de belasting, vertoont S6 onder optimale omstandigheden een toename van de testuitvoeringssnelheid tot 9,5 keer in vergelijking met reguliere CPython.

Wanneer 100 iteraties worden uitgevoerd van de Richards-testsuite, er is een versnelling van 7 keer, en bij het uitvoeren van de Raytrace-test, die veel wiskunde bevat, is het 3 tot 4,5 keer sneller.

Taken die moeilijk te optimaliseren zijn met S6 zijn de projecten die de C API gebruiken, zoals NumPy, evenals bewerkingen die verband houden met de noodzaak om de typen van een groot aantal waarden te controleren.

Slechte prestaties worden ook gezien voor enkelvoudige functieaanroepen die veel bronnen verbruiken vanwege het gebruik van de niet-geoptimaliseerde implementatie van de S6 Python-interpreter (ontwikkeling heeft het stadium van optimalisatie van de interpretatiemodus niet bereikt).

In de Unpack Sequence-test, die grote sets arrays/tupels uitpakt, laat een enkele aanroep bijvoorbeeld een vertraging van maximaal 5 keer zien, en een cyclische aanroep levert 0,97 op van CPython.

Eindelijk voor diegenen die er meer over willen weten, moet je weten dat de JIT-compilercode is geschreven in C++ en momenteel gebaseerd is op CPython 3.7, naast het feit dat de broncode al open is onder de Apache 2.0-licentie en kan worden geraadpleegd via de onderstaande link.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.