
NEOML是一個端到端的機器學習框架,可讓您構建,訓練和部署ML模型。 Abbyy工程師將該框架用於計算機視覺和自然語言處理任務,包括圖像預處理,分類,文檔佈局分析,OCR以及從結構化和非結構化文檔中提取數據。
關鍵功能:
完整的„ ++庫版本已在平台上進行了測試:
| 目標操作系統 | 編譯器 | 建築學 |
|---|---|---|
| Windows 7+(CPU和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) | 叮噹7+ | ARMEABI-V7A,ARM64-V8A,X86,X86_64 |
推理Java和Objective-C庫版本已在平台上進行了測試:
| 目標操作系統 | 編譯器 | 建築學 |
|---|---|---|
| iOS 11+(CPU,GPU) | Apple Clang 12+ | ARM64-V8A,X86_64 |
| Android 5.0+(CPU),Android 7.0+(GPU) | 叮噹7+ | ARMEABI-V7A,ARM64-V8A,X86,X86_64 |
該庫是用CMAKE構建的(建議版本3.18及以後)。
對於Windows,Linux和MacOS上的最佳CPU性能,我們使用Intel MKL。
在GPU上處理時,您可以選擇在Windows或Linux和Linux和Vulkan(版本1.1.130和更高版本)上使用CUDA(版本11.2 Upd.1),Windows,Linux或Android上。
我們還使用Google測試進行測試和Google協議緩衝區,以使用ONNX型號格式。
我們使用JIT代碼Xbyak的非常快速的發電機來加速X86_64處理器上的一些卷積。
有關構建不同平台的C ++庫版本的說明,請參見此處。
有關構建Java和Objective-C版本的說明,這些說明只會運行訓練有素的神經網絡。
帶有示例代碼的幾個教程將幫助您開始使用庫:
圖書館是在考慮到這些原則的:
用戶界面與數學引擎實施的低級計算完全分開。
您唯一要做的就是在開始時指定將用於計算的數學引擎的類型。您還可以根據檢測到的設備配置選擇自動選擇數學引擎。
無論您選擇哪種數學引擎,機器學習代碼的其餘部分都將相同。
每個網絡都可以使用一個數學引擎實例,並且其所有層都應使用相同的數學引擎創建。如果您選擇了GPU數學引擎,它將執行所有計算。這意味著您可能不會選擇使用CPU進行“光”計算,例如添加向量和用於“重型”計算的GPU,例如增加矩陣。我們引入了此限制,以避免設備之間不必要的同步和數據交換。
數學引擎接口是線程安全的;同一實例可以在不同的網絡和不同的線程中使用。
請注意,這可能需要一些同步開銷。
但是,神經網絡實現不是線程安全。網絡只能在一個線程中運行。
NeoML庫還可以與其他框架創建的模型合作,只要它們支持ONNX格式即可。請參閱導入API的描述。但是,您無法將受NEOML訓練的模型導出到ONNX格式中。
該圖書館使用自己的二進制格式(由CArchive , CArchiveFile實施)來保存和加載訓練有素的模型。
在GPU上處理通常有助於顯著提高數學操作的性能。 NEOML庫都使用GPU進行培訓和運行模型。這是一個可選的設置,取決於系統的硬件和軟件功能。
要在GPU上工作,圖書館需要:
NEOML庫源自Abbyy內部基礎架構。由於各種原因,Abbyy使用了稱為FineObj的跨平台框架。因此,開放庫版使用了一些此框架原始版本。請參閱“通用類說明”。
Neoml包含兩個C ++庫:
該庫提供了實現各種高級算法的C ++對象。它由幾個部分組成:
用於計算的數學引擎是一個單獨的模塊,該模塊實現了算法庫中使用的低級數學功能。用戶也可以調用這些功能,但通常不需要。
該模塊對不同平台具有不同的實現。特別是,有一個實現使用GPU進行計算。
數學引擎也是此處描述的一組C ++接口。
請參閱ReadThedocs.io上的Python模塊的廣泛文檔。
要使用Java和Kotlin的庫的推理版本,我們提供了Java界面。
要與Swift和Objective-C中的庫的推理版本合作,我們提供了一個Objective-C接口。
版權所有©2016-2020 Abbyy Production LLC。根據Apache許可證獲得許可,版本2.0。請參閱許可證文件。