DeepMind izlaida avota kodu S6, JIT kompilatoram Python

s6-deepmind

S6 ir atsevišķa JIT kompilatora bibliotēka CPython

dziļais prāts, pazīstams ar saviem sasniegumiem mākslīgā intelekta jomā, nesen paziņoja, ka ir pieņēmis lēmumu atbrīvot S6 projekta pirmkodu, ko viņš izstrādāja no JIT kompilatora Python valodai.

Projekts ir interesants jo ir veidota kā paplašinājuma bibliotēka ko var integrēt ar standarta CPython, kas nodrošina pilnīgu CPython saderību un neprasa izmaiņas no tulka koda. Projekts tiek izstrādāts kopš 2019. gada, taču diemžēl tas ir samazināts un vairs netiek izstrādāts.

S6 bija projekts, kas tika uzsākts DeepMind 2019. gadā, lai paātrinātu CPython, izmantojot tieši-in-time (JIT) kompilāciju. Šīs funkcijas tiktu nodrošinātas kā parasta Python bibliotēka, un CPython tulkā nebūtu jāveic nekādas izmaiņas. S6 bija paredzēts izmantot Python to pašu, ko V8 darīja Javascript (nosaukums ir cieņa pret V8). Darba pamatā bija CPython versija 3.7. Atkarībā no darba slodzes mēs novērojām līdz pat 9.5 reizēm paātrinājumus parastajos etalonos.

Galvenais iemesls, kāpēc tika nolemts izlaist pirmkodu, viens no tiem un, kā jau minēts, bija projekta atbalsta pārtraukšana, vēl viens no galvenajiem iemesliem tika minēts, ka, pamatojoties uz izveidotajām izstrādēm, tie joprojām var būt noderīgi python uzlabošanai .

Mēs esam pārtraukuši darbu pie S6 iekšēji. Tādējādi šī krātuve ir arhivēta, un mēs nepieņemam izvilkšanas pieprasījumus vai problēmas. Mēs piedāvājām atvērtā avota avotu un tālāk sniedzām dizaina pārskatu, lai stimulētu sarunas Python kopienā un iedvesmotu turpmāko darbu pie Python uzlabošanas.

Runājot par S6 darbību, tas jāpiemin S6 Python salīdzina ar V8 dzinēju JavaScript uzdevumu ziņā, ko tas risina. Bibliotēka aizstāj esošo ceval.c baitu koda tulka draiveri ar savu implementāciju, kas izmanto JIT kompilāciju, lai paātrinātu izpildi.

S6 pārbauda, ​​vai pašreizējā funkcija jau ir kompilēta un, ja tā, izpilda kompilēto kodu, un, ja nē, izpilda funkciju baitkoda interpretācijas režīmā, kas ir līdzīgs CPython tulkam. Interpretācija saskaita izpildīto paziņojumu un izsaukumu skaitu, kas saistīti ar apstrādājamo funkciju.

Pēc noteikta pavērsiena sasniegšanas tiek sākts veidošanas process, lai paātrinātu kodu kas darbojas bieži. Kompilācija tiek veikta strongjit starpposma attēlojumā, kas pēc optimizācijas tiek pārveidots par mērķa sistēmas mašīnas instrukcijām, izmantojot asmjit bibliotēku.

Atkarībā no slodzes rakstura optimālos apstākļos S6 demonstrē testa izpildes ātruma pieaugumu līdz pat 9,5 reizēm, salīdzinot ar parasto CPython.

Kad tiek izpildītas 100 iterācijas no Ričarda testu komplekta, ir paātrinājums 7 reizes, un, izpildot Raytrace testu, kurā ir daudz matemātikas, tas ir 3 līdz 4,5 reizes ātrāks.

Uzdevumi, kurus ir grūti optimizēt ar S6 ir projekti, kas izmanto C API, piemēram, NumPy, kā arī darbības, kas saistītas ar nepieciešamību pārbaudīt lielu skaitu vērtību veidus.

Slikta veiktspēja ir redzama arī vienas funkcijas zvaniem kas patērē daudz resursu, jo tiek izmantota neoptimizēta S6 Python tulka implementācija (izstrāde nav sasniegusi interpretācijas režīma optimizācijas stadiju).

Piemēram, izsaiņošanas secības testā, kas izpako lielas masīvu/korežu kopas, viens izsaukums parāda palēnināšanos līdz pat 5 reizēm, un ciklisks izsaukums nodrošina 0,97 no CPython.

Beidzot tiem, kurus interesē uzzināt vairāk par to, jums jāzina, ka JIT kompilatora kods ir rakstīts C++ valodā un pašlaik ir balstīts uz CPython 3.7, papildus tam, ka pirmkods jau ir atvērts saskaņā ar Apache 2.0 licenci un ar to var iepazīties no saites zemāk.


Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.