W dynamicznym świecie technologii pojawia się nowy gracz – język programowania o nazwie Mojo. Jego głównym celem jest zwiększenie szybkości działania projektów opartych na Pythonie, umożliwiając programistom osiągnięcie wydajności porównywalnej z językiem C.
Python, będąc jednym z najpopularniejszych języków programowania, jest ceniony za swoją wszechstronność i prostotę nauki. Stanowi doskonały punkt wyjścia dla początkujących programistów, jak również narzędzie do tworzenia zaawansowanych aplikacji dla doświadczonych. Niemniej jednak, jednym z głównych ograniczeń Pythona jest jego szybkość wykonywania. W tym miejscu do akcji wkracza Mojo.
Ten artykuł zagłębi się w świat Mojo, analizując jego związek z ekosystemem Pythona. Zapraszam do lektury!
Czym jest Mojo?
Mojo to nowoczesny język programowania wysokiego poziomu, charakteryzujący się intuicyjną konstrukcją, która przyspiesza proces tworzenia aplikacji. Jego celem jest połączenie obszaru produkcji z badaniami, umożliwiając programistom korzystanie z zaawansowanych funkcji metaprogramowania i programowania systemowego, przy zachowaniu składni i ekosystemu Pythona.
Mojo czerpie inspirację z języka Rust, dążąc do zapewnienia wysokiej wydajności w środowisku Pythona. Technicznie rzecz ujmując, Mojo jest rozszerzeniem Pythona, zapewniającym dodatkowe możliwości.
Za Mojo stoi zespół z Modular, firmy specjalizującej się w infrastrukturze sztucznej inteligencji. To oznacza, że Mojo jest językiem stworzonym z myślą o programistach AI. Oprócz języka, Modular wprowadził również silnik wnioskowania, który ma na celu optymalizację procesów pracy, skalowanie rozwiązań AI oraz redukcję opóźnień (więcej na ten temat poniżej).
Według CEO Modular, Chrisa Lattnera, Mojo jest do 35 000 razy szybszy niż Python. Lattner jest także odpowiedzialny za dynamiczny rozwój tego języka. Tę znaczną poprawę szybkości osiąga się dzięki wykorzystaniu łańcucha narzędzi kompilatora LLVM oraz infrastruktury kompilatora MILR (Multi-level Intermediate Representation Overview).
Główne założenia języka programowania Mojo to:
- Pełna kompatybilność z ekosystemem Pythona.
- Umożliwienie programistom wdrażania fragmentów kodu na akceleratorach.
- Zapewnienie kontroli niskiego poziomu dla przewidywalnej wydajności.
- Eliminacja fragmentacji ekosystemu.
Aby przetestować Mojo, należy skorzystać z hostowanego środowiska chmurowego Mojo Playground. Wymaga ono zalogowania, po którym użytkownik otrzymuje dostęp do środowiska pracy.
Dlaczego potrzebujemy Mojo?
Główną ideą stojącą za stworzeniem Mojo jest ujednolicenie infrastruktury ML/AI poprzez dostarczenie języka programowania, który działa na wszystkich warstwach stosu. Dodatkowo, Mojo ma być łatwy w użyciu, eliminując konieczność ręcznego pisania kodu MLIR.
Zdaniem Modular, Mojo oferuje skalowalny i innowacyjny model programowania, umożliwiając osobom pracującym w obszarze sztucznej inteligencji łatwą pracę z akceleratorami i systemami heterogenicznymi.
Z technicznego punktu widzenia, Mojo jest językiem programowania obsługującym metaprogramowanie w czasie kompilacji. Wspiera również inne funkcje, takie jak buforowanie w trakcie kompilacji oraz adaptacyjne techniki kompilacji. Te cechy są niedostępne w innych popularnych językach programowania.
Jeśli chcesz dowiedzieć się więcej o filozofii Mojo, zajrzyj do Modular Docs – Why Mojo🔥
Funkcje języka programowania Mojo
W tej części przyjrzymy się kluczowym cechom języka Mojo.
# 1. Pełna kompatybilność z Pythonem
Mojo zostało zaprojektowane tak, aby współpracować z ekosystemem Pythona, a nie konkurować z nim. Wykorzystuje te same funkcje, biblioteki i mechanizmy, które oferuje Python, dzięki czemu w Mojo można używać dowolnej biblioteki Pythona.
Aby zaimportować bibliotekę, należy użyć następującego kodu:
from PythonInterface import Python
Następnie można użyć funkcji `Python.import_module()` aby zaimportować dowolną bibliotekę Pythona.
Na przykład, aby zaimportować bibliotekę numpy, należy użyć poniższego kodu:
let np = Python.import_module("numpy")
W Pythonie należałoby użyć „import numpy as np”.
Po zaimportowaniu można korzystać z funkcji biblioteki, np. tworzyć tablice, wykonywać obliczenia itd.
array = np.array([1, 2, 3]) print(array)
Podobnie, można zaimportować matplotlib.pyplot lub utworzyć wykres w Mojo.
Tak wygląda rezultat uruchomienia powyższego kodu w Mojo Playground:
Jeśli chcesz wypróbować ten kod, możesz go skopiować i wkleić z poniższej sekcji:
from PythonInterface import Python let np = Python.import_module("numpy") array = np.array([1, 2, 3, 4, 5]) print(array)
#2. MILR
MILR to skrót od Multi-Level Intermediate Representation. Mojo wspiera MILR, co umożliwia programistom korzystanie z zaawansowanych funkcji, takich jak jednostki sprzętowe AI, wątki i wektory.
MILR podnosi wydajność poprzez zastosowanie współbieżności, dzięki czemu Mojo jest szybszy niż Python. Ponadto umożliwia programistom wykorzystanie potencjału wielu rdzeni.
#3. Kontroler własności i pożyczkobiorcy
Zarządzanie pamięcią w Pythonie jest bezpieczne i wykorzystuje mechanizm garbage collection. Programiści muszą jednak zadbać o to, aby kod nie działał w warunkach wyścigu.
Mojo, podobnie jak Rust, wdraża rygorystyczny model sprawdzania własności i pożyczkobiorców. Obecnie jest on częściowo zaimplementowany. Celem tego modelu jest poprawa współbieżności i zapewnienie efektywnego zarządzania pamięcią.
Model własności wprowadza podejście bezpieczne dla wątków, które idealnie nadaje się do obsługi współbieżności. W ten sposób programy nie napotykają warunków wyścigu. Ponadto moduł sprawdzania pożyczkobiorcy dba o to, aby zmienne były zawsze weryfikowane w czasie wykonywania.
#4. Zerowy koszt abstrakcji
Mojo oferuje abstrakcje bez dodatkowych kosztów, dając programistom pełną kontrolę nad pamięcią. W tym przypadku programiści mogą wprowadzać wartości alokacji inline do struktur.
#5. Automatyczne dostrajanie
Mojo oferuje również funkcję automatycznego dostrajania. Oznacza to, że parametry są automatycznie dostosowywane, aby uzyskać optymalne wyniki w zależności od docelowego sprzętu.
Automatyczne dostrajanie eliminuje potrzebę ręcznej optymalizacji kodu dla konkretnego sprzętu.
Szybkość: Jak szybki jest język Mojo?
Python, jako język programowania wysokiego poziomu, kładzie nacisk na łatwość użycia i konserwację kodu. Niestety, wiąże się to z niższą wydajnością w porównaniu z innymi językami programowania.
W teście przeprowadzonym przez Modular, Mojo osiągnął wynik 35000x szybszy niż Python. Zastosowano algorytm Mandelbrota, który został uruchomiony na instancji AWS z procesorem Intel Xeon. W teście porównano również PYPY, SCALAR C++ i MOJO z Pythonem. Wyniki pokazały znaczną przewagę Mojo, co widać na poniższym obrazku.
źródło: modular.com
Więcej informacji na temat szybkości Mojo można znaleźć w tym wpisie na forum społeczności Julialang.
Modułowy mechanizm wnioskowania — tanie uruchamianie modeli AI
Modular pracuje również nad Modular Inference Engine, który ma na celu obniżenie kosztów uruchamiania modeli AI w środowisku produkcyjnym. Mojo natywnie obsługuje Modular Interference Engine. Umożliwia to zespołom uproszczenie procesów pracy, zmniejszenie opóźnień wnioskowania i łatwiejsze skalowanie produktów AI.
Ponadto, programiści nie muszą modyfikować swoich modeli, aby korzystać z silnika. Po załadowaniu, silnik może przyspieszyć działanie modeli PyTorch i TensorFlow, zapewniając wysoką wydajność i szerokie wsparcie sprzętowe.
Czy Mojo zastąpi Pythona?
Mojo jest nowym językiem, który wydaje się bardzo obiecujący. Jednak potrzeba czasu, aby dotarł do docelowej grupy odbiorców, takiej jak naukowcy danych czy programiści. Język ten rozwiązuje specyficzne problemy w obszarze sztucznej inteligencji i jest atrakcyjny dla osób, które dopiero zaczynają swoją przygodę z programowaniem. Niemniej jednak, istnieje wiele podobnych rozwiązań, które zwiększają szybkość języka Python. Na przykład, warto wspomnieć o Jax, Codon i Julia – języku zorientowanym na analizę danych.
W przyszłości, mogą wydarzyć się dwie rzeczy. Po pierwsze, Mojo może rozwijać się w szybkim tempie i zyskać popularność w społeczności programistycznej. Drugą możliwością jest to, że Mojo stanie się językiem programowania ad-hoc, który wykorzystuje biblioteki Pythona i Modular Interference Engine.
Czy Mojo zastąpi Pythona? Czas pokaże.
Na koniec, zapoznaj się z przydatnymi jednolinijkowcami w Pythonie, które upraszczają typowe zadania.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.