Сравнение фреймворков для глубокого обучения: TensorFlow, PyTorch, Keras, MXNet, Microsoft Cognitive Toolkit, Caffe, etc

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Всем привет. В этот пятничный день делимся с вами первой публикацией посвященной запуску курса «Data Scientist». Приятного прочтения. Великое множество организаций загорелось идеей использовать в своих решениях искусственный интеллект для расширения масштабов деятельности или развития своего старт-апа, однако нужно понимать одну важную вещь: выбранная технология разработки должна идти вкупе с хорошим фреймворком для глубокого обучения, особенно потому, что каждый фреймворк служит для какой-то своей отдельной цели. Поиск идеального тандема в этом случае – это необходимое условие для плавного и быстрого развития бизнеса и успешного развертывания проектов.

Следующий список фреймворков для глубокого обучения может стать подспорьем в процессе выбора подходящего средства для решения конкретных задач, с которыми вы сталкиваетесь в процессе работы над проектом. Вы сможете сравнить плюсы и минусы различных решений, оценить их пределы возможностей и узнать о лучших вариантах использования для каждого решения! 1. Tensorflow

Созданная Google и написанная на Python и C++, TensorFlow является одной из лучших открытых библиотек для численных вычислений. Она просто обязана быть хорошей, поскольку даже такие гиганты как DeepMind, Uber, AirBnB или Dropbox выбрали этот фреймворк для своих нужд.

TensorFlow хороша для сложных проектов, таких как создание многослойных нейронных сетей. Она используется для распознавания голоса или картинок и приложений для работы с текстом, таких как Google Translate, например.

Конечно же, эксперты назвали множество ее плюсов:

  • Для нее написано большое количество руководств и документации;
  • Она предлагает мощные средства мониторинга процесса обучения моделей и визуализации (Tensorboard);
  • Она поддерживается большим сообществом разработчиков и техническими компаниями;
  • Она обеспечивает обслуживание моделей;
  • Она поддерживает распределенное обучение;
  • TensorFlow Lite обеспечивает вывод на устройства с низкой задержкой для мобильных устройств;

И минусов:

Она проигрывает по скорости работы в эталонных тестах, в сравнении с CNTK и MXNet, например; Она имеет более высокий входной порог для начинающих, чем PyTorch или Keras. Голая Tensorflow достаточно низкоуровневая и требует много шаблонного кода, и режим «определить и запустить» для Tensorflow значительно усложняет процесс дебага.
Есть и еще одно значительное ограничение: единственный полностью поддерживаемый язык – Python.

2. PyTorch

PyTorch является преемником Python для библиотеки Torch, написанной на Lua, и большим конкурентом TensorFlow. Он был разработан Facebook и использовался Twitter, Salesforce, Оксфордским Университетом и многими другими компаниями.

PyTorch используется в основном, чтобы обучать модели быстро и эффективно, поэтому это выбор большого количества разработчиков. У него есть множество важных преимуществ:

  • Благодаря архитектуре фреймворка, процесс создания модели достаточно прост и прозрачен;
  • Режим по умолчанию “define-by-run” – отсылка к традиционному программированию. Фреймворк поддерживает популярные инструменты для дебага, такие как pdb, ipdb или дебаггер PyCharm;
  • Он поддерживает декларативный параллелизм данных;
  • Он имеет много предварительно обученных моделей и готовых модульных частей, которые легко комбинировать;

Распределенное обучение доступно с версии 0.4.

Но есть у этого фреймворка и несколько неоспоримых минусов:

  • Недостаточная поддержка моделей;
  • Он еще не готов для полноценного выхода в продакшн, однако дорожная карта к версии 1.0 выглядят действительно впечатляюще;
  • Недостает интерфейсов для мониторинга и визуализации, как TensorBoard – однако он имеет внешнее подключение к Tensorboard.


3. Keras Keras – это минималистичная библиотека, основанная на Python, которая может запускаться поверх TensoFlow, Theano или CNTK. Она была разработана инженером компании Google, Франсуа Шолле, в целях ускорения экспериментов. Keras поддерживает широкий спектр слоев нейронных сетей, таких как сверточные слои, рекуррентные или плотные.

Этот фреймворк хорош в кейсах для перевода, распознавании изображений, речи и т.п.

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

  • Прототипирование действительно быстрое и простое;
  • Он достаточно маловесный для построения моделей глубокого обучения для множества слоев;
  • Имеет полностью конфигурируемые модули;
  • Имеет простой и интуитивно-понятный интерфейс, соответственно, хорош для новичков;
  • Имеет встроенную поддержку для обучения на нескольких GPU;
  • Может быть настроен в качестве оценщиков для TensorFlow и обучен на кластерах GPU на платформе Google Cloud;
  • Запускается на Spark;
  • Поддерживает GPU от NVIDIA, TPU от Google, GPU с Open-CL, такие как AMD.

И немного недостатков:

  • Может оказаться слишком высокоуровневым и не всегда легко кастомизируется;
  • Он ограничен бэкэндами Tensorflow, CNTK и Theano.

Keras не настолько функционален как TensorFlow и дает меньше опций для управления сетевым соединением, что может стать серьезным ограничением, если вы собираетесь создать какую-то специализированную модель глубокого обучения.

4. MXNet

