DeepMind atvērtais kods S6, bibliotēkas ar JIT kompilatora ieviešanu CPython

DeepMind, kas pazīstams ar savu attīstību mākslīgā intelekta jomā, ir ieguvis atvērtā koda projektu S6, kas izstrādāja JIT kompilatoru Python valodai. Projekts ir interesants, jo ir veidots kā paplašinājuma bibliotēka, ko var integrēt ar standarta CPython, kas nodrošina pilnīgu savietojamību ar CPython un neprasa pārveidot tulka kodu. Projekts tiek izstrādāts kopš 2019. gada, taču diemžēl tas tika ierobežots un vairs neattīstās. Tā kā izveidotās izstrādes var būt noderīgas Python uzlabošanai, tika nolemts atvērt avota tekstus. JIT kompilatora kods ir rakstīts C++ valodā, pamatojoties uz CPython 3.7. un ir atvērts saskaņā ar Apache 2.0 licenci.

S6 for Python ir salīdzināms ar JavaScript V8 dzinēju uzdevumu risināšanas ziņā. Bibliotēka aizstāj esošo ceval.c baitkoda tulka apstrādātāju 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ē, palaiž funkciju baitkoda interpretācijas režīmā, kas ir līdzīgs CPython tulkam. Interpretācija saskaita izpildīto instrukciju un izsaukumu skaitu, kas saistīti ar apstrādājamo funkciju. Pēc noteikta pavērsiena sasniegšanas tiek uzsākts kompilācijas process, lai paātrinātu bieži izpildīto kodu. Kompilācija tiek veikta strongjit starpposma reprezentācijā, kas pēc optimizācijas tiek pārveidota mērķa sistēmas mašīnas instrukcijās, 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. Palaižot 100 Ričardsa testu komplekta iterācijas, ir 7 reizes paātrinājums, un, izpildot Raytrace testu, kurā ir liels daudzums matemātisko aprēķinu, tas ir 3-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 tiek novērota arī atsevišķiem resursietilpīgu funkciju izsaukumiem, jo ​​tiek izmantota paša S6 neoptimizētā Python tulka implementācija (izstrāde nav sasniegusi interpretācijas režīma optimizācijas stadiju). Piemēram, izpakošanas secības testā, kas izpako lielus masīvu/korežu kopas, ar vienu izsaukumu tiek novērota palēninājums līdz pat 5 reizēm, un ar ciklisku izsaukumu veiktspēja ir 0.97 no CPython.

Avots: opennet.ru

Pievieno komentāru