Mojo против Python по производительности: битва за быстрый ИИ

Последнее обновление: 20-де-де Noviembre 2025
Автор: TecnoDigital
  • Python доминирует в области искусственного интеллекта благодаря своей экосистеме, но GIL, динамическая типизация и интерпретатор снижают производительность.
  • Mojo, основанный на MLIR, обеспечивает компиляцию, настоящую распараллеливание и совместимость с библиотеками Python.
  • Modular объединяет среды выполнения PyTorch и TensorFlow со встроенным ускорением и квантованием.
  • Возможны огромные ускорения (Мандельброт, SIMD); задача состоит в том, чтобы реализовать это преимущество в производственной среде и на нескольких аппаратных средствах.

Сравнение производительности Mojo и Python

Дискуссия о производительности Mojo против Python разгорается, потому что она затрагивает саму суть современного ИИ: реальную скорость, простоту использования и поддержку оборудования. В последние годы появились данные об ускорении, которые на бумаге кажутся научной фантастикой, но они подкреплены глубокими изменениями в компиляторах и в том, как код выполняется на процессорах, графических процессорах и ускорителях ИИ.

В этой статье мы собрали исчерпывающий обзор всего, что было опубликовано в различных источниках о Python, его ограничениях производительности и подходе Mojo — языка, основанного на модульной архитектуре и разработанного Крисом Латтнером (LLVM, Clang, Swift). Мы также объясняем MLIR, причины возникновения узких мест GIL, различия между CUDA и MPS, совместимость с экосистемой Python и проблемы внедрения, которые еще предстоят.

Python доминирует в области искусственного интеллекта, но его архитектура не способствует повышению производительности

Неудивительно, что Python является универсальным языком искусственного интеллекта : простой синтаксис, тысячи библиотек, множество руководств и огромное сообщество. Однако эта популярность сопряжена с неприятной реальностью: Python является интерпретируемым языком с динамической типизацией и подчиняется глобальной блокировке интерпретатора (GIL) , которая ограничивает одновременное выполнение чистого кода Python одним потоком.

Такая конструкция позволяет ускорить разработку, но при этом снижает скорость и эффективность использования памяти по сравнению с компилируемыми языками, такими как C/C++, Swift или Rust. В задачах машинного обучения/глубокого обучения, где каждая миллисекунда на счету, а оборудование невероятно быстрое, это снижение производительности становится крайне заметным.

В качестве компенсации экосистема прибегла к обходным путям: NumPy (с частями на C и Fortran), библиотеки, делегирующие выполнение нативному коду , и расширения на C/C++ для критически важных операций. Это работает, да, но это вводит слои, зависимости и создает монстра Франкенштейна из версий, фреймворков и бэкендов, которого сложно поддерживать в продакшене.

Кроме того, параллельная обработка в Python часто основана на многопроцессорности или на освобождении GIL библиотеками в нативных секциях. В результате, если рабочая нагрузка не распределена должным образом между C/C++ или графическим процессором, производительность Python становится узким местом.

NumPy и другие «патчи»: необходимы, но с ограничениями

NumPy — классический пример: многие из его критически важных операций написаны на C или Fortran , что значительно быстрее, чем чистый Python. Однако, когда дело доходит до тонкой параллелизации, масштабирования до нескольких ядер или интеграции с новыми ускорителями, ограничения Python снова проявляются , особенно если поток управления часто возвращается к интерпретатору.

Такой многоуровневый подход (Python → расширения C/C++ → драйверы/оборудование) эффективен, но сложен в отладке и развертывании . В масштабируемом ИИ, с конвейерами обучения, вывода и постобработки, эта операционная сложность почти так же велика, как и доступная FLOPS (число операций с плавающей запятой).

CUDA, MPS и проблема переносимости