Это фреймворк для глубокого обучения созданный Apache, который поддерживает изобилие языков, например, Python, Julia, C++, R или JavaScript. Он применяется в Microsoft, Intel и веб-сервисах Amazon.

Фреймворк MXNet известен своей высокой масштабируемостью, поэтому он используется большими компаниями в основном для распознавания речи и почерка, NLP и прогнозирования.
У него есть множество преимуществ:

  • Он достаточно быстрый, гибкий и эффективный в вопросах работы с алгоритмами глубокого обучения;
  • Он обеспечивает продвинутую поддержку GPU;
  • Он может запускаться на любом устройстве;
  • У него есть высокопроизводительное императивное API;
  • Он обеспечивает легкую поддержку моделей;
  • Он крайне масштабируемый;
  • Он обеспечивает хорошую поддержку множества языков программирования, таких как Python, R, Scala, JavaScript и C++ и многие другие.

А теперь о недостатках MXNet:

  • Вокруг него не такое больше сообщество, как вокруг TensorFlow;
  • Не так популярен в научном сообществе.

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

5. CNTK

Сейчас этот фреймворк называется Microsoft Cognitive Toolkit. Он представляет из себя открытый фреймворк для глубокого обучения, созданный для работы с действительно большими датасетами с поддержкой Python, C++, C# и Java.

CNTK обеспечивает эффективное обучение моделей для распознавания голоса, рукописного текста и картинок, также поддерживает CNN и RNN. Она используется в Skype, Xbox и Cortana.

Как и всегда эксперты уже оценили его преимущества:

  • Показывает хорошую производительность и масштабируемость;
  • Предоставляет множество хорошо оптимизированных компонентов;
  • Предлагает поддержку Apache Spark;
  • Эффективен при использовании ресурсов;
  • Имеет простую интеграцию с Azure Cloud;

И один единственный недостаток:

  • Ограниченная поддержка сообществом.

6. Caffe и Caffe2

Caffe – это фреймворк, реализованный на C++, который имеет очень годный интерфейс Python. Он поддерживает CNN и сети прямого распространения, а также хорош для тренировки моделей (без написания лишних строк кода), обработке картинок и усовершенствования существующих нейронных сетей. С другой стороны, он не так хорошо задокументирован и его сложно компилировать. Об использовании Caffe какими-либо крупными компаниями сведений пока нет. В 2017 году компания Facebook выпустила Caffe 2, который стал настоящим преемником Caffe, и был создан как для мобильных, так и крупномасштабных разработок в производственной среде.

В Facebook он известен как, «Платформа, готовая в продакшн, (…), работающая более, чем на 1 миллиарде смартфонов, охватывающая 8 поколений IPhone и шесть поколений процессорных архитектур Android.» Этот фреймворк хорош по нескольким причинам:

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

И снова основной недостаток:

  • Ограниченная поддержка сообществом.

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

7. Deeplearning4j

Если ваш основной язык программирования Java, то вам стоит обязательно взглянуть поближе на DL4J. Это коммерческая платформа с открытым исходным кодом, написанная в основном для Java и Scala, которая предоставляет хорошую поддержку различных типов нейронных сетей (таких как CNN, RNN, RNTN, или LTSM).

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

Плюсы:

  • Надежный, гибкий и эффективный;
  • Может обрабатывать большие объемы данных без потери скорости;
  • Работает с Apache Hadoop и Spark, на распределенных CPU или GPU;
  • Имеет хорошую документацию;
  • Имеет community и enterprise версию.

Что удивительно, говоря об этом фреймворке, эксперты не фокусируются на каких-то конкретных недостатках, как допустим на всеобщем споре о пригодности Java для машинного обучения в целом. Поскольку Java не так часто используется в проектах машинного обучения, фреймворк не может полагаться на растущие базы готового кода для решения конкретных задач. В результате, затраты на ваш проект могут стать гораздо выше и решение одной задачи может значительно замедлить общий прогресс проекта.

8. Chainer

Еще один фреймворк на Python для глубокого обучения, поддерживаемый такими гигантами, как Intel, IBM, NVIDIA и AWS. Он может с легкостью задействовать несколько GPU.

Chainer используется в основном для распознавания голоса, машинного перевода и анализа тональности. Он поддерживает различные архитектуры сетей, как например CNN, fast-forward, RNN и имеет несколько важных преимуществ перед своими конкурентами:

  • Он гораздо быстрее, чем любой другой фреймворк на Python;
  • Он невероятно гибкий и интуитивно-понятный;
  • Существующие сети могут быть модифицированы прямо во время выполнения;

С другой стороны:

  • Очень сложен в плане дебага;
  • Вокруг него относительно маленькое сообщество;

Поскольку другие Python-ориентированные фреймворки гораздо популярнее, вы можете не получить такую быструю помощь, как в случае с иными фреймворками, такими как TensorFlow или PyTorch.

Подводим итоги

Выбрать лучший фреймворк для проекта с глубоким обучением может быть крайне сложно. Вам необходимо учитывать следующий факторы:

  • Тип нейронных сетей, которые вы будете разрабатывать;
  • Язык программирования, который вы используете;
  • Количество инструментов и дополнительных опций, которые вам могут понадобиться;
  • Бюджет проекта;
  • Характер и цели, которые преследует сам проект.

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

Пишите комментарии и до встречи на дне открытых дверей, который уже 19 марта проведет Александр Никитин.

Источник: habr.com

Комментарии: