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
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].