Ускорение CUDA (NVIDIA) — это спасение, но и своего рода «золотая клетка»: некоторые модели и оптимизации полностью зависят от стека NVIDIA. Если вы попытаетесь запустить тот же код на Apple Silicon с Metal Performance Shaders (MPS) или на графических процессорах AMD, вы можете столкнуться с неподдерживаемыми инструкциями или неполными путями вычислений.

Наиболее распространенное сравнение очевидно: с CUDA вы управляете «Феррари», в то время как MPS может показаться более ограниченным для определенных рабочих нагрузок. Тем не менее, отрасль стремится к стандартам и переносимости, потому что никто не хочет привязывать свой бизнес к одному поставщику оборудования, если это не является абсолютно необходимым.

MLIR: мост, необходимый новой эре вычислений

Чтобы понять, что предлагает Mojo, нам нужно поговорить о MLIR (Multi-Level Intermediate Representation) — проекте, зародившемся в экосистеме LLVM, который добавляет промежуточное представление, разработанное для высокой производительности и машинного обучения . В отличие от классического конвейера LLVM, MLIR обрабатывает графы данных, векторизацию, тесселяцию, вставку DMA и явное управление кэшем.

Проще говоря: MLIR позволяет преобразовывать высокоуровневый код в реализации, очень близкие к целевому оборудованию (процессоры, графические процессоры, тензорные процессоры, нейронные процессоры, ПЛИС и т. д.), обеспечивая параллелизм и применяя оптимизации высокопроизводительных вычислений , которые классический компилятор не охватывал в достаточной мере для этих областей.

  Sora AI Создание видео с текстом

Что же такое Mojo?

Mojo — это язык, который позиционирует себя как надмножество Python : он сохраняет привычный синтаксис, может использовать те же библиотеки и интегрирует современную модель компиляции, поддерживаемую MLIR. Он был запущен в 2023 году, первоначально как веб- платформа, доступная по запросу, а позже — с локальным выполнением на GNU/Linux и macOS. В феврале 2025 года его стандартная библиотека стала открытым исходным кодом, хотя компилятор остается закрытым по сей день.

Цель амбициозна: простота Python в сочетании с производительностью C/C++ , а также безопасность и удобство использования, которые мы видели в таких языках, как Rust или Swift. Другими словами, написание кода на высоком уровне и создание небольших, быстрых и легко развертываемых бинарных файлов.

Ключи дизайна: набор текста, память, структуры и функции

К числу наиболее примечательных особенностей относятся строгая типизация (и статическая типизация при необходимости), использование let/var для объявления неизменяемых и изменяемых элементов, а также поддержка структур с компиляционно-определяемой структурой, что облегчает генерацию оптимального машинного кода.

Mojo позволяет объявлять функции с помощью `fn` в дополнение к `def` ; как правило, `fn` подразумевает больше ограничений и, следовательно, лучший потенциал оптимизации для компилятора. Он также может похвастаться «абстракциями с нулевыми затратами» и возможностями самонастройки , когда компилятор выбирает эффективные параметры для целевой платформы.

Без GIL и с реальным распараллеливанием

В отличие от Python, Mojo не зависит от GIL . Среда выполнения и компилятор разработаны таким образом, чтобы использовать потоки, векторы и ускорители, не заставляя разработчика бороться с базовой параллельностью интерпретатора. На практике это означает, что задачи, которые в Python "сталкиваются" с GIL, могут действительно выполняться параллельно.

Этот момент имеет ключевое значение в ресурсоемких вычислениях: если вы можете разбить задачу на подзадачи и выполнять их параллельно обычным способом, то скачок производительности будет не незначительным, а кардинальным.

Производительность: от Мандельброта до векторизованных версий

Для оценки улучшений часто используется тест на множестве Мандельброта — вычислительно ресурсоемком генераторе фракталов, идеально подходящем для распараллеливания. В чистом Python сообщалось о времени выполнения, превышающем 1000 секунд , в то время как реализации на Mojo сократили это время примерно до 0,03 секунды после последовательных оптимизаций.

