«Переделка Python для мира искусственного интеллекта»

«Python Переделка для проникновения в мир искусственного интеллекта»

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

Чтобы преодолеть эти трудности, компьютерный ученый Крис Латтнер приступил к созданию нового языка Mojo, который предлагает простоту использования Python, но производительность более сложных языков, таких как C++ или Rust. Он соединил силы с Тимом Дейвисом, которого он познакомил, когда они оба работали в Google, чтобы создать Modular в январе 2022 года. Компания, где Латтнер является генеральным директором, а Дейвис главным продуктовым директором, предоставляет поддержку компаниям, работающим над ИИ, и разрабатывает Mojo.

Современный стек программирования искусственного интеллекта обычно состоит из Python сверху, говорит Латтнер, но поскольку это неэффективный язык, внутри него находится C++, который обрабатывает реализацию. Затем C++ должен взаимодействовать с средствами ускорения производительности или графическими процессорами (GPU), поэтому разработчики добавляют какую-то платформу, например Compute Unified Device Architecture (CUDA), чтобы эффективно использовать эти GPU. “Mojo возникла из необходимости объединить эти три разные части стека, чтобы мы могли создать единую решение, которое могло бы масштабироваться”, – говорит Латтнер.

В результате получился язык с тем же синтаксисом, что и Python, поэтому людям, привыкшим программировать на Python, легко его освоить, но который, согласно некоторым показателям, может работать до 35 000 раз быстрее. В случае ИИ Mojo особенно быстро выполняет умножения матриц, используемые во многих нейронных сетях, потому что он компилирует код умножения для прямого запуска на GPU, обходя CUDA.

Латтнер не является новичком в разработке языков программирования. В своей магистерской диссертации в Университете Иллинойс в Урбане-Шампейне он и несколько коллег создали LLVM, набор компиляторов и инструментов программирования для оптимизации других программ. Он также придумал Swift программирование для Apple, которое позволяет разработчикам писать свои собственные приложения для операционной системы iOS от Apple.

Джереми Ховард, почетный профессор компьютерных наук в Университете Квинсленда, Австралия, и сооснователь fast.ai, компании, которая предоставляет бесплатные курсы программирования и библиотеку программного обеспечения для приложений глубокого обучения, говорит, что для реализации нейронных сетей, которые обрабатывают большой объем данных и, следовательно, должны работать быстро, требуется что-то лучше, чем Python. Обычно программисты пишут такие программы на языках программирования, таких как C, C++ или Rust, которые работают от 100 000 до 1 миллиона раз быстрее, чем Python, говорит Ховард, который также является консультантом Modular. “Проблема в том, что теперь вам нужно делать много других вещей, кроме того, как реализовать свою нейронную сеть. Вам нужно думать о таких вещах, как выделение памяти и ее освобождение, а также о работе со строками”, – говорит он. “Если я хочу написать что-то на C, это займет в разы больше времени, чем написание на Python”.

Кроме того, графические процессоры (GPU) и процессоры тензорных операций (TPU) могут выполнять программы на основе C намного быстрее, чем центральный процессор (CPU). Однако Ховард говорит, что написание кода на C для GPU или TPU сложнее, чем для CPU. “Теперь мы говорим о медленности разработки еще на пару порядков”. Хотя библиотеки могут предоставлять код для ускорения разработки, они ограничены операциями, которые уже создали другие люди, что может подавить инновации, аргументирует Ховард.

Это уже достаточно сложные задачи для компьютерных программистов, говорит он, но для этого нужен язык, который может использоваться обычными людьми, как Python. “Все больше и больше кода не пишется компьютерными программистами. Он пишется докторами, журналистами, химиками и геймерами”, – говорит Ховард. “Все ученые-данные пишут код, но очень немногие из них считают себя профессиональными компьютерными программистами”.

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

Одним из факторов, замедляющих работу Python, является его Глобальная Интерпретаторская Блокировка, которая позволяет выполнять только один поток за раз. Это имело смысл, когда Python был создан в начале 1990-х годов, – говорит Ховард, – потому что у большинства людей был только одноядерный процессор для работы. Хотя есть возможность создавать некоторые параллельные процессы в Python, это неудобно и Python не может эффективно использовать несколько потоков, поэтому не может полностью использовать доступное оборудование. “В телефоне может быть восемь ядер процессора. Современный настольный компьютер может иметь, например, 16 ядер. Если вы можете использовать только одно из них, это означает, что вы получаете 1/16 вычислительной мощности системы”, – говорит Латтнер.

Кроме того, говорит он, “использование компилятора вместо интерпретатора позволяет избежать значительных накладных расходов”. Это позволяет программе работать в 10-20 раз быстрее, не изменяя код. Другие изменения позволяют программам работать сотни или тысячи раз быстрее, чем в Python. Компания использовала Mojo для создания множества Мандельброта, геометрической формы, которая имеет одну и ту же геометрию на разных масштабах. Хотя это не практическое применение, оно служит опорным значением, и Mojo смог создать это множество в 35 000 раз быстрее, чем Python.

Наверх

Дополнительные типы

