DeepMind je objavio izvorni kod za S6, JIT kompajler za Python

s6-deepmind

S6, je samostalna biblioteka JIT kompajlera za CPython

dubok um, poznata po svojim razvojima u oblasti veštačke inteligencije, nedavno je to objavila je donio odluku da objavi izvorni kod projekta S6, koji je razvio iz JIT kompajlera za jezik Python.

Projekat je zanimljiv jer je dizajnirana kao proširena biblioteka koji se može integrirati sa standardnim CPythonom, koji pruža punu CPython kompatibilnost i ne zahtijeva modifikacije koda tumača. Projekat je u razvoju od 2019. godine, ali je, nažalost, smanjen i više nije u razvoju.

S6 je bio projekat koji je pokrenut u okviru DeepMind-a 2019. kako bi se ubrzao CPython kompilacijom upravo na vrijeme ("JIT"). Ove funkcije bi bile obezbeđene kao normalna Python biblioteka i ne bi bile potrebne nikakve promene u CPython interpreteru. S6 je nameravao da uradi za Python ono što je V8 uradio za Javascript (ime je omaž V8). Rad je baziran na CPython verziji 3.7. Ovisno o opterećenju, vidjeli smo ubrzanja do 9.5x u uobičajenim mjerilima.

Glavni razlog zašto je odlučeno da se objavi izvorni kod, jedan od njih i kao što je već spomenuto je taj što je projekat prestao da ima podršku, drugi od glavnih razloga je naveden to što na osnovu kreiranog razvoja, oni i dalje mogu biti korisni za poboljšanje Python-a .

Prestali smo interno raditi na S6. Kao takvo, ovo spremište je arhivirano i ne prihvatamo zahtjeve za povlačenje ili probleme. U nastavku smo otvorili izvorni kod i pružili pregled dizajna kako bismo podstakli razgovore unutar Python zajednice i inspirisali budući rad na poboljšanju Pythona.

Što se tiče rada S6, to treba napomenuti S6 za Python se upoređuje sa V8 motorom za JavaScript u smislu zadataka koje rješava. Biblioteka zamjenjuje postojeći drajver interpretera bajtkoda ceval.c svojom vlastitom implementacijom koja koristi JIT kompilaciju za ubrzanje izvršavanja.

S6 provjerava da li je trenutna funkcija već kompajlirana i, ako je tako, izvršava kompajlirani kod, a ako ne, izvršava funkciju u načinu interpretacije bajtkoda sličnom CPython interpreteru. Interpretacija broji broj izvršenih naredbi i poziva povezanih s funkcijom koja se obrađuje.

Nakon postizanja određene prekretnice, počinje proces izgradnje kako bi se kod ubrzao koji se često pokreće. Kompilacija se izvodi na jakom posrednom predstavljanju, koji se, nakon optimizacije, konvertuje u ciljne sistemske mašinske instrukcije koristeći asmjit biblioteku.

U zavisnosti od prirode opterećenja, pod optimalnim uslovima, S6 pokazuje povećanje brzine izvršavanja testa do 9,5 puta u odnosu na obični CPython.

Kada se izvrši 100 iteracija iz Richardsovog testnog paketa, postoji ubrzanje od 7 puta, a kada se izvodi Raytrace test, koji sadrži mnogo matematike, on je 3 do 4,5 puta brži.

Zadaci koje je teško optimizirati sa S6 su projekti koji koriste C API, kao što je NumPy, kao i operacije vezane za potrebu za provjerom tipova velikog broja vrijednosti.

Loše performanse su također vidljive za pozive jedne funkcije koji troše dosta resursa zbog upotrebe neoptimizirane implementacije S6 Python interpretera (razvoj nije dostigao fazu optimizacije načina interpretacije).

Na primjer, u testu Unpack Sequence, koji raspakuje velike skupove nizova/torki, jedan poziv pokazuje usporavanje do 5 puta, a ciklični poziv daje 0,97 od CPython-a.

Konačno za one koje zanima više o tome, trebali biste znati da je kod JIT kompajlera napisan u C++ i trenutno je baziran na CPython 3.7, pored činjenice da je izvorni kod već otvoren pod Apache 2.0 licencom i može se konsultovati sa linka ispod.


Budite prvi koji komentarišete

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.