Были задокументированы следующие этапы развития алгоритма: наивная версия на Python → NumPy → наивная версия на Mojo → векторизованный Mojo с SIMD-управлением . Благодаря этой последовательности улучшений наблюдалось огромное ускорение, от 35 000 до 68 000-кратного в конкретных сценариях. Это впечатляющие цифры, которые, как всегда, зависят от алгоритма, оборудования и тщательности оптимизации.

Простая компиляция и развертывание

Mojo придерживается философии сборки в бинарный файл : вы собираете проект, получаете исполняемый файл и распространяете его . Если вы раньше работали с Python, это позволяет избежать проблем с виртуальными средами , пакетами wheel и комбинациями версий библиотек, которые не всегда хорошо взаимодействуют друг с другом.

Чтобы вы имели представление, "Hello World" можно скомпилировать и запустить с помощью простого файла mojo hello.mojo . Кроме того, файлы имеют расширение .mojo (эмодзи в виде пламени также стало популярным как подмигивание), что упрощает их идентификацию в гибридных проектах.

Совместимость с Python и экосистема

Одна из прелестей Mojo заключается в том, что он не заставляет вас отказываться от того, что у вас уже есть : его совместимость с экосистемой Python означает, что вы можете продолжать использовать такие библиотеки, как NumPy, Pandas или Matplotlib, одновременно внедряя более эффективные структуры и типы, когда это вам удобно.

На практике эта стратегия «Python++» сглаживает кривую внедрения: вы поддерживаете свою кодовую базу , переносите наиболее востребованные части в Mojo и используете компилятор и MLIR для повышения производительности, не отказываясь от знакомого вам синтаксиса.

Модульность: среда выполнения для объединения PyTorch и TensorFlow

В дополнение к языку программирования, Modular представил универсальную среду выполнения/фреймворк, способный запускать модели PyTorch и TensorFlow без необходимости установки обоих стеков. Согласно этим источникам, его архитектура может ускорить выполнение TensorFlow до 3 раз и PyTorch до 2,5 раз , а также интегрировать инструменты квантизации , тем самым способствуя масштабируемости ИИ.

Цель состоит в том, чтобы избежать «трехслойного ада» (Python → C/C++ → специфическое оборудование) с помощью единого программного слоя и бэкэнда, который взаимодействует с любым оборудованием и позволяет максимально эффективно использовать каждую платформу без необходимости переписывать модель каждые два дня.

  ИНТЕЛЛЕКТ-2: Распределенная и открытая модель ИИ, которая производит революцию в области искусственного интеллекта

Квантование: уменьшение размера без ущерба для точности

Квантизация моделей подобна MP3-файлу для нейронных сетей: вы снижаете точность в определенных весах/слоях и, в свою очередь, уменьшаете размер и ускоряете вывод. Потеря точности обычно невелика (например, снижение с 94% до 91% в классификаторе), а выигрыш в развертывании и скорости более чем компенсирует это.

Этот подход является ключевым для переноса моделей на локальные устройства с соблюдением конфиденциальности. Фактически, такие стеки, как Core ML , и ускорители, такие как NPU от Apple (через MPS/Accelerate), стремятся к созданию сжатых моделей, которые помещаются и бесперебойно работают на iPhone или Mac без отправки данных в облако.

От Swift к TensorFlow и Mojo: путь Латтнера

Путь к этому моменту не случаен. После работы в Apple (LLVM, Clang, Swift ) Крис Латтнер работал в Tesla и Google Brain, где возглавлял разработку Swift для TensorFlow . Эта попытка объединить современный язык с машинным обучением была отложена, но она дала уроки, которые теперь кристаллизовались в MLIR и дизайне Mojo.

До работы над Modular Латтнер также занимался разработкой на RISC-V (SciFive), что согласуется с идеей о том, что будущее ИИ связано со многими типами оборудования , и нам нужны компиляторы и среды выполнения, способные быстро адаптироваться ко всем из них.

