Apache MXNet - Введение
В этой главе освещаются функции Apache MXNet и рассказывается о последней версии этой программной среды глубокого обучения.
Что такое MXNet?
Apache MXNet - это мощный программный фреймворк с открытым исходным кодом, помогающий разработчикам создавать, обучать и развертывать модели глубокого обучения. В последние несколько лет, от здравоохранения до транспорта и производства, и, по сути, во всех аспектах нашей повседневной жизни, глубокое обучение получило широкое распространение. В настоящее время компании стремятся к глубокому обучению для решения некоторых сложных проблем, таких как распознавание лиц, обнаружение объектов, оптическое распознавание символов (OCR), распознавание речи и машинный перевод.
Вот почему Apache MXNet поддерживается:
Некоторые крупные компании, такие как Intel, Baidu, Microsoft, Wolfram Research и т. Д.
Поставщики общедоступных облаков, включая Amazon Web Services (AWS) и Microsoft Azure
Некоторые крупные исследовательские институты, такие как Карнеги-Меллон, Массачусетский технологический институт, Вашингтонский университет и Гонконгский университет науки и технологий.
Почему Apache MXNet?
Существуют различные платформы глубокого обучения, такие как Torch7, Caffe, Theano, TensorFlow, Keras, Microsoft Cognitive Toolkit и т. Д., Тогда вы можете задаться вопросом, почему Apache MXNet? Давайте посмотрим на некоторые из причин этого:
Apache MXNet решает одну из самых больших проблем существующих платформ глубокого обучения. Проблема в том, что для использования платформ глубокого обучения необходимо изучить другую систему для другого типа программирования.
С помощью Apache MXNet разработчики могут использовать все возможности графических процессоров, а также облачные вычисления.
Apache MXNet может ускорить любые численные вычисления и уделяет особое внимание ускорению разработки и развертывания крупномасштабных DNN (глубоких нейронных сетей).
Он предоставляет пользователям возможности как императивного, так и символьного программирования.
Различные функции
Если вы ищете гибкую библиотеку глубокого обучения для быстрой разработки передовых исследований глубокого обучения или надежную платформу для увеличения рабочей нагрузки, ваш поиск заканчивается на Apache MXNet. Это связано со следующими его особенностями:
Распределенное обучение
Будь то обучение с несколькими графическими процессорами или несколькими хостами с почти линейной эффективностью масштабирования, Apache MXNet позволяет разработчикам максимально эффективно использовать свое оборудование. MXNet также поддерживает интеграцию с Horovod, который представляет собой распределенную среду глубокого обучения с открытым исходным кодом, созданную в Uber.
Для этой интеграции используются следующие распространенные распределенные API, определенные в Horovod:
horovod.broadcast()
horovod.allgather()
horovod.allgather()
В связи с этим MXNet предлагает нам следующие возможности:
Device Placement - С помощью MXNet мы можем легко указать каждую структуру данных (DS).
Automatic Differentiation - Apache MXNet автоматизирует дифференциацию, т.е. производные вычисления.
Multi-GPU training - MXNet позволяет нам достичь эффективности масштабирования с количеством доступных графических процессоров.
Optimized Predefined Layers - Мы можем кодировать наши собственные слои в MXNet, а также оптимизировать предопределенные слои для скорости.
Гибридизация
Apache MXNet предоставляет своим пользователям гибридный интерфейс. С помощью API Gluon Python он может преодолеть разрыв между его императивными и символическими возможностями. Это можно сделать, назвав его функциональностью гибридизации.
Более быстрые вычисления
Линейные операции, такие как умножение десятков или сотен матриц, являются вычислительным узким местом для глубоких нейронных сетей. Для устранения этого узкого места MXNet предоставляет -
Оптимизированные численные вычисления для графических процессоров
Оптимизированные численные вычисления для распределенных экосистем
Автоматизация общих рабочих процессов, с помощью которой можно кратко выразить стандартную NN.
Языковые привязки
MXNet имеет глубокую интеграцию с языками высокого уровня, такими как Python и R. Он также обеспечивает поддержку других языков программирования, таких как:
Scala
Julia
Clojure
Java
C/C++
Perl
Нам не нужно изучать какой-либо новый язык программирования. MXNet в сочетании с функцией гибридизации обеспечивает исключительно плавный переход от Python к развертыванию на языке программирования по нашему выбору.
Последняя версия MXNet 1.6.0
Apache Software Foundation (ASF) выпустила стабильную версию 1.6.0 Apache MXNet 21 февраля 2020 года под лицензией Apache License 2.0. Это последний выпуск MXNet, поддерживающий Python 2, поскольку сообщество MXNet проголосовало за прекращение поддержки Python 2 в следующих выпусках. Давайте рассмотрим некоторые из новых функций, которые этот выпуск предлагает своим пользователям.
NumPy-совместимый интерфейс
Благодаря своей гибкости и универсальности NumPy широко используется практиками машинного обучения, учеными и студентами. Но поскольку мы знаем, что в наши дни аппаратные ускорители, такие как графические процессоры (GPU), все больше ассимилируются в различные наборы инструментов для машинного обучения (ML), пользователям NumPy, чтобы воспользоваться скоростью графических процессоров, необходимо переключиться на новые фреймворки. с другим синтаксисом.
С MXNet 1.6.0 Apache MXNet движется в сторону программирования, совместимого с NumPy. Новый интерфейс обеспечивает эквивалентное удобство использования, а также выразительность для практиков, знакомых с синтаксисом NumPy. Наряду с этим MXNet 1.6.0 также позволяет существующей системе Numpy использовать аппаратные ускорители, такие как графические процессоры, для ускорения крупномасштабных вычислений.
Интеграция с Apache TVM
Apache TVM, стек компилятора сквозного глубокого обучения с открытым исходным кодом для аппаратного обеспечения, такого как процессоры, графические процессоры и специализированные ускорители, призван заполнить пробел между ориентированными на производительность средами глубокого обучения и ориентированными на производительность аппаратными механизмами. . В последней версии MXNet 1.6.0 пользователи могут использовать Apache (инкубирующий) TVM для реализации высокопроизводительных ядер операторов на языке программирования Python. Два основных преимущества этой новой функции следующие:
Упрощает прежний процесс разработки на C ++.
Позволяет использовать одну и ту же реализацию на нескольких аппаратных серверах, таких как процессоры, графические процессоры и т. Д.
Улучшения существующих функций
Помимо перечисленных выше функций MXNet 1.6.0, он также обеспечивает некоторые улучшения по сравнению с существующими функциями. Улучшения заключаются в следующем -
Группировка поэлементных операций для GPU
Как мы знаем, производительность поэлементных операций зависит от пропускной способности памяти, и поэтому объединение таких операций в цепочку может снизить общую производительность. Apache MXNet 1.6.0 выполняет поэлементное объединение операций, которое фактически генерирует своевременные объединенные операции, когда и когда это возможно. Такое поэлементное слияние операций также снижает потребности в хранении и улучшает общую производительность.
Упрощение общих выражений
MXNet 1.6.0 устраняет избыточные выражения и упрощает общие выражения. Такое улучшение также улучшает использование памяти и общее время выполнения.
Оптимизация
MXNet 1.6.0 также обеспечивает различные оптимизации существующих функций и операторов, а именно:
Автоматическая смешанная точность
Gluon Fit API
MKL-DNN
Поддержка большого тензора
TensorRT интеграция
Поддержка градиента высшего порядка
Operators
Профилировщик производительности оператора
ONNX импорт / экспорт
Улучшения API Gluon
Улучшения в API символов
Более 100 исправлений ошибок