Swift для TensorFlow был экспериментом на платформе нового поколения для машинного обучения, включающим в себя последние исследования в области машинного обучения, компиляторов, дифференцируемого программирования, проектирования систем и т. Д. Он был заархивирован в феврале 2021 года. Некоторые важные достижения этого проекта включают:
- В язык Swift добавлено интегрированное дифференцируемое программирование . Эта работа продолжается в официальном компиляторе Swift.
- Разработал API глубокого обучения, ориентированный на изменяемую семантику.
- Содействовал созданию модельного сада с более чем 30 моделями из различных дисциплин глубокого обучения .
- Включены новые исследования, сочетающие глубокое обучение с вероятностными графическими моделями для трехмерного отслеживания движения и не только.
- Работает на (почти) чистом Swift прототипе среды выполнения GPU + CPU, поддерживающей pmap .
- Выделяется из нескольких сторонних проектов с открытым исходным кодом, которые продолжают активно развиваться:
- PythonKit : совместимость Python со Swift.
- swift-jupyter : позволяет использовать Swift в записных книжках Jupyter.
- swift-benchmark : предоставляет надежный набор тестов для кода Swift.
- Выдвинул несколько других проектов с открытым исходным кодом:
- пингвин : параллельное программирование, структуры данных, алгоритмы графов и многое другое.
- Тензоры идеально подходят : статический анализ несовпадений форм тензоров.
- Предложены и реализованы предложения быстрой эволюции:
Этот сайт не будет получать дальнейших обновлений. Документация по API и файлы для загрузки будут по-прежнему доступны, как и записи собрания Open Design Review .
Быстрый
Swift - это язык программирования общего назначения с открытым исходным кодом , который имеет большую и постоянно растущую базу пользователей. Мы выбрали Swift, потому что он имеет открытый процесс проектирования и по определенным техническим причинам, подробно описанным в документе « Почему Swift для TensorFlow ». Мы предполагаем, что большинство читателей не знакомы с ним, поэтому мы кратко коснемся некоторых дополнительных важных вещей здесь.
Разработка Swift началась в 2010 году и была направлена на объединение лучших практик проектирования языков программирования в одну систему, а не на попытки академической новизны или религиозного распространения методологий программирования. В результате он поддерживает разработку нескольких парадигм (например, функциональную, ООП, универсальную, процедурную и т. Д.) В одной системе и приносит много хорошо известных концепций из академических языков (например, сопоставление с образцом , алгебраические типы данных и классы типов) в авангарде. Вместо того, чтобы настоятельно рекомендовать разработчикам переписывать весь свой код на Swift, он прагматично фокусируется на взаимодействии с другими языками, например, позволяя вам напрямую импортировать файлы заголовков C и использовать их без FFI и (теперь) возможность использовать API Python без оболочек. .
Swift ставит перед собой смелую цель - охватить весь путь от системного программирования низкого уровня до написания сценариев высокого уровня с упором на простоту изучения и использования . Поскольку Swift должен быть простым в изучении и использовании, но также и мощным, он основан на принципе постепенного раскрытия сложности , который агрессивно переносит стоимость сложности на людей, которые извлекают выгоду из этой сложности. «Ощущение языка сценариев» в сочетании с высокой производительностью очень полезно для машинного обучения.
Последний важный аспект дизайна Swift заключается в том, что большая часть языка Swift фактически реализована в его стандартной библиотеке. «Встроенные» типы, такие как Int и Bool , на самом деле являются просто структурами, определенными в стандартной библиотеке, которые охватывают магические типы и операции. Поэтому иногда мы шутим, что Swift - это просто «синтаксический сахар для LLVM».
В Swift есть еще много чего классного, и в Интернете доступно огромное количество контента. Если вам интересно узнать больше об общих концепциях программирования Swift, вот несколько ссылок, чтобы начать работу:
- Swift Tour - это беглый обзор синтаксиса высокого уровня и ощущений от Swift, который является частью большой книги «Язык программирования Swift».
- Семантика значений является мощной и играет важную роль в коде Swift, как описано в разделе « Создание лучших приложений с типами значений в Swift » [ YouTube ].
- Swift поддерживает классическое ООП, но адаптировал идеи из системы типов Haskell. Это объясняется в « Протоколно-ориентированном программировании в Swift » [ YouTube ].
Одно предупреждение: Swift быстро развивался в первые годы своего существования, поэтому вы должны быть осторожны с любыми вещами до Swift 3 (выпущенного в 2016 году).
Почему Swift для TensorFlow?
Swift для TensorFlow - это новый способ разработки моделей машинного обучения. Это дает вам возможности TensorFlow, напрямую интегрированные в язык программирования Swift . Мы считаем, что парадигмы машинного обучения настолько важны, что заслуживают первоклассной поддержки языка и компилятора .
Фундаментальным примитивом в машинном обучении является оптимизация на основе градиента: вычисление производных функций для оптимизации параметров. С Swift для TensorFlow вы можете легко дифференцировать функции, используя дифференциальные операторы, такие как gradient(of:)
, или дифференцировать по всей модели, вызывая метод gradient(in:)
. Эти API-интерфейсы дифференциации доступны не только для концепций, связанных с Tensor
- они обобщены для всех типов, которые соответствуют протоколу Differentiable
, включая Float
, Double
, SIMD-векторы и ваши собственные структуры данных.
// Custom differentiable type.
struct Model: Differentiable {
var w: Float
var b: Float
func applied(to input: Float) -> Float {
return w * input + b
}
}
// Differentiate using `gradient(at:_:in:)`.
let model = Model(w: 4, b: 3)
let input: Float = 2
let (𝛁model, 𝛁input) = gradient(at: model, input) { model, input in
model.applied(to: input)
}
print(𝛁model) // Model.TangentVector(w: 2.0, b: 1.0)
print(𝛁input) // 4.0
Помимо производных, проект Swift для TensorFlow поставляется со сложной цепочкой инструментов, позволяющей повысить продуктивность пользователей. Вы можете запускать Swift в интерактивном режиме в записной книжке Jupyter и получать полезные предложения по автозаполнению, которые помогут вам изучить обширную поверхность API современной библиотеки глубокого обучения. Вы можете начать работу прямо в браузере за секунды !
Переход на Swift для TensorFlow действительно прост благодаря мощной интеграции Swift с Python. Вы можете постепенно переносить свой код Python (или продолжать использовать свои любимые библиотеки Python), потому что вы можете легко вызвать свою любимую библиотеку Python со знакомым синтаксисом:
import TensorFlow
import Python
let np = Python.import("numpy")
let array = np.arange(100).reshape(10, 10) // Create a 10x10 numpy array.
let tensor = Tensor<Float>(numpy: array) // Seamless integration!