Deeplearning4j

Deeplearning4j — программная библиотека для JVM, предназначенная для реализации алгоритмов глубокого обучения[1][2]. Deeplearning4j реализует широкий спектр алгоритмов глубокого обучения[3]. В библиотеку входят реализации ограниченной машины Больцмана, глубоких доверительных сетей, автокодировщиков, стэковых денойз-автокодировщиков, рекурсивных тензорных нейросетей, word2vec, doc2vec и GloVe. Для всех этих алгоритмов поддерживаются распределённые и параллельные вычисления с интеграцией в Apache Hadoop и Spark.

Deeplearning4j — это открытое программное обеспечение под лицензией Apache License 2.0[4], разрабатываемое в основном группой по машинному обучению из Сан-Франциско[5]. Коммерческую поддержку оказывает стартап Skymind, который распространяет DL4J, TensorFlow, Keras и другие библиотеки глубокого обучения в корпоративном дистрибутиве Skymind Intelligence Layer[6]. В октябре 2017 года Deeplearning4j была передана в фонд Eclipse Foundation[7][8].

Что важно знать
Deeplearning4j
Тип обработка естественного языка, глубокое обучение, машинное зрение, искусственный интеллект
Авторы Alex D. Black, Adam Gibson, Вячеслав Кокорин, Josh Patterson
Разработчики Kondiut K. K. и соавторы
Написана на Java, CUDA, C, C++
Операционные системы Linux, macOS, Windows, Android, iOS
Языки интерфейса английский
Аппаратные платформы CUDA, x86, ARM, PowerPC
Последняя версия 1.0.0-M2.1 (17 августа 2022)
Репозиторий github.com/eclipse/deepl…
Лицензия Apache License 2.0
Сайт deeplearning4j.konduit.ai

Введение

Deeplearning4j написана на широко используемом языке Java, однако совместима с Clojure и включает API для Scala. В качестве ядра используется собственная библиотека для численных расчётов — ND4J. Поддерживается выполнение как на CPU, так и на GPU[9][10].

Deeplearning4j используется в ряде коммерческих и академических проектов. Исходный код размещён на GitHub[11], поддерживается форум на Gitter[12].

Архитектура фреймворка допускает объединение нейросетей разного типа: ограниченных машин Больцмана, свёрточных и рекуррентных сетей, автокодировщиков и других. Предусмотрены инструменты визуализации[13] и вычислительный граф[14].

Распределённость

Обучение с помощью Deeplearning4j организовано в распределённом кластере: нейронные сети обучаются параллельно с применением итеративного редуцирования, поддерживаются Hadoop-YARN и Spark[5][15]. Также поддерживается использование CUDA-ядра для выполнения вычислений на GPU, включая распределённые графические ускорители.

Научные вычисления для JVM

В библиотеке реализован класс для работы с N-мерными массивами на базе ND4J, что даёт возможности научных вычислений на Java и Scala, аналогичные NumPy для Python. Основа библиотеки — средства линейной алгебры и манипуляции матрицами для промышленного применения.

DataVec: библиотека векторизации данных

DataVec выполняет векторизацию различных форматов файлов и типов данных с использованием системы ввода-вывода, схожей с MapReduce в Hadoop; по сути, преобразует разные типы данных в столбцы скаляров (векторы). DataVec предназначена для обработки CSV, изображений, аудио, текста, видео и временных рядов[16][17].

Обработка текста и NLP

В состав Deeplearning4j входит инструментариум тематического моделирования и работы с векторными пространствами, реализованный на Java с поддержкой параллельных GPU для повышения производительности, — подходит для работы с большими объёмами текстовых данных.

Библиотека реализует tf-idf, глубокое обучение, word2vec[18], doc2vec и GloVe, оптимизированные и переписанные на Java. Для визуализации слова используется t-SNE.

Применение и интеграции

Реальные применения Deeplearning4j охватывают обнаружение вторжений и кибербезопасность, борьбу с мошенничеством в финансовой отрасли[19], обнаружение аномалий на производстве, рекомендательные системы для электронной коммерции и рекламы[20], задачи распознавания изображений[21]. Deeplearning4j интегрируется с другими платформами машинного обучения, в частности RapidMiner, Prediction.io[22] и Weka[23].

Сервер моделей машинного обучения

Deeplearning4j предоставляет сервер для развёртывания моделей машинного обучения в промышленной эксплуатации — бесплатно, в редакции SKIL (Skymind Intelligence Layer)[24][25]. Сервер моделей подаёт параметрические модели машинного обучения, принимающие решения по входящим данным, — используется на этапе инференса после построения моделей и подготовки данных. Такой сервер позволяет развернуть научные методы анализа данных в продуктивной среде.

Как веб-сервер в интернете обрабатывает HTTP-запросы и возвращает данные о сайте, сервер моделей получает на вход данные и возвращает прогнозы или решения, например — отправив изображение, можно получить метку для этого изображения, такое как идентификация лиц или объектов на фотографии.

Сервер моделей SKIL может импортировать модели из Python-фреймворков (Tensorflow, Keras, Theano, CNTK), позволяя развёртывать разнообразные решения на практике.

Бенчмарки

По скорости на задачах распознавания изображений на нескольких GPU Deeplearning4j не уступает Caffe[26]. Для оптимизации времени обучения нейросетей на JVM нужно скорректировать ряд параметров: выделение памяти, схему сборки мусора, использовать off-heap память, предсохранять (pickle) данные для ускорения загрузки на этапе ETL[27]. Такие оптимизации могут в 10 раз ускорять обучение на Deeplearning4j.

API: Java, Scala, Python, Clojure и Kotlin

Deeplearning4j предоставляет интерфейсы (API) на Java, Scala, Python, Clojure и Kotlin. Для работы со Scala используется API под названием ScalNet[28]. В качестве Python-интерфейса применяется Keras[29]. Для Clojure разработан wrapper DL4CLJ[30]. Основные вычислительные ядра для глубокого обучения написаны на C, C++ и CUDA C.

Tensorflow, Keras и Deeplearning4j

Фреймворки Tensorflow, Keras и Deeplearning4j способны работать совместно. Deeplearning4j может импортировать модели из Tensorflow и других Python-фреймворков, если они созданы с помощью Keras[31].

Примечания