
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。请参阅许可证文件。