DeepMind ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΊΠΎΠ΄ S6, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ JIT-компилятора для CPython

Компания DeepMind, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ°Ρ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΠΎΡΡ‚ΡŒ своими Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ Π² области искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°, ΠΎΡ‚ΠΊΡ€Ρ‹Π»Π° исходныС тСксты ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° S6, Ρ€Π°Π·Π²ΠΈΠ²Π°Π²ΡˆΠ΅Π³ΠΎ JIT-компилятор для языка Python. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ интСрСсСн ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ с ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΌ CPython, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ»Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с CPython ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ развивался с 2019 Π³ΠΎΠ΄Π°, Π½ΠΎ ΠΊ соТалСнию Π±Ρ‹Π» свёрнут ΠΈ большС Π½Π΅ развиваСтся. Π’Π°ΠΊ ΠΊΠ°ΠΊ созданныС Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Python, Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ исходныС тСксты. Код JIT-компилятора написан Π½Π° языкС C++, основан Π½Π° CPython 3.7. ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0.

По Ρ€Π΅ΡˆΠ°Π΅ΠΌΡ‹ΠΌ Π·Π°Π΄Π°Ρ‡Π°ΠΌ S6 для Python сравниваСтся с Π΄Π²ΠΈΠΆΠΊΠΎΠΌ V8 для JavaScript. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° замСняСт ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° ceval.c собствСнной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ для ускорСния выполнСния. S6 провСряСт, скомпилирована Π»ΠΈ ΡƒΠΆΠ΅ тСкущая функция ΠΈ, Ссли Π΄Π° — исполняСт скомпилированный ΠΊΠΎΠ΄, Π° Ссли Π½Π΅Ρ‚ — запускаСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π°, ΠΏΠΎΡ…ΠΎΠΆΠ΅ΠΌ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ CPython. ΠŸΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ подсчитываСтся число Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… инструкций ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ, связанных с ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. ПослС достиТСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ€ΡƒΠ±Π΅ΠΆΠ° для ускорСния часто выполняСмого ΠΊΠΎΠ΄Π° инициируСтся процСсс компиляции. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ производится Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС strongjit, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ послС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ прСобразуСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ инструкции Ρ†Π΅Π»Π΅Π²ΠΎΠΉ систСмы ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ asmjit.

Π’ зависимости ΠΎΡ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ S6 ΠΏΡ€ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… условиях дСмонстрируСт ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ скорости выполнСния тСстов Π΄ΠΎ 9.5 Ρ€Π°Π· Π² сравнСнии с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ CPython. ΠŸΡ€ΠΈ запускС 100 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ тСстового Π½Π°Π±ΠΎΡ€Π° Richards Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ ускорСниС Π² 7 Ρ€Π°Π·, Π° ΠΏΡ€ΠΈ запускС тСста Raytrace, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ присутствуСт большой ΠΎΠ±ΡŠΡ‘ΠΌ матСматичСских вычислСний, — Π² 3-4.5 Ρ€Π°Π·Π°.

Из Π·Π°Π΄Π°Ρ‡ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ S6, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ C API, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ NumPy, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, связанныС с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² большого числа Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Низкая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ для Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² рСсурсоёмких Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ·-Π·Π° использования Π² S6 собствСнной Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Python-ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° (Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π΅ достигла стадии провСдСния ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ). НапримСр, Π² тСстС Unpack Sequence, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌ распаковку Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² массивов/ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, ΠΏΡ€ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒΡΡ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎ 5 Ρ€Π°Π·, Π° ΠΏΡ€ΠΈ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ — ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ составляСт 0.97 ΠΎΡ‚ CPython.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