Почему Swift может стать следующим важным шагом в глубоком обучении

Если вы увлекаетесь глубоким обучением, то Swift - это язык, который вам, вероятно, стоит начать изучать.

Вступление

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

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

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

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

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

Swift для TensorFlow - это не просто TF для другого языка. По сути, это еще одна ветвь (в смысле git) самого языка Swift. Это означает, что S4TF не является библиотекой; это самостоятельный язык со встроенными функциями, которые поддерживают все функции, необходимые для TensorFlow. Например, в S4TF есть очень мощная система автоматического дифференцирования, которая является одной из основ глубокого обучения, необходимого для вычисления градиентов. Сравните это с 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 находится очень близко к оборудованию, и между ними нет других слоев кода, написанного на C. Это также означает, что код Swift работает очень быстро, как было описано выше. Все это приводит к тому, что вы, как разработчик, можете проверять код с очень высокого до очень низкого уровня без необходимости углубляться в C.

📈 Что дальше

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

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

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

Резюме

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

Первоначально опубликовано на https://pechyonkin.me.