스크립트
00:00:00Язык программирования Mojo только что достиг версии 1.0, и момент выбран немного странный.
00:00:05Он появился с закрытым компилятором, через семь дней они открыли его исходный код,
00:00:09а компания Qualcomm как раз только что купила их.
00:00:12Но давайте на секунду забудем об этом.
00:00:14Главная фишка Mojo — код в стиле Python без необходимости переходить на C++ или CUDA ради скорости.
00:00:20Так что давайте посмотрим, работает ли это на практике.
00:00:27Вся суть Mojo сводится к одному вопросу.
00:00:30Что если вы могли бы писать код, который выглядит и ощущается как Python,
00:00:34но при этом запускать самые важные части без отказа от C++ или CUDA?
00:00:39Один легко читаемый язык для процессора и видеокарты.
00:00:42В этом и заключается вся идея.
00:00:43И теперь, когда Mojo наконец дошел до версии 1.0, мне захотелось проверить, насколько все это реально.
00:00:49Так что перед тем, как говорить о Qualcomm, открытом исходном коде и прочем, давайте просто запустим его.
00:00:53Если вам нравятся инструменты для ускорения разработки, обязательно подписывайтесь.
00:00:57У нас постоянно выходят новые видео.
00:00:59Я буду делать это на своем компьютере, но я не собираюсь проводить здесь туториал по Mojo.
00:01:03Если вы никогда раньше его не видели, то да, он выглядит как Python,
00:01:07но вы заметите несколько ключевых отличий.
00:01:10С левой стороны — Python.
00:01:12С правой стороны — Mojo.
00:01:13Тут тот же цикл, та же сетка, тот же лимит итераций.
00:01:17Я не буду вдаваться в математические подробности.
00:01:20Просто посмотрите на оба цикла while.
00:01:21Они делают одно и то же.
00:01:23Сначала мы запустим Python.
00:01:26Ладно, отлично.
00:01:27Он отработал.
00:01:28Выполнился.
00:01:28Теперь запускаем ту же программу, скомпилированную с помощью Mojo.
00:01:32И снова давайте запустим.
00:01:35И бац.
00:01:35Готово.
00:01:36При этом контрольные суммы в последней цифре не сойдутся.
00:01:39Разница составляет пару сотен на четверть миллиона.
00:01:43Python сначала выполняет умножение, а затем сложение.
00:01:45Компилятор Mojo может объединить это в одну инструкцию.
00:01:49Несколько пикселей требуют дополнительной итерации.
00:01:51Считайте секунды здесь реальным показателем.
00:01:54И это не NumPy.
00:01:55Это не какая-то модель.
00:01:56Производительность заключается не только в ускорении цикла на процессоре.
00:02:00Вы можете начать на Python, потому что это просто.
00:02:03Затем путь ведет к C++ или CUDA.
00:02:06Теперь у вас два файла, и они начинают понемногу расходиться.
00:02:09Так вот какой вопрос задает Mojo.
00:02:12Может ли файл, который вы читаете, быть тем же файлом, который выполняется на GPU?
00:02:17Эта функция является ядром.
00:02:18Каждый поток GPU складывает одну пару чисел.
00:02:20Вот и все.
00:02:21Я не переключался на Metal, Swift или CUDA.
00:02:24Компилируем его.
00:02:26И вот код запущен и работает.
00:02:28Так что да.
00:02:30Mojo умеет делать кое-что действительно интересное.
00:02:32Я только что скомпилировал рабочее ядро для GPU на MacBook, используя тот же язык, на котором
00:02:38писал обычный код на Python.
00:02:40Ваш код машинного обучения начинается с Python, потому что с ним легко работать.
00:02:44Мы все это знаем.
00:02:45Затем, в какой-то момент, производительность начинает иметь значение.
00:02:48Поэтому важные части переписываются на C++ или CUDA.
00:02:52Теперь нам приходится поддерживать две версии одной системы.
00:02:55И опять же, со временем это только добавляет путаницы.
00:02:58Суть Mojo в том, что читаемый файл и быстрый файл — это просто одно и то же.
00:03:03За всем этим стоит Крис Латтнер.
00:03:06Он создал LLVM, затем Clang, а после и Swift.
00:03:10Но запустить ядро GPU — это одно.
00:03:14Называть язык версией 1.0 — это уже совсем другое.
00:03:18Так что же на самом деле означает версия 1.0?
00:03:21Совсем не то, что Mojo завершен.
00:03:23Это больше означает стабильность.
00:03:25Появляются гарантии, что код, написанный вами сегодня, не сломается завтра.
00:03:29Вот что такое мажорный релиз.
00:03:30Но тут вы сталкиваетесь с первой странностью.
00:03:32Mojo дошел до версии 1.1 еще до того, как его компилятор стал открытым.
00:03:37Исходный код стандартной библиотеки открыли еще в марте 2024 года.
00:03:40Ядра max открылись в 2025 году.
00:03:43Но компилятор, ту саму штуку, которая выполняет компиляцию, держали закрытой до 18 августа этого года.
00:03:50Лицензия Apache 2.0, и это важно, потому что всего за семь дней до этого, когда вышел Mojo 1.0, он все еще был закрытым.
00:03:57И это закрывает один из главных аргументов критиков Mojo на протяжении трех лет подряд.
00:04:02Раньше можно было сказать: мол, да, но компилятор-то закрыт.
00:04:05Теперь мы так сказать уже не можем, и кажется, что все движется в правильном направлении.
00:04:10Возможно.
00:04:10Пока вы не посмотрите на то, что произошло тремя неделями ранее.
00:04:14Поглощение со стороны Qualcomm завершилось 29 июля.
00:04:16Релиз Mojo 1.0 состоялся 11 августа.
00:04:19Компилятор открыли 18 августа.
00:04:21То есть величайшее событие в истории открытости Mojo произошло менее чем через три недели после того, как Modular перестала быть независимой компанией.
00:04:29И это сразу порождает два совершенно разных взгляда на ситуацию.
00:04:33Первый: Qualcomm купила Modular, потому что хочет видеть Mojo повсюду.
00:04:37Вряд ли.
00:04:37Или второй: Qualcomm купила Modular, и со временем все это растворится внутри гораздо более крупной корпорации.
00:04:44Qualcomm производит чипы.
00:04:45Язык, который отлично компилируется под чипы, становится гораздо более ценным.
00:04:49Мы можем свободно его использовать.
00:04:50Так что шаг в сторону открытого исходного кода вполне логичен.
00:04:53Но успех Mojo, пожалуй, будет зависеть не от Qualcomm.
00:04:57Он будет зависеть от того, достаточно ли хорош сам язык, чтобы вообще оправдать переход на него.
00:05:02Но опять же, здесь все и начинает запутываться.
00:05:05У Mojo есть проблемы с бенчмарками.
00:05:07Еще в 2023 году заявлялось, что Mojo может быть в 68 000 раз быстрее Python.
00:05:13Это безумие.
00:05:14До сих пор существует пост, утверждающий, что Mojo на 50% быстрее Rust при парсинге ДНК.
00:05:19Тот бенчмарк полностью разнесли.
00:05:21Было показано, что он измерял совсем не то, о чем заявлялось.
00:05:25И при этом цифра в 35 000 раз все еще продолжает всплывать.
00:05:29Она берется из умножения матриц.
00:05:31Но с чем именно они сравнивают?
00:05:34С одной стороны — полностью векторизованная, распараллеленная реализация на Mojo.
00:05:40С другой — тройной цикл на чистом Python.
00:05:44Да, тройной цикл.
00:05:45Не NumPy, а просто вложенный цикл, который в реальной жизни никто использовать не будет.
00:05:49Поэтому мне не особо интересны заявления о том, что он быстрее в 35 000 раз.
00:05:52Я хотел получить цифры на своей машине.
00:05:54Я тестирую на M4 Pro в сравнении с чистым Python.
00:05:57По сравнению с чистым Python — быстрее в 26 с половиной раз.
00:06:00По сравнению с NumPy на одну операцию — примерно в два раза быстрее.
00:06:05Конечно, 26 — это вам не 68 000.
00:06:08Но 26 раз — это тоже отличный результат, ведь под капотом NumPy находится C.
00:06:14В таком случае вы соревнуетесь не с Python.
00:06:16Вы превосходите C за счет лучшего управления памятью.
00:06:19И вот это и расстраивает в Mojo больше всего.
00:06:21Но производительность — это на самом деле не главная причина, почему я бы сомневался насчет использования Mojo сегодня.
00:06:25Я уже экспериментировал с ним раньше.
00:06:27И запускаю его здесь сегодня.
00:06:28Главный вопрос — стабильность.
00:06:30Насколько он стабилен?
00:06:32Потому что Mojo 1.0 выходит с 41 предупреждением о нестабильности API, включая int, print и len — основные встроенные функции.
00:06:40Их пометили как нестабильные в так называемом релизе стабильности.
00:06:45И в тот же день, когда Mojo обещает, что ваш код не сломается, удаление ключевого слова FN ломает около 39 пакетов экосистемы.
00:06:52Ключевое слово FN, которое играло огромную роль в работе Mojo, было полностью удалено.
00:06:58Никакого процесса FC.
00:06:59И хотя компилятор теперь имеет открытый исходный код, они пока не принимают в него сторонние контрибьюты.
00:07:04Так что Mojo 1.0 стабилен, наверное.
00:07:07Но, пожалуй, не так стабилен, как они говорят.
00:07:09Что подводит нас к единственному вопросу, который действительно имеет значение.
00:07:12Стоит ли его использовать?
00:07:13Если вы пишете ядра GPU, CUDA, Triton и тому подобное, я считаю, что Mojo определенно стоит потраченного дня или двух.
00:07:21Один язык для CPU и GPU, плюс я смог скомпилировать работающее ядро GPU прямо на ноутбуке.
00:07:27Мало что еще способно на такое.
00:07:29Но у него все еще есть огромный простор для роста.
00:07:31Так что я бы пока точно не ставил его в приоритет.
00:07:35Три года назад аргументы против Mojo были довольно простыми.
00:07:38Классный новый язык, но кто им будет пользоваться?
00:07:40Это был закрытый язык от стартапа, который просил разработчиков поставить на него все.
00:07:44Сегодня компилятор распространяется под лицензией Apache 2.0.
00:07:47У языка версия 1.0.
00:07:48А тот стартап теперь стал частью Qualcomm.
00:07:51Я Джош из BetterStack.
00:07:53Если вам нравятся подобные советы и трюки по программированию, обязательно подписывайтесь.
00:07:56Увидимся в следующем видео.
커뮤니티 글
아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!
이 영상에 대해 글쓰기