Microsoft Azure
Облачный бизнес
Вам понадобится

Microsoft Azure

Попробуйте платформу Microsoft Azure совершенно бесплатно.

Visual Studio

Бесплатная версия Visual Studio, позволяющая создавать приложения для платформы Microsoft Azure.

SDKs и дополнительные
инструменты

Инструменты разработки приложений для платформы Microsoft Azure.

Сравнение фреймворков для символьного глубокого обучения

Дата публикации: 13.12.2016

В данной статье описан выбор фреймворка с отрытым кодом для символьного глубокого обучения, между MXNET, TensorFlow, Theano.



Символьные фреймворки

Фреймворки для символьных вычислений ( MXNET TensorFlow Theano) характеризуются символьными графами векторных операций, таких как матричное сложение/умножение или свертка. Слой является просто набором таких операций. Благодаря разделению на небольшие составные компоненты (операции) пользователи могут создавать новые сложные типы слоев без использования низкоуровневых языков (как в  Caffe).

У меня есть опыт использования различных фреймворков для символьных вычислений. Как оказалось, в устройстве и текущей реализации у них у всех есть как преимущества, так и недостатки, но ни один из них не отвечает в полной мере всем требованиям. Однако в данный момент я отдаю предпочтение Theano.

Далее мы сравним перечисленные фреймворки для символьных вычислений.

ХарактеристикаTheanoTensorFlowMXNET
Программное обеспечениеTheanoTensorFlowMXNET
АвторМонреальский университетКоманда Google BrainСообщество Distributed (Deep) Machine Learning Community
Лицензия на программное обеспечениеЛицензия BSDApache 2.0Apache 2.0
Открытый исходный кодДаДаДа
ПлатформаКросс-платформенное решениеLinux, Mac OS X, планируется поддержка WindowsUbuntu, OS X, Windows, AWS, Android, iOS, JavaScript
Язык программированияPythonC++, PythonC++, Python, Julia, Matlab, R, Scala
ИнтерфейсPythonC/C++, PythonC++, Python, Julia, Matlab, JavaScript, R, Scala
Поддержка CUDAДаДаДа
Автоматическое дифференцированиеДаДаДа
Наличие предварительно обученных моделейС помощью model zoo в LasagneНетДа
Рекуррентные сетиДаДаДа
Сверточные сетиДаДаДа
Ограниченные машины Больцмана/глубокие сети доверияДаДаДа


Сравнение символьных и несимвольных фреймворков

Несимвольные фреймворки

Преимущества:

  • Несимвольные (императивные) фреймворки нейронных сетей, такие как  torch и  caffe, как правило, имеют очень похожее устройство вычислительной части.
  • С точки зрения выразительности императивные фреймворки устроены достаточно неплохо, в них может быть интерфейс на основе графов (например,  torch/nngraph).


Недостатки:

  • Основным недостатком императивных фреймворков является оптимизация вручную. Например, операции на месте требуется реализовать вручную.
  • Большинство императивных фреймворков проигрывают символьным по выразительности.


Символьные фрейморки


Преимущества:


  • В символьных фреймворках возможна автоматическая оптимизация на основе графов зависимостей.
  • В символьных фреймворках можно получить гораздо больше возможностей многократного использования памяти. Например, это прекрасно реализовано в MXNET.
  • Символьные фреймворки могут автоматически вычислять оптимальный график. Подробнее можно узнать  здесь.


Недостатки:

  • Доступные символьные фреймворки с открытым исходным кодом пока еще недостаточно развиты и уступают императивным по производительности.



Добавление новых операций

Во всех этих фреймворках добавление операций с сохранением приемлемой производительности весьма непросто.

Theano/MXNETTensorFlow
Можно добавлять операции на Python с поддержкой встроенных операторов C.Forward на C++, symbolic gradient на Python.



Многократное использование кода

