DeepMind wydał kod źródłowy dla S6, kompilatora JIT dla Pythona

S6-głęboki umysł

S6, to samodzielna biblioteka kompilatora JIT dla CPython

głęboki umysł, znany ze swoich osiągnięć w dziedzinie sztucznej inteligencji, niedawno ogłosił, że podjął decyzję o wydaniu kodu źródłowego projektu S6, który został opracowany z kompilatora JIT dla języka Python.

Projekt jest ciekawy ponieważ jest zaprojektowany jako biblioteka rozszerzeń który można zintegrować ze standardowym CPythonem, który zapewnia pełną kompatybilność z CPythonem i nie wymaga modyfikacji kodu tłumacza. Projekt jest rozwijany od 2019 roku, ale niestety został zmniejszony i nie jest już w fazie rozwoju.

S6 to projekt rozpoczęty w ramach DeepMind w 2019 roku, aby przyspieszyć CPython dzięki kompilacji just-in-time („JIT”). Te funkcje byłyby dostarczane jako normalna biblioteka Pythona i nie byłyby wymagane żadne zmiany w interpreterze CPython. S6 miał zrobić dla Pythona to, co V8 zrobił dla JavaScript (nazwa jest hołdem dla V8). Praca została oparta na CPythonie w wersji 3.7. W zależności od obciążenia, we wspólnych testach porównaliśmy przyspieszenie nawet do 9.5 raza.

Głównym powodem, dla którego zdecydowano się na wydanie kodu źródłowego, jednym z nich i jak już wspomniano, było to, że projekt przestał mieć wsparcie, innym głównym powodem było to, że na podstawie stworzonych zmian, mogą one nadal być przydatne do ulepszania Pythona .

Przestaliśmy pracować nad S6 wewnętrznie. W związku z tym to repozytorium zostało zarchiwizowane i nie akceptujemy żądań ani problemów. Otworzyliśmy źródła i przedstawiliśmy przegląd projektu poniżej, aby stymulować rozmowy w społeczności Pythona i zainspirować przyszłą pracę nad ulepszaniem Pythona.

Jeśli chodzi o działanie S6, powinniśmy wspomnieć, że S6 for Python porównuje do silnika V8 dla JavaScript pod względem zadań, które rozwiązuje. Biblioteka zastępuje istniejący sterownik interpretera kodu bajtowego ceval.c własną implementacją, która wykorzystuje kompilację JIT w celu przyspieszenia wykonania.

S6 sprawdza, czy aktualna funkcja została już skompilowana a jeśli tak, wykonuje skompilowany kod, a jeśli nie, wykonuje funkcję w trybie interpretacji kodu bajtowego podobnym do interpretera CPython. Interpretacja zlicza liczbę wykonanych instrukcji i wywołań związanych z przetwarzaną funkcją.

Po osiągnięciu pewnego kamienia milowego rozpoczyna się proces budowania w celu przyspieszenia kodu który działa często. Kompilacja jest wykonywana na reprezentacji pośredniej strongjit, która po optymalizacji jest konwertowana na instrukcje komputera systemu docelowego przy użyciu biblioteki asmjit.

W zależności od charakteru obciążenia, w optymalnych warunkach, S6 wykazuje wzrost szybkości wykonywania testów do 9,5x w porównaniu ze zwykłym CPythonem.

Po wykonaniu 100 iteracji z zestawu testowego Richardsa, jest przyspieszenie 7 razy, a po uruchomieniu testu Raytrace, który zawiera dużo matematyki, jest od 3 do 4,5 razy szybszy.

Zadania trudne do optymalizacji z S6 są projekty korzystające z C API, takich jak NumPy, a także operacje związane z koniecznością sprawdzania typów dużej liczby wartości.

Słaba wydajność jest również widoczna dla wywołań pojedynczych funkcji które pochłaniają dużo zasobów ze względu na zastosowanie niezoptymalizowanej implementacji interpretera S6 Python (opracowanie nie doszło do etapu optymalizacji trybu interpretacji).

Na przykład w teście Unpack Sequence, który rozpakowuje duże zestawy tablic/krotek, pojedyncze wywołanie wykazuje spowolnienie do 5x, a wywołanie cykliczne daje 0,97 z CPythona.

W końcu dla tych, którzy chcą dowiedzieć się więcej na ten temat, powinieneś wiedzieć, że kod kompilatora JIT jest napisany w C++ i jest obecnie oparty na CPythonie 3.7, oprócz tego, że kod źródłowy jest już otwarty na licencji Apache 2.0 i można się z nim zapoznać z linku poniżej.


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.