Мир технологий находится в постоянном движении. И здесь есть новичок - язык Mojo. Он взял на себя роль героя, который повысит скорость выполнения проектов, написанных на Python, до уровня С.
Python – это один из самых лучших языков программирования. Это универсальный и простой язык программирования, который открывает для новых учеников двери в мир программирования/информатики.
Мало того, этот язык программирования отлично подходит для хорошо квалифицированных разработчиков, которые с его помощью могут создавать сложные приложения. Однако у Python есть существенный недостаток – скорость выполнения. И вот здесь на помощь приходит Mojo.
В этой статье мы рассмотрим сам Mojo и то, как он ладит с экосистемой Python. Давайте начнем.
1. Что такое Mojo?
Mojo – это современный высокоуровневый язык программирования. Он обладает интуитивно понятной структурой, которая помогает разработчикам быстро создавать приложения. Вдобавок к этому он призван устранить пропасть между производством и исследованиями, позволяя пользователям совмещать функции системного и метапрограммирования с синтаксисом и экосистемой Python.
Он много всего позаимствовал у Rust и обеспечивает высокую скорость выполнения для экосистемы Python. С технической точки зрения Mojo – это надмножество Python, предоставляющее вам дополнительные возможности.
Команда, стоящая за созданием Mojo, принадлежи компании Modular – компании, которая занимается инфраструктурой искусственного интеллекта (ИИ). И это также значит, что это язык программирования для разработчиков ИИ. Наряду с Mojo они также представили Interference Engine (движок логического вывода), который позволяет разработчикам оптимизировать свой рабочий процесс, масштабировать продукты ИИ и сокращать задержку на логический вывод (об этом мы поговорим позже).
Если верить словам генерального директора компании Modular Криса Латтнера, Mojo превосходит Python в скорости в 35 000 раз. Он также стоит за разработкой такого языка программирования, как Swift. Увеличение скорости достигается за счет того, что Mojo использует набор инструментальных средств компилятора LLVM и инфраструктуру компилятора MLIR (Multi-level Intermediate Representation – многоуровневое промежуточное представление).
У Mojo есть несколько целей:
- Работать, имея полную совместимость с экосистемой Python.
- Дать разработчикам возможность развертывать код в ускорителях.
- Низкоуровневый контроль для обеспечения прогнозируемой производительности.
- Обеспечить отсутствие фрагментации экосистемы.
Испробовать Mojo можно через облачную среду Mojo Playground. Вас попросят войти в систему, после чего вы сможете начать работу!
2. Для чего нам нужен Mojo?
Основополагающая идея Mojo – унифицировать инфраструктуру машинного обучения и ИИ путем предоставления языка программирования, который будет работать во всей экосистеме. К тому же, он довольно прост в использовании и избавляет вас от необходимости писать код MLIR.
Согласно заявлениям Modular, в скором времени Mojo предложит масштабируемую и инновационную модель программирования. За счет этого обычные пользователи ИИ смогут без проблем работать с ускорителями и гетерогенными системами.
По сути это значит, что Mojo – язык программирования, который поддерживает метапрограммирование на этапе компиляции. Кроме того, он поддерживает такие функции, как кэширование во время компиляции, методы адаптивной компиляции и т.д. Другие языки программирование не обладают такими функциями.
3. Особенности Mojo
В этом разделе мы рассмотрим главные особенности Mojo.
#1. Полная совместимость с Python
Mojo направлен на то, чтобы работать с экосистемой Python, а не бороться с ней. Это подтверждает тот факт, что Mojo использует те же функции, библиотеки и возможности, которые предлагает Python. Так что, в Mojo вы можете использовать любую библиотеку Python.
Для того, чтобы вы могли выполнить импорт, вам понадобиться следующий код:
from PythonInterface import Python
После этого вы можете воспользоваться функцией Python.import_module() и импортировать любую библиотеку Python.
Например, чтобы импортировать numpy, вам нужно набрать следующий код:
let np = Python.import_module(“numpy”)
В Python вам нужно будет набрать import numpy as np.
Раз мы импортировали библиотеку, мы можем воспользоваться ей для создания массивов, выполнения различных вычислений и т.д.
array = np.array([1, 2, 3])
print(array)
Аналогично вы можете импортировать matplotlib.pyplot, чтобы создать в Mojo график.
Вот как это выгляди, когда я запускаю код в Mojo Playground.
Если вы хотите попробовать запустить код, просто скопируйте его:
from PythonInterface import Python
let np = Python.import_module("numpy")
array = np.array([1, 2, 3, 4, 5])
print(array)
#2. MLIR
MLIR расшифровывается как Multi-Level Intermediate Representation, что переводится как «многоуровневое промежуточное представление». Mojo поддерживает MLIR. Это, в свою очередь, позволяет разработчикам использовать возможности новых продвинутых функций на полную. К этим функциям относятся аппаратные модули ИИ, потоки и векторы.
Благодаря параллелизму, MLIR повышает производительность, что делает Mojo быстрее Python. Кроме того, он позволяет разработчикам использовать преимущества сразу нескольких ядер.
#3. Владение и проверка прав доступа к памяти
Функция управления памятью Python полностью безопасна. Она использует сборщик мусора, так что программисты должны быть уверены, что код не будет переходить в состояние гонки.
Mojo, как и Rust, реализует строгую модель владения и проверки прав доступа к памяти. На текущий момент она реализована лишь частично. Идея использования данной модели заключается в совершенствовании параллелизма и предоставлении управления памятью на высшем уровне.
Модель владения памятью предоставляет подход с поддержкой многопоточности, который идеально подходит для обеспечения высокоуровневой поддержки параллелизма. Таким образом, программы не переходят в состояние гонки. Кроме того, проверка прав доступа к памяти гарантирует, что во время выполнения переменные всегда проверяются.
#4. Абстракция с нулевой стоимостью
Mojo предлагает абстракции с нулевой стоимостью, которые позволяют разработчикам контролировать хранилище от и до. Здесь программисты могут подставлять в структуры свои собственные значения.
#5. Автоматическая настройка
Mojo предлагает автоматическую настройку. Таким образом, вы можете получить значения параметров, которые наилучшим образом подходят к целевому оборудованию.
Автоматическая настройка избавляет вас от необходимости самостоятельно оптимизировать код в соответствии с целевым оборудованием.
4. Скорость: насколько Mojo быстр?
Python – это высокоуровневый язык программирования, целью которого является простота использования и удобство сопровождения. Увы, но все это делает его медленнее, чем другие решения или языки программирования.
Протестировав Mojo, Modular обнаружили, что его скорость составляет 35 000х. Они использовали алгоритм Мандельброта и запустили его на экземпляре AWS с процессором Intel Xeon. Они протестировали PyPy, C++, Mojo и Python. Результаты были получены крайне быстро, и вы можете увидеть их ниже.
Источник: modular.com
Inference Engine: запускайте модели ИИ по дешевке
Modular также разрабатывает Inference Engine, который делает запуск моделей ИИ в производство более дешевым. Mojo поддерживает его по умолчанию. Это позволяет командам упростить свой рабочий процесс. Кроме того, за счет этого движка разработчики могут сократить задержку на логический вывод, что упрощает масштабирование продуктов ИИ.
К тому же, разработчикам не нужно менять свою модель для того, чтобы использовать этот движок. После загрузки он сможет усовершенствовать модели PyTorch и TensorFlow, которые способны работать с высоким уровнем производительности и широкой аппаратной поддержкой.
Может ли он заменить Python?
Mojo – новый язык, и он выглядит довольно многообещающим. Так что, потребуется некоторое время, чтобы достичь своей целевой аудитории, например, специалистов по обработке данных или программистов. И да, он решает некоторые проблемы, возникающие у любителей и профессионалов в области ИИ. И тем не менее, существует множество других подобных решений, которые также могут повысить скорость Python, например, Jax, Codon и Julia – язык, ориентированный на исследование данных.
Итак, может случить одно из двух. Первое: количество функций может вырасти экспоненциально, и сообщество его примет. Второе: он станет языком программирования узкой направленности, который будет использовать библиотеки Python и Interference Engine.
Так что? Mojo заменит Python? Это покажет лишь время.