Статус проекта, поддержка и принятие

Язык Mojo был запущен в 2023 году, и, хотя он быстро развивается, он все еще находится на стадии зрелости . Его стандартная библиотека была открыта в феврале 2025 года, но компилятор остается закрытым . По популярности (индекс TIOBE) Mojo занимает место ниже топ-50, что и следовало ожидать для языка, которому всего два года.

В разделе «Кто есть кто» упоминается поддержка от Amazon, AMD, NVIDIA и Inworld . Тем не менее, чтобы конкурировать с Python, ему потребуется сообщество, документация, пакеты и истории успеха в производственной среде , которые могли бы служить эталоном для других.

Проблемы: сообщество, рефлексия и динамические характеристики

Помимо производительности, Python выигрывает с точки зрения сообщества, ресурсов и экосистемы . Mojo придется устранить пробелы в тех областях, где Python превосходит другие языки, например, в некоторых механизмах рефлексии или широко используемых динамических шаблонах. Также необходимо будет продолжать совершенствовать удобство использования, чтобы переход с Python был полностью бесшовным.

С технической точки зрения, обещание « компиляции для всего » звучит великолепно, но у каждого бэкенда (CUDA, ROCm, MPS, TPU, FPGA…) есть свои нюансы. Поддержание стабильной функциональности и производительности на всех из них во время выполнения — это марафон, а не спринт.

Mojo и графические процессоры: за пределами NVIDIA

Одно из преимуществ Mojo и MLIR заключается в их способности ориентироваться на графические процессоры как NVIDIA, так и AMD , а не только на экосистему CUDA. Если эта поддержка останется актуальной и конкурентоспособной, многие компании увидят стратегическое преимущество в том, что не будут привязаны к одному поставщику.

В то же время, мир Apple (с MPS ) и другие специализированные ускорители (NPU, FPGA ) требуют соответствующих путей компиляции и библиотек. Обещание «написать один раз, быстро запускать везде» амбициозно, и если его правильно реализовать, оно изменит правила игры.

Дебаты: Новый язык или «Python++»?

На технических форумах ведутся споры о том, является ли Mojo «ещё одним вариантом Python» или новым языком, который разделяет только синтаксис. Для повседневного использования крайне важно иметь возможность повторно использовать свой код и библиотеки , одновременно создавая компоненты, повышающие производительность, с более богатыми типами и структурами.

Эта двойственность в сочетании с современным компилятором MLIR позволяет сделать программу "hello world" удобной для пользователя, а также дает возможность вашим вычислительным ядрам приближаться к производительности C/C++ или даже превосходить ее в векторизованных сценариях.

Ресурсы, сообщество и обучение

Если вы только начинаете работать в сфере искусственного интеллекта, открытые учебные сообщества окажутся бесценными. Эти пространства, ориентированные как на студентов, так и на преподавателей, предоставляют возможности задавать вопросы, обмениваться ресурсами и переходить от основ к продвинутым методам. Это прекрасные места для практики, сравнения подходов и получения ответов на реальные вопросы.

В этом помогает и экосистема распространения информации: от обзоров запуска Mojo от таких экспертов, как Джереми Ховард, до бесплатных видеокурсов по Python, которые позволяют начать программировать совершенно бесплатно. Чем сильнее сообщество вокруг Mojo, тем проще компаниям и разработчикам будет его внедрить.

Практические заметки и интересные детали

Небольшие детали, улучшающие удобство использования, тоже имеют значение: файлы .mojo , поддержка fn / def , прямое выполнение с помощью команды mojo или явное намерение предлагать бинарные файлы, которые легко распространять . Это обыденные вещи, но когда проекты масштабируются, они имеют решающее значение.

  Раздел 3: Функции и модульность в Python

