Inilabas ng DeepMind ang source code para sa S6, isang JIT compiler para sa Python

s6-deepmind

S6, ay isang standalone JIT compiler library para sa CPython

malalim na isipan, kilala sa mga pag-unlad nito sa larangan ng artificial intelligence, kamakailan ay inihayag iyon ay nagpasya na ilabas ang source code ng proyektong S6, na binuo niya mula sa isang JIT compiler para sa wikang Python.

Ang proyekto ay kawili-wili dahil sa ay dinisenyo bilang isang extension library na maaaring isama sa karaniwang CPython, na nagbibigay ng buong CPython compatibility at hindi nangangailangan ng pagbabago ng interpreter code. Ang proyekto ay nasa pagbuo mula noong 2019, ngunit sa kasamaang-palad ay na-scale pabalik at wala na sa pag-unlad.

Ang S6 ay isang proyekto na sinimulan sa loob ng DeepMind noong 2019 upang pabilisin ang CPython gamit ang just-in-time ("JIT") compilation. Ang mga function na ito ay ibibigay bilang isang normal na Python library at walang mga pagbabago sa CPython interpreter ang kakailanganin. Inilaan ng S6 na gawin para sa Python kung ano ang ginawa ng V8 para sa Javascript (ang pangalan ay isang parangal sa V8). Ang gawain ay batay sa bersyon 3.7 ng CPython. Depende sa workload, nakakita kami ng mga speedup na hanggang 9.5x sa mga karaniwang benchmark.

Ang pangunahing dahilan kung bakit napagpasyahan na ilabas ang source code, isa sa mga ito at tulad ng nabanggit na ay ang proyekto ay tumigil sa pagkakaroon ng suporta, isa pa sa mga pangunahing dahilan ay ibinigay na batay sa mga pag-unlad na nilikha, ang mga ito ay maaari pa ring maging kapaki-pakinabang para sa pagpapabuti ng python .

Huminto kami sa paggawa sa S6 sa loob. Dahil dito, na-archive ang repository na ito at hindi kami tumatanggap ng mga pull request o isyu. Nag-open source kami at nagbigay ng pangkalahatang-ideya ng disenyo sa ibaba upang pasiglahin ang mga pag-uusap sa loob ng komunidad ng Python at magbigay ng inspirasyon sa hinaharap na gawain upang mapabuti ang Python.

Tungkol sa pagpapatakbo ng S6, dapat nating banggitin iyon Ang S6 para sa Python ay inihambing sa V8 engine para sa JavaScript sa mga tuntunin ng mga gawain na nilulutas nito. Pinapalitan ng library ang kasalukuyang ceval.c bytecode interpreter driver ng sarili nitong pagpapatupad na gumagamit ng JIT compilation para mapabilis ang pagpapatupad.

Sinusuri ng S6 kung ang kasalukuyang function ay naipon na at, kung gayon, ipapatupad ang pinagsama-samang code, at kung hindi, ipapatupad ang function sa isang bytecode interpretation mode na katulad ng CPython interpreter. Binibilang ng interpretasyon ang bilang ng mga naisagawang pahayag at tawag na nauugnay sa pinoprosesong function.

Matapos maabot ang isang tiyak na milestone, sinisimulan ang proseso ng pagbuo upang pabilisin ang code na madalas na tumatakbo. Ginagawa ang compilation sa strongjit intermediate na representasyon, na, pagkatapos ng pag-optimize, ay na-convert sa target na mga tagubilin sa machine ng system gamit ang asmjit library.

Depende sa likas na katangian ng pagkarga, sa ilalim ng pinakamainam na mga kondisyon, ang S6 ay nagpapakita ng pagtaas sa bilis ng pagpapatupad ng pagsubok na hanggang 9,5 beses kumpara sa regular na CPython.

Kapag ang 100 pag-ulit ay naisakatuparan mula sa Richards test suite, mayroong isang acceleration ng 7 beses, at kapag nagpapatakbo ng Raytrace test, na naglalaman ng maraming matematika, ito ay 3 hanggang 4,5 beses na mas mabilis.

Mga gawain na mahirap i-optimize may S6 ay ang mga proyektong gumagamit ng C API, gaya ng NumPy, pati na rin ang mga operasyong nauugnay sa pangangailangang suriin ang mga uri ng malaking bilang ng mga halaga.

Nakikita rin ang mahinang performance para sa mga single function na tawag na kumonsumo ng maraming mapagkukunan dahil sa paggamit ng hindi na-optimize na pagpapatupad ng interpreter ng S6 Python (hindi pa umabot sa yugto ng optimization mode ng interpretasyon ang pag-unlad).

Halimbawa, sa pagsubok sa Unpack Sequence, na nag-unpack ng malalaking hanay ng mga array/tuple, ang isang tawag ay nagpapakita ng paghina ng hanggang 5 beses, at ang isang cyclic na tawag ay nagbubunga ng 0,97 mula sa CPython.

Sa wakas para sa mga interesadong malaman ang tungkol dito, dapat mong malaman na ang JIT compiler code ay nakasulat sa C++ at kasalukuyang nakabatay sa CPython 3.7, bilang karagdagan sa katotohanan na ang source code ay bukas na sa ilalim ng Apache 2.0 na lisensya at maaaring konsultahin mula sa link sa ibaba.


Maging una sa komento

Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.