Поскольку Python имеет динамическую типизацию, типы не проверяются до времени выполнения, а не во время компиляции кода, что делает программу медленнее. Mojo позволяет разработчикам продолжать использовать динамическую типизацию, если они хотят, но также предоставляет возможность статической типизации. “Статическое поведение хорошо, потому что это приводит к повышению производительности. Статическое поведение также хорошо, потому что это приводит к большему количеству правильности и гарантий безопасности”, – говорит Латтнер.

Одним из нововведений, которое он добавил, является автоматическая настройка, при которой программист указывает диапазон значений для различных аспектов программы. Например, они могут указать, что плитка может иметь размер 2, 4, 8 или 16, или что конкретная функция может быть реализована несколькими разными методами. Затем компилятор реализует все различные комбинации этих переменных и запускает их, чтобы узнать, какая из них самая быстрая. Таким образом, программа может быть автоматически оптимизирована под конкретное оборудование, на котором она должна работать.

Гвидо ван Россум, программист, создавший Python и известный как “благосклонный диктатор на всю жизнь” языка, пока они не отошли от этой роли в 2018 году, говорит, что интересно наблюдать, как развивается Mojo и сможет ли он достичь высоких целей, которые ставит Латтнер. “Если вы услышите, как Крис говорит об этом, Mojo предназначен стать полной надмножеством Python, где каждый раз, когда вы пишете просто код Python, он будет выполняться в Mojo точно так же, как в Python, но намного быстрее”. Он пока не уверен, сможет ли Mojo добиться этого, но подчеркивает, что язык находится на ранних стадиях развития и на июль 2023 года Mojo еще не был доступен для загрузки.

Ван Россум считает, что Mojo может оказаться полезнее для опытных разработчиков, которые уже умеют писать эффективный код на C++ или Rust. “Человек, который только начинает использовать Python, не сможет вдруг написать такой тип кода Mojo, который будет работать намного быстрее, чем в Python,” – говорит он.

В мае Modular сделала Mojo доступным для некоторых пользователей в блокноте Jupyter, интерактивной среде разработки, позволяющей взаимодействовать с кодом. Компания заявила, что ожидает разрешить загрузку осенью 2023 года (он был выпущен локально для Linux в сентябре и для MacOS в октябре), возможно, с полным выпуском летом 2024 года.

Латтнер говорит, что в Mojo могут быть части Python, которые не работают, но они будут незначительными. Он говорит, что Mojo относится к Python так же, как C++ относится к C, – с добавлением таких элементов, как классы и шаблоны, которые превратили C в язык более высокого уровня. “Существуют программы, которые вы можете написать на C, которые не работают так же или даже не компилируются на C++, но они настолько микроскопические, что это не имеет значения. То же самое верно и для Mojo”, – говорит он. “Наша цель – быть как можно совместимее во всех из тех случаев, которые имеют значение, и убедиться, что мы работаем с существующей экосистемой, потому что мы не хотим сломать Python, мы хотим сделать Python лучше”.

Даг Мейл, программный архитектор, который писал о новых языках программирования, говорит, что Mojo по сути является Python++ для искусственного интеллекта. “Он очень старается поддержать Python и встретить людей там, где они находятся, что я считаю весьма прагматичным,” – говорит Мейл. “Они не придумывают совершенно новый синтаксис, а он будет работать намного быстрее на множестве аппаратных платформ. Это действительно здорово.”

* Дополнительное чтение

Mojo: Сверхзаряженный Python для искусственного интеллекта; https://twimlai.com/podcast/twimlai/mojo-a-supercharged-python-for-ai/ .

Don, E. Введение в язык программирования Mojo для искусственного интеллекта. LogRocket. (2023); https://blog.logrocket.com/getting-started-mojo-programming-language/ .

Loy, J. Как создать свою собственную нейронную сеть с нуля на Python. Towards Data Science. (14 мая 2018); https://towardsdatascience.com/how-to-build-your-own-neural-network-from-scratch-in-python-68998a08e4f6 .

Meil, D. Почему существует так много языков программирования? BLOG@CACM. (5 июля 2022); https://cacm.acm.org/blogs/blog-cacm/262424-why-are-there-so-many-programming-languages/fulltext .

Yegulalp, S. Первый взгляд на язык программирования Mojo. InfoWorld. (7 июня 2023); https://www.infoworld.com/article/3697739/a-first-look-at-the-mojo-language.html .

Наверх

Автор

Нил Сэвидж – писатель по науке и технологиям, базирующийся в Лоуэлле, Массачусетс, США.

©2023 ACM  0001-0782/23/12

Разрешается создавать цифровые или печатные копии части или всей этой работы для личного или классного использования без оплаты, при условии, что копии не сделаны или распространены в коммерческих целях и что на копиях есть это замечание и полное цитирование на первой странице. Авторские права на составные части этой работы, принадлежащие другим лицам, кроме ACM, должны быть соблюдены. Аннотация с указанием авторства разрешена. Для копирования в противном случае, для перепубликации, для размещения на серверах или для перераспространения в списках необходимо получить предварительное разрешение и/или сбор сбора. Запрос разрешения на публикацию у или по факсу (212) 869-0481.

Цифровая библиотека издается Ассоциацией вычислительной техники. Авторские права © 2023 ACM, Inc.