Здравствуй, Хабр! Представляю вашему вниманию перевод заинтересовавшей меня статьи «Why Swift May Be the Next Big Thing in Deep Learning» автора Max Pechyonkin, в которой автор рассуждает о языке на котором будет осуществляться глубокое обучение в ближайшие годы.

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

Вступление


Если вы занимаетесь программированием, то скорее всего когда вы слышите Swift, вы думаете о разработке приложений на IOS и MacOS. Если вы занимаетесь глубинным обучением, то вы должно быть слышали о Swift для Tensorflow(S4TF). Тогда вы можете задаться вопросом: «Почему Google создали версию TensorFlow для Swift? Ведь уже есть версии для Python и С++ то зачем еще один язык?» В этом посте, я попытаюсь ответить на этот вопрос и изложить причины почему стоит пристально следить за S4TF, а так же за самим языком Swift. Я не буду пытаться сделать подробный разбор, лишь попытаюсь описать общую картину с большим количеством ссылок, если вас заинтересует — вы можете копнуть глубже.

За Swift стоит очень сильная поддержка


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

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

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


Swift для TensorFlow это не просто TF для еще одного языка. Это по сути другая ветвь(в git смысле) языка Swift как такового. Это означает что S4TF это не библиотека; это язык со своими собственными правилами, со своими встроенными функциями которые поддерживают всю функциональность требуемую TensorFlow. Например, в S4TF есть очень мощная система автоматического дифференцирования: она является одной из фундаментальных вещей в глубинном обучении, она нужна для расчетов градиентов. Сравните это с Python, в котором автоматическая дифференциация не является основным компонентом языка. Некоторые функции разработанные первоначально как часть S4TF были позже интегрированы в сам язык Swift.

Swift быстрый


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

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

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


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

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

Swift может идти на очень низком уровне


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

В Swift же по другому. Крис Латтнер назвал Swift «синтаксическим сахаром для LLVM[язык ассемблера]». Это означает, что по сути, Swift работает практически напрямую с железом, и между нет никаких других строк кода написанных на С. Это так же означает что Swift очень быстрый, как я и описал выше. Это все приводит к тому, что вы, как разработчик можете проверить код как на очень высоком, так и на очень низком уровнях, без потребности использовать С.

Что дальше?


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

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

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

Итоги


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

Комментарии (5)


  1. lgorSL
    27.06.2019 18:16
    +1

    Прочитал их аргументы, почему выбрали swift. Убедительным не показалось. Динамическая типизация — ну ок, не подходит (хотя спорно, для каких-то применений это и плюс, python не просто так популярен). JVM языки — ну ок, не все хотят зависеть от JVM и особенностей реализации.
    Но аргументы против С++ и Раста какие-то неубедительные. Tensorflow сама по себе написана на плюсах, было бы логично их и дальше использовать, предоставляя сишное api для желающих использовать из какого угодно языка.


    1. xfaetas
      27.06.2019 21:39
      +1

      аргументы против С++ и Раста

      Среднестатистический data scientist привык к няшным Python и R. Часто требуется работать методом проб и ошибок и быстро прототипировать, для чего ни Rust, ни C++ не годятся, поскольку трудозатраты на прототипирование там запредельны.


  1. homocomputeris
    27.06.2019 18:25
    +1

    Коротко: как пайтон, но не пайтон.


    1. QtRoS
      27.06.2019 19:07

      Так это скорее про Julia, чем Swift


      1. homocomputeris
        27.06.2019 19:27

        Джулия — это матлаб, но заметно больше не матлаб, чем октав.