1111
NeoML is an end-to-end machine learning framework that allows you to build, train, and deploy ML models. This framework is used by ABBYY engineers for computer vision and natural language tasks, including image preprocessing, classification, document layout analysis, OCR, and data extraction from structured and unstructured documents.
44444
Key features:
- Neural networks with support for over 100 layer types
- Traditional machine learning: 20+ algorithms (classification, regression, clustering, etc)
- CPU and GPU support, fast inference
- ONNX support
- Languages: C++, Java, Objective C
- Cross-platform: the same code can be run at Windows, Linux, macOS, iOS, and Android
Полная С++ версия библиотеки была протестирована на следующих платформах:
Целевая операционная система | Компилятор | Архитектура |
---|---|---|
Windows 7+ (CPU и GPU) | MSVC 2015+ | x86, x86_64 |
Ubuntu 14+ (CPU) | gcc 5.4+ | x86_64 |
MacO 8000 S 10.11+ | Apple clang 11+ | x86_64 |
iOS 11+ (CPU, GPU) | Apple clang 11+ | arm64-v8a, x86_64 |
Android 5.0+ (CPU), Android 7.0+ (GPU) | clang 7+ | armeabi-v7a, arm64-v8a, x86, x86_64 |
Версии для прямого прохода нейронных сетей на Java и Objective-C тестировались на платформах:
Целевая операционная система | Компилятор | Архитектура |
---|---|---|
iOS 11+ (CPU, GPU) | Apple clang 11+ | arm64-v8a, x86_64 |
Android 5.0+ (CPU), Android 7.0+ (GPU) | clang 7+ | armeabi-v7a, arm64-v8a, x86, x86_64 |
Для сборки вам понадобится CMake (версии не ниже 3.11).
Для максимальной производительности на CPU под Windows, Linux и macOS мы используем Intel MKL.
Также опционально для вычислений на GPU под Windows можно использовать CUDA (версии 10.2), а для Android - Vulkan (версии не ниже 1.1.130).
Сборка полных С++ версий на различных платформах описана здесь.
Сборка Java и Objective-C версий для запуска обученных нейросетей на различных платформах описана здесь.
Посмотреть готовые примеры и быстрее начать работу можно с помощью обучающих материалов:
- Пример создания простой сети.
- Классификация с использованием градиентного бустинга.
- Кластеризация данных.
В основу библиотеки заложены следующие принципы:
Пользовательский интерфейс библиотеки алгоритмов полностью изолирован от низкоуровневой реализации вычислительных функций, т.е. вычислительного движка.
Пользователю достаточно в начале работы указать, какую из реализаций вычислительного движка надо использовать. Можно воспользоваться автоматическим выбором рекомендованного движка для текущей конфигурации.
Весь код, работающий с алгоритмами машинного обучения, будет выглядеть одинаково при любом выборе движка.
Каждая сеть использует только одну реализацию вычислительного движка; все её слои должны быть созданы над этим же движком. Если выбран движок над GPU, то все вычисления будут выполняться только на нём. Т.е. невозможна ситуация, когда внутри одного алгоритма, «лёгкие» функции (например, сложение векторов) выполняются на CPU, а «тяжёлые» (например, умножение матриц) - на GPU. Это необходимо для того, чтобы избежать лишней синхронизации и копирования данных между CPU и GPU.
Интерфейс вычислительного движка IMathEngine
потокобезопасен: один и тот же вычислительный движок может быть использован в разных сетях с разных потоков.
При этом стоит учитывать возможные накладные расходы на синхронизацию.
А вот реализация нейросети CDnn
не является потокобезопасной. Сеть может использоваться только в одном потоке.
Модели, созданные другими фреймворками, могут быть использованы в NeoML благодаря поддержке формата ONNX.
Для сохранения и загрузки моделей библиотека использует собственный бинарный формат сериализации (классы CArchive
, CArchiveFile
).
Использование GPU часто позволяет получить существенный выигрыш в производительности при выполнении математических операций. NeoML активно использует возможности GPU при обучении и запуске моделей. Данная возможность является опциональной и зависит от наличия необходимого аппаратного и программного обеспечения. Библиотека предъявляет следующие требования для использования GPU:
- Windows: NVIDIA® GPU card с поддержкой CUDA® 10.2.
- iOS: Apple GPU A7+.
- Android: устройства с поддержкой Vulkan 1.0.
- Linux/macOS: вычисления на GPU пока не поддержаны.
Библиотека NeoML - это библиотека, использующаяся во внутренней инфраструктуре компании ABBYY. По различным причинам, в компании используется собственный фреймворк для написания кроссплатформенных приложений, называемый FineObj.
В связи с этим открытая версия библиотеки использует некоторые примитивы из этого фреймворка, см. общие классы.
NeoML состоит из двух C++ библиотек:
Библиотека представляет собой набор C++ объектов, реализующих высокоуровневую логику различных алгоритмов. Этот набор можно разделить на следующие части:
- Нейронные сети
- Алгоритмы решения задачи классификации и регрессии
- Алгоритмы кластеризации
- Вспомогательные алгоритмы
Вычислительный движок представляет собой отдельный модуль, реализующий низкоуровневые вычислительные функции, используемые внутри библиотеки алгоритмов. Для вызова пользователем эти функции также доступны, но обычно это вам не потребуется.
Данный модуль имеет несколько реализаций для различных платформ; в частности, при наличии графического вычислительного устройства (GPU) можно вычислять на нём.
Интерфейс вычислительного движка представляет собой набор C++ интерфейсов и описан здесь
Для удобства использования библиотеки в языка Java и Kotlin создан java интерфейс, который предоставляет возможность запуска обученной ранее нейронной сети.
Для удобства использования библиотеки в языках Swift и Objective-C создан Objective-C интерфейс, который предоставляет возможность запуска обученной ранее нейронной сети.
Copyright © 2016-2020 ABBYY Production LLC. Licensed under the Apache License, Version 2.0. Смотрите файл лицензии.