
Neoml ist ein End-to-End-Rahmen für maschinelles Lernen, mit dem Sie ML-Modelle erstellen, trainieren und bereitstellen können. Dieses Framework wird von Abbyy -Ingenieuren für Computer Vision und natürliche Sprachverarbeitungsaufgaben verwendet, einschließlich Bildvorverarbeitung, Klassifizierung, Dokumentlayoutanalyse, OCR und Datenextraktion aus strukturierten und unstrukturierten Dokumenten.
Schlüsselmerkmale:
Die vollständige Version der с ++ -Bibliothek wurde auf den Plattformen getestet:
| Zielbetrieb | Compiler | Architektur |
|---|---|---|
| Windows 7+ (CPU und 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) | Klang 7+ | Armeabi-V7A, ARM64-V8A, x86, x86_64 |
Die Inferenz-Java- und Objective-C-Bibliotheksversionen wurden auf den Plattformen getestet:
| Zielbetrieb | Compiler | Architektur |
|---|---|---|
| iOS 11+ (CPU, GPU) | Apple Clang 12+ | ARM64-V8A, x86_64 |
| Android 5.0+ (CPU), Android 7.0+ (GPU) | Klang 7+ | Armeabi-V7A, ARM64-V8A, x86, x86_64 |
Die Bibliothek ist mit CMake (empfohlene Versionen 3.18 und später) gebaut.
Für die beste CPU -Leistung unter Windows, Linux und MacOS verwenden wir Intel MKL.
Bei der Verarbeitung einer GPU können Sie optional CUDA (Version 11.2 Upd.1) unter Windows oder Linux und Vulkan (Version 1.1.130 und später) unter Windows, Linux oder Android verwenden.
Wir verwenden auch den Google -Test für Testen und Google -Protokollpuffer für die Arbeit mit dem ONNX -Modellformat.
Wir verwenden einen sehr verräterischen Generator von JIT Code XBYAK, um einige Konvolutionen auf X86_64 -Prozessoren zu beschleunigen.
Anweisungen zum Erstellen der C ++ - Bibliotheksversion für verschiedene Plattformen finden Sie hier.
Anweisungen zum Aufbau der Java- und Objective-C-Versionen finden Sie hier, die nur die geschulten neuronalen Netzwerke ausführen würden.
Mehrere Tutorials mit Beispielcode helfen Ihnen bei der Arbeit mit der Bibliothek:
Die Bibliothek wurde unter Berücksichtigung dieser Prinzipien entwickelt:
Die Benutzeroberfläche ist vollständig von den von einer Mathematik-Engine implementierten Berechnungen auf niedriger Ebene getrennt.
Das einzige, was Sie tun müssen, ist, den Typ der mathematischen Engine zu starten, die für Berechnungen verwendet wird. Sie können auch die mathematische Engine automatisch auswählen, basierend auf der erkannten Gerätekonfiguration.
Der Rest Ihres maschinellen Lernens ist unabhängig von der von Ihnen ausgewählten Mathematik -Engine gleich.
Jedes Netzwerk arbeitet mit einer mathematischen Engine -Instanz und alle seine Schichten sollten mit derselben Mathematik -Engine erstellt werden. Wenn Sie eine GPU -Mathematik -Engine ausgewählt haben, werden alle Berechnungen durchgeführt. Dies bedeutet, dass Sie möglicherweise keine CPU für "leichte" Berechnungen wie das Hinzufügen von Vektoren und eine GPU für "schwere" Berechnungen wie Multiplikation Matrizen verwenden. Wir haben diese Einschränkung eingeführt, um unnötige Synchronisationen und Datenaustausch zwischen Geräten zu vermeiden.
Die Mathematik-Engine-Schnittstelle ist thread-sicher; Die gleiche Instanz kann in verschiedenen Netzwerken und Threads verwendet werden.
Beachten Sie, dass dies möglicherweise einen Synchronisierungsaufwand beinhalten kann.
Die Implementierung des neuronalen Netzwerks ist jedoch nicht mit Thread-Sicherheit. Das Netzwerk darf nur in einem Thread ausgeführt.
Die NEOML -Bibliothek arbeitet auch mit den von anderen Frameworks erstellten Modellen zusammen, solange sie das ONNX -Format unterstützen. Siehe die Beschreibung der Import -API. Sie können jedoch kein NEOML-ausgebildetes Modell in das ONNX-Format exportieren.
Die Bibliothek verwendet ein eigenes binäres Format (implementiert von CArchive , CArchiveFile ), um die geschulten Modelle zu speichern und zu laden.
Die Verarbeitung von GPU hilft häufig bei der erheblichen Verbesserung der Leistung mathematischer Operationen. Die NEOML -Bibliothek verwendet GPU sowohl zum Training als auch zum Ausführen der Modelle. Dies ist eine optionale Einstellung und hängt von den Hardware- und Softwarefunktionen Ihres Systems ab.
Um an der GPU zu arbeiten, erfordert die Bibliothek:
Die NEOML -Bibliothek stammt aus der internen Abbyy -Infrastruktur. Aus verschiedenen Gründen verwendet Abbyy ein plattformübergreifendes Framework namens Fineobj. Aus diesem Grund verwendet die Open Library -Version einige dieser Framework -Primitiven. Siehe Beschreibung der gemeinsamen Klassen.
NEOML enthält zwei C ++ - Bibliotheken:
Die Bibliothek bietet C ++-Objekte, die verschiedene hochrangige Algorithmen implementieren. Es besteht aus mehreren Teilen:
Die für Berechnungen verwendete mathematische Engine ist ein separates Modul, das die in der Algorithmenbibliothek verwendeten mathematischen Funktionen auf niedriger Ebene implementiert. Der Benutzer kann diese Funktionen auch aufrufen, muss aber normalerweise nie müssen.
Dieses Modul verfügt über unterschiedliche Implementierungen für verschiedene Plattformen. Insbesondere gibt es eine Implementierung, die eine GPU für Berechnungen verwendet.
Die Mathematikmotor ist auch ein Satz von C ++ - hier beschriebenen Schnittstellen.
Siehe die umfangreiche Dokumentation des Python -Moduls auf redethedocs.io.
Um mit der Inferenzversion der Bibliothek in Java und Kotlin zu arbeiten, bieten wir eine Java -Schnittstelle an.
Um mit der Inferenzversion der Bibliothek in Swift- und Objective-C zu arbeiten, bieten wir eine Objektiv-C-Schnittstelle an.
Copyright © 2016-2020 Abbyy Production LLC. Lizenziert unter der Apache -Lizenz, Version 2.0. Siehe die Lizenzdatei.