
NEOML -это сквозная структура машинного обучения, которая позволяет создавать, тренировать и развертывать модели ML. Эта структура используется инженерами Abbyy для задач компьютерного зрения и обработки естественного языка, включая предварительную обработку изображений, классификацию, анализ макета документов, OCR и извлечение данных из структурированных и неструктурированных документов.
Ключевые функции:
Версия библиотеки Full C ++ была протестирована на платформах:
| Целевая ОС | Компилятор | Архитектура |
|---|---|---|
| Windows 7+ (процессор и графический процессор) | MSVC 2019+ | x86, x86_64 |
| Ubuntu 14+ (процессор) | GCC 5,4+ | x86_64 |
| MacOS 10.11+ (процессор) | Apple Clang 12+ | ARM64, x86_64 |
| iOS 11+ (процессор, графический процессор) | Apple Clang 12+ | ARM64-V8A, x86_64 |
| Android 5.0+ (CPU), Android 7.0+ (GPU) | Clang 7+ | Armeabi-V7a, Arm64-V8a, x86, x86_64 |
Версии Java и библиотеки Java и Objective-C были протестированы на платформах:
| Целевая ОС | Компилятор | Архитектура |
|---|---|---|
| iOS 11+ (процессор, графический процессор) | Apple Clang 12+ | ARM64-V8A, x86_64 |
| Android 5.0+ (CPU), Android 7.0+ (GPU) | Clang 7+ | Armeabi-V7a, Arm64-V8a, x86, x86_64 |
Библиотека построена с Cmake (рекомендуемые версии 3.18 и позже).
Для лучшей производительности процессора в Windows, Linux и MacOS мы используем Intel MKL.
При обработке на графическом процессоре вы можете при желании использовать CUDA (версия 11.2 ud.1) в Windows или Linux и Vulkan (версия 1.1.130 и позже) в Windows, Linux или Android.
Мы также используем Google Test для тестирования и буферы протокола Google для работы с форматом модели ONNX.
Мы используем очень сознательный генератор JIT Code Xbyak для ускорения некоторых свертков на процессорах x86_64.
См. Здесь для инструкций по созданию версии библиотеки C ++ для разных платформ.
Смотрите здесь для получения инструкций по созданию Java и версий Objective-C, которые могли бы запустить только обученные нейронные сети.
Несколько учебных пособий с примером кода помогут вам начать работать с библиотекой:
Библиотека была разработана с учетом этих принципов:
Пользовательский интерфейс полностью отделен от низкоуровневых вычислений, реализованных математическим двигателем.
Единственное, что вам нужно сделать, это указать в начале типа математического двигателя, который будет использоваться для расчетов. Вы также можете автоматически выбрать математический двигатель, основываясь на обнаруженной конфигурации устройства.
Остальная часть вашего кода машинного обучения будет такой же независимо от выбранного вами математического двигателя.
Каждая сеть работает с одним экземпляром математического двигателя, и все его слои должны были быть созданы с одним и тем же математическим двигателем. Если вы выбрали математический двигатель GPU, он выполнит все расчеты. Это означает, что вы не можете использовать процессор для «легких» расчетов, таких как добавление векторов и графический процессор для «тяжелых» расчетов, таких как умновые матрицы. Мы ввели это ограничение, чтобы избежать ненужной синхронизации и обмена данными между устройствами.
Интерфейс математического двигателя безопасен; Один и тот же экземпляр может использоваться в разных сетях и в разных потоках.
Обратите внимание, что это может повлечь за собой некоторых накладных расходов синхронизации.
Тем не менее, реализация нейронной сети не безопасна для потока; Сеть может работать только в одном потоке.
Библиотека Neoml также работает с моделями, созданными другими рамками, если они поддерживают формат ONNX. См. Описание импорта API. Тем не менее, вы не можете экспортировать неофункциональную модель в формат ONNX.
Библиотека использует свой собственный двоичный формат (реализованный CArchive , CArchiveFile ) для сохранения и загрузки обученных моделей.
Обработка на GPU часто помогает значительно повысить производительность математических операций. Библиотека NEOML использует графический процессор как для обучения, так и для запуска моделей. Это необязательная настройка и зависит от аппаратных и программных возможностей вашей системы.
Чтобы работать над GPU, библиотека требует:
Библиотека NEOML происходит во внутренней инфраструктуре Эбби. По разным причинам Abbyy использует кроссплатформенную структуру под названием FineObj. Из -за этого версия открытой библиотеки использует некоторые из этих примитивов этой структуры. Смотрите описание общих классов.
NEOML содержит две библиотеки C ++:
Библиотека предоставляет объекты C ++, которые реализуют различные алгоритмы высокого уровня. Он состоит из нескольких частей:
Математический двигатель, используемый для расчетов, представляет собой отдельный модуль, который реализует низкоуровневые математические функции, используемые в библиотеке алгоритмов. Пользователь также может вызывать эти функции, но обычно никогда не нужно.
Этот модуль имеет разные реализации для разных платформ. В частности, существует реализация, которая использует GPU для расчетов.
Математический двигатель также представляет собой набор интерфейсов C ++, описанных здесь.
См. Обширную документацию модуля Python на readthedocs.io.
Чтобы работать с версией библиотеки в выводе в Java и Kotlin, мы предоставляем интерфейс Java.
Для работы с версией библиотеки вывода в Swift и Objective-C мы предоставляем интерфейс Objective-C.
Copyright © 2016-2020 Abbyy Production LLC. Лицензирован по лицензии Apache, версия 2.0. Смотрите файл лицензии.