
Neoml est un cadre d'apprentissage automatique de bout en bout qui vous permet de construire, de former et de déployer des modèles ML. Ce cadre est utilisé par les ingénieurs d'Abbyy pour la vision par ordinateur et les tâches de traitement du langage naturel, y compris le prétraitement d'image, la classification, l'analyse de mise en page des documents, l'OCR et l'extraction des données à partir de documents structurés et non structurés.
Caractéristiques clés:
La version complète de la bibliothèque с ++ a été testée sur les plates-formes:
| Target OS | Compilateur | Architecture |
|---|---|---|
| Windows 7+ (CPU et GPU) | MSVC 2019+ | x86, x86_64 |
| Ubuntu 14+ (CPU) | GCC 5.4+ | x86_64 |
| MacOS 10.11+ (CPU) | Apple Clang 12+ | ARM64, x86_64 |
| iOS 11+ (CPU, GPU) | Apple Clang 12+ | ARM64-V8A, x86_64 |
| Android 5.0+ (CPU), Android 7.0+ (GPU) | Clang 7+ | armaubi-v7a, arm64-v8a, x86, x86_64 |
Les versions de la bibliothèque Java et Objective-C inférence ont été testées sur les plates-formes:
| Target OS | Compilateur | Architecture |
|---|---|---|
| iOS 11+ (CPU, GPU) | Apple Clang 12+ | ARM64-V8A, x86_64 |
| Android 5.0+ (CPU), Android 7.0+ (GPU) | Clang 7+ | armaubi-v7a, arm64-v8a, x86, x86_64 |
La bibliothèque est construite avec CMake (versions recommandées 3.18 et plus tard).
Pour les meilleures performances CPU sur Windows, Linux et MacOS, nous utilisons Intel MKL.
Lors du traitement sur un GPU, vous pouvez éventuellement utiliser CUDA (version 11.2 Upd.1) sur Windows ou Linux et Vulkan (version 1.1.130 et ultérieurement) sur Windows, Linux ou Android.
Nous utilisons également Google Test pour les tests et les tampons de protocole Google pour travailler avec le format du modèle ONNX.
Nous utilisons un générateur très convaincant de JIT Code XBYAK pour accélérer des convolutions sur les processeurs x86_64.
Voir ici pour des instructions sur la création de la version de la bibliothèque C ++ pour différentes plates-formes.
Voir ici pour des instructions sur la construction des versions Java et Objective-C qui ne feraient que les réseaux de neurones formés.
Plusieurs tutoriels avec un exemple de code vous aideront à commencer à travailler avec la bibliothèque:
La bibliothèque a été développée en pensant à ces principes:
L'interface utilisateur est complètement séparée des calculs de bas niveau mis en œuvre par un moteur mathématique.
La seule chose que vous devez faire est de spécifier au début du type de moteur mathématique qui sera utilisé pour les calculs. Vous pouvez également choisir de sélectionner automatiquement le moteur mathématique, en fonction de la configuration de l'appareil détecté.
Le reste de votre code d'apprentissage automatique sera le même quel que soit le moteur mathématique que vous choisissez.
Chaque réseau fonctionne avec une instance de moteur mathématique, et toutes ses couches auraient dû être créées avec le même moteur mathématique. Si vous avez choisi un moteur mathématique GPU, il effectuera tous les calculs. Cela signifie que vous ne pouvez pas choisir d'utiliser un CPU pour les calculs "légers" comme l'ajout de vecteurs et un GPU pour les calculs "lourds" comme la multiplication des matrices. Nous avons introduit cette restriction pour éviter les synchronisations inutiles et l'échange de données entre les appareils.
L'interface du moteur mathématique est en file d'attente; La même instance peut être utilisée dans différents réseaux et différents threads.
Notez que cela peut entraîner une surcharge de synchronisation.
Cependant, l'implémentation du réseau neuronal n'est pas en file d'attente; Le réseau ne peut fonctionner que dans un seul thread.
La bibliothèque Neoml fonctionne également avec les modèles créés par d'autres cadres, tant qu'ils prennent en charge le format ONNX. Voir la description de l'API d'importation. Cependant, vous ne pouvez pas exporter un modèle formé au NEOML au format ONNX.
La bibliothèque utilise son propre format binaire (implémenté par CArchive , CArchiveFile ) pour enregistrer et charger les modèles formés.
Le traitement sur GPU aide souvent à améliorer considérablement les performances des opérations mathématiques. La bibliothèque Neoml utilise GPU à la fois pour la formation et l'exécution des modèles. Il s'agit d'un paramètre facultatif et dépend des capacités matérielles et logicielles de votre système.
Pour travailler sur GPU, la bibliothèque nécessite:
La bibliothèque Neoml provient de l'infrastructure interne d'Abbyy. Pour diverses raisons, Abbyy utilise un cadre multiplateforme appelé fineobj. Pour cette raison, la version Open Library utilise certaines de ces primitives de cadre. Voir la description des classes communes.
Neoml contient deux bibliothèques C ++:
La bibliothèque fournit des objets C ++ qui implémentent divers algorithmes de haut niveau. Il se compose de plusieurs parties:
Le moteur mathématique utilisé pour les calculs est un module séparé qui implémente les fonctions mathématiques de bas niveau utilisées dans la bibliothèque des algorithmes. L'utilisateur peut également appeler ces fonctions mais n'a généralement jamais besoin.
Ce module a différentes implémentations pour différentes plateformes. En particulier, il existe une implémentation qui utilise un GPU pour les calculs.
Le moteur mathématique est également un ensemble d'interfaces C ++ décrites ici.
Voir la vaste documentation du module Python sur ReadTheDocs.io.
Pour travailler avec la version inférence de la bibliothèque en Java et Kotlin, nous fournissons une interface Java.
Pour travailler avec la version inférence de la bibliothèque dans Swift et Objective-C, nous fournissons une interface Objective-C.
Copyright © 2016-2020 Abbyy Production LLC. Licencié sous la licence Apache, version 2.0. Voir le fichier de licence.