Можно ли использовать текущий кластер Spark для построения моделей глубокого обучения?
Можно ли анализировать терабайты данных, хранящихся в HDFS, Hive, HBase?

Мухаммад Рафай Алим, Нандита Двиведи, Киран

Погружение в BigDL от Intel

Apache Spark быстро стал популярным за последние пару лет. Это происходит из-за его простоты, скорости и поддержки, которые также называются 3 S of Spark. Многие компании использовали среды Hadoop и Spark для создания мощных конвейеров обработки данных. Эти конвейеры были созданы для предварительной обработки огромных объемов данных в распределенных кластерах и извлечения из них аналитических данных для роста бизнеса. По мере того как глубокое обучение набирало обороты благодаря высокоточным прогнозам и аналитическому потенциалу, многие компании хотели воспользоваться преимуществами моделей, которые могли бы помочь улучшить их бизнес. У Intel были такие корпоративные клиенты с огромными конвейерами данных, уже построенными и развернутыми в их кластерах Spark / Hadoop. Эти клиенты высказали несколько опасений по поводу того, как можно применять модели глубокого обучения к этим наборам данных.

1) Можно ли использовать тот же конвейер для глубокого обучения?

2) Можно ли эффективно проводить глубокое обучение для этих больших наборов данных, т. Е. Масштабное глубокое обучение?

3) Можно ли использовать существующий кластер Spark / Hadoop?

Эти вопросы возникли из-за очевидной потребности в согласованной среде, в которой можно избежать перемещения этих больших наборов данных между разными кластерами. Более того, перемещение закрытых наборов данных из уже существующей инфраструктуры может быть угрозой безопасности. Более ранние эксперименты по ответу на эти вопросы включали попытки добавить существующие фреймворки глубокого обучения к Spark, но они не были последовательными. Это привело к разработке платформы BigDL на основе Spark и, следовательно, естественному унаследованию трех S: простоты, скорости и поддержки с функциями глубокого обучения.

Библиотека BigDL

BigDL - это распределенная библиотека глубокого обучения, которая быстро начала расти в области анализа больших данных. Он изначально интегрирован с экосистемами Spark и Hadoop, поэтому поддерживает важные функции, такие как инкрементная масштабируемость, что позволяет обучать модели в любом количестве кластеров в зависимости от размера данных. Он обеспечивает поддержку для создания конвейера сквозной аналитики данных, глубокого обучения и искусственного интеллекта. Он выполняет распределенное обучение с параллельными данными для достижения высокой масштабируемости. Поскольку это выпуск с открытым исходным кодом, пользователи BigDL создали множество приложений для аналитики и глубокого обучения, таких как визуальное сходство, синхронизация параметров, масштабирование и конвергенция и т. Д. На платформах Spark и Big Data.

Приложения глубокого обучения могут быть написаны как стандартная искровая программа. Эти библиотеки, объединенные в платформу Spark, могут читать большие объемы данных. Кроме того, он поддерживает библиотеки Python, такие как Numpy, Scipy, NLTK, Pandas и т. Д. Он интегрирован с TensorBoard для визуализации, а также поддерживает загрузку существующих моделей Torch. Одна из наиболее важных причин, по которой корпоративные клиенты хотят использовать BigDL и Spark, заключается в том, что помимо того факта, что BigDL быстрее, чем TensorFlow, он также позволяет им быстрее переобучать модели благодаря параллельным вычислениям.

Библиотека зоопарка Analytics

Машинное обучение в Spark все еще находится в зачаточном состоянии по сравнению с многочисленными автономными библиотеками, доступными в экосистеме Python. Большинство этих библиотек, таких как Keras, TensorFlow и PyTorch, несовместимы со Spark, поскольку они не поддерживают базовую структуру ядра Spark, которая обеспечивает распределенные вычисления. Analytics Zoo - это библиотека, разработанная Intel, которая пытается восполнить этот пробел в Spark. Он предоставляет богатый набор высокоуровневых API-интерфейсов для беспрепятственной интеграции программ BigDL, Keras и TensorFlow в конвейеры Spark. Он имеет несколько встроенных моделей глубокого обучения для обнаружения объектов, классификации изображений, классификации текста, рекомендаций и т. Д. Библиотека также предоставляет сквозные справочные сценарии использования, такие как обнаружение аномалий, обнаружение мошенничества и увеличение изображений для применения машинного обучения. реальные проблемы.

