Черновик: Owl Scientific Computing - Draft:Owl Scientific Computing
Оригинальный автор (ы) | Лян Ван |
---|---|
Разработчики) | Общественный проект |
изначальный выпуск | 2016 |
Стабильный выпуск | 1.0.0 / 11 ноября 2020[1] .. |
Написано в | OCaml, C |
Операционная система | Кроссплатформенность |
Тип | Численный анализ |
Лицензия | Массачусетский технологический институт |
Сова Научные вычисления программный комплекс для научных и инженерных вычислений, разработанный в Департамент компьютерных наук и технологий Кембриджского университета.[2] Группа системных исследований (SRG) в отделе признает Owl одной из типичных систем, разработанных в SRG в 2010-х годах.[3]Исходный код находится под лицензией Лицензия MIT и может быть доступен из репозитория Github.[4]
Библиотека в основном спроектирована и разработана на языке функционального программирования. OCaml. Как уникальный функциональный язык программирования, OCaml предлагает эффективность выполнения, гибкую модульную систему, статическую проверку типов, интеллектуальный сборщик мусора и мощные вывод типа. Owl наследует эти функции непосредственно от OCaml. С помощью Owl пользователи могут писать сжатые числовые приложения с безопасным типом на кратком функциональном языке, не жертвуя производительностью. Это ускоряет жизненный цикл разработки и снижает стоимость от прототипа до промышленного использования. Система де-факто служит инструментом для ресурсоемких вычислений в OCaml.[5]
История
Owl был разработан, когда доктор Лян Ван работал доктором в OCaml Labs.[6]Owl возник в результате исследовательского проекта, в ходе которого в июле 2016 года изучалась конструкция синхронных параллельных машин для крупномасштабных распределенных вычислений. В то время библиотеки для численных вычислений в экосистеме OCaml были очень ограничены, а инструментарий в то время был фрагментирован. Чтобы протестировать различные аналитические приложения, необходимо реализовать множество числовых функций, от алгебры очень низкого уровня и генераторов случайных чисел до вещей высокого уровня, таких как алгоритмическое дифференцирование и глубокие нейронные сети. Эти фрагменты кода начали накапливаться. Позже эти функции были перенесены в отдельную библиотеку под названием Owl.
Архитектура Owl вначале претерпела как минимум дюжину итераций, и некоторые из архитектурных изменений довольно радикальны. После года интенсивной разработки Owl был способен выполнять множество сложных числовых задач. например классификация изображений. Доктор Лян Ван провел на CUFP 2017 учебное пособие, чтобы продемонстрировать науку о данных в OCaml.[7]В 2018 году доктор Ричард Мортье выступил с докладом о Сове в Институт Алана Тьюринга.[8]Для дальнейшего продвижения OCaml и функционального программирования в науке о данных Owl предоставляет множество учебных материалов в виде подробного руководства.[9]
Дизайн и особенности
Owl реализовал множество передовых числовых функций поверх своей реализации n-мерных массивов. По сравнению с другими числовыми библиотеками Owl уникален во многих отношениях, например Алгоритмическая дифференциация и распределенные вычисления были включены в качестве неотъемлемых компонентов в базовую систему, чтобы максимизировать производительность разработчиков. На рисунке ниже показана системная архитектура Owl с высоты птичьего полета. Подсистема в левой части - это система счисления Совы. Модули, содержащиеся в этой подсистеме, делятся на три категории.
Во-первых, основные модули содержат базовые структуры данных, то есть N-мерный массив (Ndarray) как в плотной, так и в разреженной формах. Модуль Ndarray поддерживает различные типы чисел: float32, float64, complex32, complex64, int16, int32 и т. Д. Кроме того, основной модуль предоставляет интерфейсы внешних функций для других числовых библиотек низкого уровня, таких как CBLAS и ЛАПАК. Эти библиотеки полностью связаны с модулем линейной алгебры.
Вторая категория - это классические модули аналитики. Эта часть содержит основные математические и статистические функции, линейная алгебра, регрессия, оптимизация, построение графиков и т. д. Расширенные математические и статистические функции, такие как статистическая проверка гипотез и Цепь Маркова Монте-Карло также включены. В качестве основной функции Owl предоставляет алгоритмическое дифференцирование (или автоматическое дифференцирование) и модули графа динамических вычислений.
Самый высокий уровень архитектуры Owl включает модули более сложных числовых приложений, таких как нейронная сеть, обработка естественного языка, обработка данных и т. д. Система Zoo используется для эффективного написания сценариев и совместного использования кода. Модули второй категории, особенно алгоритмическое дифференцирование, делают код на этом уровне довольно кратким.
Подсистема справа называется Подсистемой акторов, которая расширяет возможности Owl на параллельные и распределенные вычисления. Основная идея состоит в том, чтобы с минимальными усилиями преобразовать пользовательское приложение из режима последовательного выполнения в параллельный режим (с использованием различных вычислительных механизмов). Метод состоит в том, чтобы составить две подсистемы вместе с функторы для создания параллельной версии модуля, определенного в числовой подсистеме.
Помимо того, что было упомянуто на этом рисунке, в Owl есть несколько других функций. Например, JavaScript и unikernel бэкэнды, интеграция с другими фреймворками, такими как TensorFlow и PyTorch, используя графический процессор и другие фреймворки ускорителей через символьный граф и т. д.
Исследование
Проект Owl ориентирован на исследования и поддерживает исследования числовых вычислений в нескольких связанных темах. Некоторые из тем его исследований перечислены ниже.
- Синхронное параллельное распределенное машинное обучение. Owl первым предложил использовать выборку для синхронизации узлов в итеративных алгоритмах. Работа, опубликованная на arxiv, имеет твердое математическое доказательство.[10] Эта идея оказалась продвинутой и позже была предложена на ведущих конференциях по машинному обучению.[11]
- Одним из факторов, влияющих на небольшую кодовую базу Owl, является то, что она создает расширенные аналитические функции вокруг алгоритмическое дифференцирование. Эта идея также оказалась популярной и развивается в парадигму Дифференцируемое программирование. Сейчас он используется в популярных цифровых пакетах, таких как JuliaDiff.[12]
- Использование графа вычислений предлагает еще одну оптимизацию измерения для вычислений в Owl. Кроме того, граф вычислений также связывает приложение Owl и аппаратные ускорители, такие как GPU и ТПУ. Позже граф вычислений становится де-факто промежуточным представлением. Стандарты, такие как Открытый обмен нейронной сетью и Формат обмена нейронной сети теперь широко поддерживаются различными платформами глубокого обучения, такими как TensorFlow и PyTorch.
- Идея составления и обслуживания уровня обслуживания была исследована в подсистеме Zoo Owl. Прототип демонстрирует оптимизацию различных этапов разработки кода, включая составление, тестирование, распространение, проверку и развертывание. Он очень похож на более поздний MLOps концепции. В последнее время эта тема привлекает внимание на ведущих системных конференциях, таких как OSDI.[13]
В результате исследований по части этих направлений Owl выпускает несколько публикаций. В 2018 году на ACM был принят документ под названием Data Analytics Service Composition and Deployment on Edge Devices. SIGCOMM Семинар 2018 г. по аналитике больших данных и машинному обучению для сетей передачи данных.[14] Два выступления также принимаются на семинаре OCaml Международная конференция по функциональному программированию 2019, по темам численного решения обыкновенных дифференциальных уравнений,[15] и выполнение вычислений Owl на графических процессорах.[16]Стажировка в OCaml Labs исследует тему сегментация изображения и связанная с этим оптимизация памяти в Owl.[17]
Смотрите также
использованная литература
- ^ «Релизы - сарай / сова». Получено 2020-11-11 - через GitHub.
- ^ "Сова, научные вычисления для OCaml". Получено 2020-11-11.
- ^ «Группа Системных Исследований». Получено 2020-11-11.
- ^ Репозиторий Owlbarn GitHub, https://github.com/owlbarn/owl. Проверено 1 ноября 2020.
- ^ "OCamlverse: машинное обучение, научные вычисления и наука о данных". Получено 2020-11-05.
- ^ "OCaml Labs". Получено 2020-11-01.
- ^ "Сова: наука о данных в OCaml". Учебники CUFP. 2017 г.. Получено 2020-11-01.
- ^ «Дизайн функционального числового программного обеспечения». Институт Алана Тьюринга. 2018 г.. Получено 2020-11-05.
- ^ «OCaml Scientific Computing: функциональное программирование и наука о данных». Сова Команда. 2020 г.. Получено 2020-11-18.
- ^ «Вероятностная синхронная параллель». arxiv. 2017 г.. Получено 2020-11-18.
- ^ «Распределенное обучение по ненадежным сетям». Труды исследований машинного обучения. 2019 г.. Получено 2020-11-18.
- ^ "JuliaDiff". Юля. 2019 г.. Получено 2020-11-18.
- ^ «Обслуживание DNN как Clockwork: предсказуемость производительности снизу вверх». Usenix. 2020 г.. Получено 2020-11-18.
- ^ «Программа BIG-DAMA Workshop 2018». ACM. 2018 г.. Получено 2020-11-05.
- ^ "OwlDE: сделать ODE первоклассными совами". Семинар OCaml, ICFP 2019. 2019. Получено 2020-11-11.
- ^ «Выполнение вычислений совы на GPU и TPU». Семинар OCaml, ICFP 2019. 2019. Получено 2020-11-11.
- ^ "Персональная страница, Пьер Ванденхове". 2018. Получено 2020-11-05.