Для обучения глубоких сетей требуется немало времени. Поэтому Caffe выпустили несколько заранее обученных моделей (model zoo), которые можно было бы использовать в качестве изначальных образцов при передаче обучения или при тонкой настройке глубоких сетей для определенных областей знаний или пользовательских образов.

TheanoTensorFlowMXNET
Lasagne — высокоуровневая платформа на основе Theano. В Lasagne очень просто использовать заранее обученные модели CaffeНет поддержки заранее обученных моделейВ MXNET предусмотрен инструмент  caffe_converter, предназначенный для преобразования заранее обученных моделей caffe в формат MXNET



Низкоуровневые операторы Tensor

Достаточно эффективная реализация низкоуровневых операторов: их можно использовать в качестве составных компонентов при создании новых моделей, не затрачивая усилия на написание новых операторов.

TheanoTensorFlowMXNET
Множество простых операцийВполне хорошоОчень мало



Операторы управления потоком

Операторы управления потоком повышают выразительность и универсальность символьной системы.

TheanoTensorFlowMXNET
ПоддерживаютсяВ формате экспериментаНе поддерживаются



Высокоуровневая поддержка

TheanoTensorFlowMXNET
«Чистый» символьный вычислительный фреймворк. Можно создавать высокоуровневые платформы в соответствии с требованиями. Среди успешных примеров —  Keras Lasagne blocksНеплохое устройство с точки зрения обучения нейронных сетей, но при этом данный фреймворк не ориентирован исключительно на нейронные сети, что очень хорошо. Можно использовать коллекции графовочередии дополнения образов в качестве составных компонентов для высокоуровневых оболочекПомимо символьной части, в MXNET также предусмотрены все необходимые  компонентыдля классификации образов, от загрузки данных до построения моделей с методами для начала обучения.



Производительность

Измерение производительности Single-GPU

В моих тестах производительность модели LeNet для набора данных MNIST измерена для конфигурации с одним графическим процессором (GPU NVIDIA Quadro K1200).

TheanoTensorFlowMXNET
ОтличноСреднеПревосходно



Память

Объем памяти GPU ограничен, поэтому использование для больших моделей может быть проблематично.

TheanoTensorFlowMXNET
ОтличноСреднеПревосходно



Скорость Single-GPU
Theano очень долго компилирует графы, особенно в сложных моделях. TensorFlow еще немного медленнее.

Theano/MXNETTensorFlow
Сравнимо с CuDNNv4Примерно вдвое медленнее


Поддержка параллельных и распределенных вычислений

TheanoTensorFlowMXNET
Экспериментальная поддержка Multi-GPUMulti-GPUРаспределенная



Заключение

Theano (с высокоуровневыми решениями Lasagne и Keras) — это отличный выбор для моделей глубокого обучения. С помощью Lasagne/Keras очень просто создавать новые сети и изменять существующие. Я предпочитаю Python, поэтому выбираю Lasagne/Keras благодаря очень развитому интерфейсу Python. Впрочем, эти решения не поддерживают R. Возможности передачи обучения и тонкой настройки в Lasagne/Keras показывают, что там очень просто модифицировать существующие сети, а также настраивать под предметно-ориентированные пользовательские данные.

После сравнения фреймворков можно сделать вывод, что самым оптимальным решением будет MXNET (более высокая производительность, эффективное использование памяти). Кроме того, в нем отличная поддержка R. Собственно говоря, это единственная платформа, в которой  поддерживаются все функции на R. В MXNET передача обучения и тонкая настройка сетей возможны, но выполнять их довольно сложно (по сравнению с Lasagne/Keras). Из-за этого будет сложно не только модифицировать существующие сети обучения, но и настраивать под предметно-ориентированные пользовательские данные.

Автор статьи: Anusua Trivedi.

Данный материал написан участником сообщества. В статье представлено мнение автора, которое может не совпадать с мнением корпорации Microsoft. Microsoft не несет ответственности за проблемы в работе аппаратного или программного обеспечения, которые могли возникнуть после использования материалов данной статьи.