В то же время необходимо признать влияние Rust и Swift на проектирование типов, безопасность памяти и абстракции с нулевыми затратами . Это не случайно: Латтнер занимался созданием Swift и пилотным проектированием LLVM/Clang; это наследие очевидно в дизайне компилятора.

От лаборатории до производства: чего можно ожидать

Если вы собираетесь попробовать Mojo сегодня, имеет смысл использовать его в модулях с высокой нагрузкой (ядра вычислений, ресурсоемкие преобразования или интенсивные циклы). Оставьте оркестровку и инструменты в Python, а компоненты с высокой нагрузкой перенесите в Mojo, чтобы оценить реальную пользу в ваших метриках.

Согласно проанализированным отчетам, задачи типа Мандельброта или SIMD-ядра продемонстрировали колоссальное ускорение . В реальных конвейерах обработки данных, с использованием ввода-вывода, предварительной обработки и сторонних библиотек, вы увидите значительный прирост производительности, хотя и более скромный и зависящий от основного узкого места.

Унифицированные слои: прощай «Франкенстак»

Ключевое преимущество модульной архитектуры заключается в унификации слоев: вместо разрозненных Python + C/C++ + специфических бэкендов, она предлагает единый язык для всех трех слоев и среду выполнения, которая взаимодействует с оборудованием . Меньше «связующих звеньев», меньше несовместимостей и меньше затрат на защиту.

Если эта концепция получит распространение, процессы обучения и вывода результатов можно будет переносить между процессорами NVIDIA, AMD, Apple Silicon, TPU или NPU без необходимости полной перестройки проекта. И это не просто техническая деталь, а бизнес-стратегия : свобода выбора оборудования на основе стоимости, доступности или энергоэффективности.

Заметка о голосовых моделях и транскрипции

В реальных условиях при переносе моделей, таких как Whisper (транскрипция), из Python в нативные маршруты или другие API (MPS/Accelerate) возникают несовместимости: определенные инструкции существуют в CUDA, но отсутствуют в MPS, или наоборот. Именно здесь унифицированный бэкенд и компилятор с поддержкой MLIR могут избавить вас от множества проблем.

Без этого общего связующего звена вы получаете разветвлённый код и ручные переносы, которые замедляют развитие проекта. С ним же обещают возможность написать код один раз и получить эффективную маршрутизацию на каждой поддерживаемой платформе.

«Мета»-контекст: взаимодействие с общественностью, спонсорство и техническое сообщество

Часть материалов, подпитывающих эту дискуссию, поступает из подкастов и технических блогов , которые сочетают образовательный контент со спонсорством и сообществами (даже с мерчандайзингом). Помимо отдельных примеров (курсы, приложения, Twitch, фоновая музыка, поддержка сети подкастов…), интересно то, что техническая дискуссия вышла за рамки своей ниши и находит отклик у широкого круга аудитории.

Этот информационный шум полезен: он поднимает сложные вопросы, раскрывает реальные примеры использования и делится опытом работы с различным оборудованием. Расширение охвата дискуссии в сторону MLIR и Mojo ускоряет обнаружение ошибок, разработку руководств по миграции и создание готовых решений, которые мы все можем использовать повторно.

Общая картина ясна: Python останется ключом к ИИ, но прагматичная альтернатива уже существует, когда производительность имеет первостепенное значение. Mojo не стремится уничтожить Python, а скорее поднять его на новый уровень с помощью современного компилятора , истинной параллелизации и среды выполнения, которая понимает как современные, так и будущие ускорители. Если вы работаете в области машинного обучения/глубокого обучения, и время/стоимость на одну эпоху вывода или обучения имеет значение, стоит попробовать использовать его со своими данными и оборудованием.

Соглашение OpenAI AWS
Связанная статья:
OpenAI и AWS подписывают мегаконтракт на масштабирование своего ИИ: 38.000 миллиардов долларов, чипы Nvidia и новая карта облаков