Чтобы представить вещи более перспективно, в следующем разделе представлено краткое руководство по BigDL и Analytics Zoo, показывающее, насколько легко их можно использовать для реализации трансферного обучения с использованием предварительно обученных моделей. и обучите его на кластере Spark.

Передача обучения с помощью BigDL и Analytics Zoo

В этом руководстве небольшой набор данных, содержащий изображения муравьев и пчел, используется для выполнения трансферного обучения в ResNet-50. Эта модель предварительно обучена для классификации данного изображения по одной из его 1000 меток. Трансферное обучение используется для переобучения этой модели для этого конкретного случая использования и создания прогнозов на обучающем наборе, содержащем муравьев и пчел. BigDL и Analytics Zoo позволяют пройти обучение по распределенной платформе Spark. Обратите внимание, что оригинальный ResNet-50 не содержит муравьев и пчел в качестве одной из своих этикеток.

BigDL и Analytics Zoo можно установить с помощью pip следующим образом:

#for Python2
pip install BigDL
pip install analytics-zoo
#for Python3
pip3 install BigDL
pip3 install analytics-zoo

Перед началом загрузите предварительно обученную модель ResNet 50, а также наборы данных для обучения и проверки из этого репозитория. Другие модели доступны на сайте Analytics Zoo здесь. Вам нужно будет распаковать сжатые данные.

Начнем с определения импорта и инициализации контекста искры с помощью функции init_nncontext из Analytics Zoo. Здесь также определяются пути к предварительно обученной модели, данным обучения и проверки.

Затем создайте Spark UDF для извлечения имен файлов. Ярлыки присваиваются путем проверки того, содержит ли путь к файлу ключевое слово «муравьи» или «пчелы». Используя эти две пользовательские функции, создайте фреймы данных для обучения и проверки.

Чтобы правильно построить модель, все изображения должны быть стандартизированы. В Analytics Zoo есть API для создания этих преобразований и их последовательного применения.

Предварительно обученный ResNet-50 загружается с использованием файла модели, загруженного ранее.

Последние 5 слоев ResNet-50:

res5c_relu
pool5
Viewf42780f5
fc1000
prob

Последний слой в модели изменен на вывод 2 класса (муравьи и пчелы) вместо 1000, на которых обучается ResNet-50. Он сконструирован с входным размером 1000 и выходным размером 2 и активацией softmax. Затем этот слой добавляется в качестве последнего элемента в конвейере. Обратите внимание: поскольку выполняется переносное обучение, модель можно обучить для этих 2 новых классов всего за 25 эпох! Это показывает практичность трансферного обучения.

Теперь обучите модель на обучающем кадре данных и получите прогнозы на проверочном кадре данных. Spark позволяет ускорить обучение в нескольких кластерах.

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

Изображение из тестового набора данных с прогнозируемой меткой вверху.

Если бы набор данных был намного больше, скажем, он хранится в HDFS, можно использовать тот же конвейер проектирования, и он автоматически масштабировался бы для гораздо большего кластера. BigDL делает анализ этих огромных наборов данных намного быстрее и эффективнее. Более того, помимо сильной интеграции с фреймами данных Spark, он тесно связан со Spark SQL и структурированной потоковой передачей. Например, потоковые данные из Kafka могут быть переданы в аналогичный BigDL UDF, чтобы делать прогнозы и классификации в реальном времени. Spark SQL можно добавить для выполнения запросов и фильтрации на разных этапах и даже для прогнозов.

Записная книжка Jupyter со всеми наборами данных находится в этом репозитории.