swift
January 17, 2021

Почему Swift станет следующим большим языком для Deep Learning

Если вы занимаетесь deep learning, возможно стоит задуматься о том, чтобы изучить Swift.

Данная статья является адаптацией другой статьи (доступной на английском языке), которую я прикреплю в конце.

Введение

Если вы занимаетесь программированием, то, возможно, когда вы слышите слово "Swift", то думаете о разработке мобильных приложений для iOS или MacOS. Но если вы занимаетесь deep learning, тогда вы скорее всего слышали о Swift для TensorFlow (сокращенно S4TF). Теперь вы спросите себя: "Зачем Google создавать версию TensorFlow для Swift? Ведь есть же версии для Python и C++; зачем добавлять еще один язык?". В этой статье я постараюсь ответить на эти вопросы, а также обозначить причины, по которым вам следует внимательно следить за S4TF, а также за самим языком Swift.

Цель этой статьи не в подробных объяснениях, а в предоставлении общего обзора с большим количеством ссылок, чтобы вы могли пойти и копнуть глубже, если вам это интересно.

🧠 Swift имеет сильную поддержку

Swift был создан Крисом Латтнером в то время, когда он работал в Apple. После этого, Крис работал в Google Brain, одной из самых лучших исследовательских команд в мире в области искусственного интеллекта. Сам факт того, что создатель языка Swift работал в исследовательской лаборатории, занимающейся deep learning, говорит о том, что это серьезный проект.

Кстати, Крис еще и в Tesla работал. А с 2020 года занялся разработкой процессоров и микроконтроллеров на архитектуре RISC-V.

Некоторое время назад, в Google осознали, что хотя Python и является превосходным языком, он также имеет и много ограничений, которые трудно преодолеть. Для TensorFlow был необходим какой-то новый язык, и после долгих обсуждений, Swift был выбран в качестве кандидата. Я не буду вдаваться в подробности, но здесь есть документ, в котором описаны недостатки Python, и какие другие языки рассматривались в качестве кандидата для TensorFlow, и как в конечном итоге был выбран Swift.

💪 Swift для TensorFlow это больше чем просто библиотека

Swift для TensoFlow – это не просто «TF для другого языка». По сути, это еще одна ветка (в смысле git'a) самого языка Swift. Это означает, что S4TF не является библиотекой. Это самостоятельный язык со своими фичами, построенный таким образом, чтобы поддерживать ту функциональность, которая необходима для TensorFlow. Например, в S4TF есть мощная система автоматического дифференцирования, которая является одной из основ deep learning, необходимая для расчета градиентов. Сравните это с Python, где автоматическое дифференцирование вообще не является частью языка. Некоторые из тех функций, которые изначально разрабатывались как часть S4TF, позже были интегрированы в сам Swift.

⚡️Swift быстрый

Когда я впервые узнал, что Swift работает так же быстро, как C, я был поражен. Я уже знал, что C хорошо оптимизирован и позволяет достичь очень высокой скорости, но это происходит за счет микро-менеджмента памяти, что приводит к тому, что C не является безопасным, с точки зрения доступа к памяти, языком. Кроме того, C – это точно не тот язык, который очень легко выучить.

В настоящее время, Swift в численных расчетах работает так же быстро как и C, и у него нет проблем с безопасным доступом к памяти, и, что немаловажно, его гораздо проще выучить. А LLVM компилятор (на котором и построен Swift), очень мощный и имеет очень эффективную оптимизацию, гарантирующую, что ваш код будет работать очень быстро.

📦 Вы можете использовать библиотеки Python, C и C++ в Swift

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

Подводя итог, если вам нужна конкретная функциональность, но она пока еще не реализована в Swift, вы можете импортировать соответствующий пакет Python, C или C ++. Впечатляет!

⚙️ Swift может быть очень низкоуровневым

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

В Swift все по-другому. Крис Латтнер назвал Swift «синтаксическим сахаром для компилятора LLVM». Это означает, что Swift находится практически на уровне железа, и между ним и TF нет никаких других слоев кода, написанного на C. Это также означает, что Swift работает очень быстро, как это и было описано выше. Все это приводит к тому, что вы, как разработчик, можете проверять код с очень высокого до очень низкого уровня без необходимости углубляться в C.

📈 А дальше?

Swift – это лишь небольшая часть инноваций в области deep learning, происходящих в Google. Есть еще одна вещь, которая очень тесно с этим связана: MLIR, что означает Multi-Level Intermediate Representation. MLIR будет объединяющей инфраструктурой компилятора Google, позволяющей писать код на Swift (или на любом другом поддерживаемом языке) и компилировать его под любое поддерживаемое оборудование. В настоящее время существует множество компиляторов для различного оборудования, но MLIR изменит это, позволяя не только повторно использовать код, но и писать собственные низкоуровневые компоненты компиляторов. Это также позволит исследователям применять машинное обучение для оптимизации некоторых низкоуровневых алгоритмов.

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

Представьте себе возможность использовать deep learning, чтобы помочь оптимизировать алгоритмы низкоуровневой памяти для данных (задача, аналогичная той, что пытается выполнить Halide). Более того, это всего лишь начало, будут и другие, более творческие применения машинного обучения в компиляторах!

Подведем итоги

Если вы занимаетесь deep learning, то вам, вероятно, стоит начать изучать Swift. Это даст много преимуществ по сравнению с тем же Python. Google вкладывает огромные средства в превращение Swift в ключевую компоненту своей инфраструктуры TensorFlow ML, и весьма вероятно, что Swift станет языком deep learning. Раннее знакомство с языком Swift даст вам некоторое преимущество первопроходца.

Оригинальная статья на английском.

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


Статья подготовлена для канала Hello World.