
NEOML 은 ML 모델을 구축, 훈련 및 배포 할 수있는 엔드 투 엔드 머신 러닝 프레임 워크입니다. 이 프레임 워크는 Abbyy 엔지니어가 이미지 전처리, 분류, 문서 레이아웃 분석, OCR 및 구조화되지 않은 문서의 데이터 추출을 포함하여 컴퓨터 비전 및 자연어 처리 작업에 사용됩니다.
주요 기능 :
전체 с ++ 라이브러리 버전은 플랫폼에서 테스트되었습니다.
| 대상 OS | 컴파일러 | 건축학 |
|---|---|---|
| Windows 7+ (CPU 및 GPU) | MSVC 2019+ | x86, x86_64 |
| 우분투 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+ | ARMEABI-V7A, ARM64-V8A, X86, X86_64 |
추론 Java 및 Objective-C 라이브러리 버전은 플랫폼에서 테스트되었습니다.
| 대상 OS | 컴파일러 | 건축학 |
|---|---|---|
| iOS 11+ (CPU, GPU) | 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에서 최고의 CPU 성능을 위해 Intel MKL을 사용합니다.
GPU를 처리 할 때 Windows, Linux에서 Cuda (버전 11.2 upd.1) 및 Windows, Linux 또는 Android에서 Vulkan (버전 1.1.130 이상)을 선택적으로 사용할 수 있습니다.
또한 ONNX 모델 형식으로 작업하기 위해 Google Test 및 Google 프로토콜 버퍼를 사용합니다.
우리는 X86_64 프로세서의 일부 컨볼 루션 속도를 높이기 위해 JIT Code Xbyak의 매우 화려한 생성기를 사용합니다.
다른 플랫폼 용 C ++ 라이브러리 버전 구축에 대한 지침은 여기를 참조하십시오.
훈련 된 신경망 만 실행하는 Java 및 Objective-C 버전 구축에 대한 지침은 여기를 참조하십시오.
샘플 코드가있는 여러 자습서는 라이브러리 작업을 시작하는 데 도움이됩니다.
도서관은 이러한 원칙을 염두에두고 개발되었습니다.
사용자 인터페이스는 수학 엔진에서 구현 한 저수준 계산과 완전히 분리됩니다.
당신이해야 할 유일한 일은 처음에는 계산에 사용될 수학 엔진의 유형을 지정하는 것입니다. 감지 된 장치 구성을 기반으로 수학 엔진을 자동으로 선택하도록 선택할 수도 있습니다.
기계 학습 코드의 나머지 부분은 선택한 수학 엔진에 관계없이 동일합니다.
각 네트워크는 하나의 수학 엔진 인스턴스와 함께 작동하며 모든 레이어는 동일한 수학 엔진으로 생성되어야합니다. GPU 수학 엔진을 선택한 경우 모든 계산을 수행합니다. 즉, 벡터를 추가하는 것과 같은 "가벼운"계산에 CPU를 사용하고 행렬을 곱하는 것과 같은 "무거운"계산에는 GPU를 사용하지 않을 수 있습니다. 우리는 불필요한 동기화 및 장치 간의 데이터 교환을 피하기 위해이 제한을 도입했습니다.
수학 엔진 인터페이스는 스레드 안전입니다. 동일한 인스턴스가 다른 네트워크와 다른 스레드에서 사용될 수 있습니다.
이것은 일부 동기화 오버 헤드를 수반 할 수 있습니다.
그러나 신경망 구현은 스레드-안전이 아닙니다. 네트워크는 하나의 스레드에서만 실행될 수 있습니다.
NEOML 라이브러리는 ONNX 형식을 지원하는 한 다른 프레임 워크에서 만든 모델과도 작동합니다. 가져 오기 API의 설명을 참조하십시오. 그러나 NeOML 훈련 모델을 ONNX 형식으로 내보낼 수는 없습니다.
라이브러리는 자체 이진 형식 ( CArchive , CArchiveFile 에서 구현)을 사용하여 훈련 된 모델을 저장하고로드합니다.
GPU 처리는 종종 수학 연산의 성능을 크게 향상시키는 데 도움이됩니다. NEOML 라이브러리는 모델을 훈련하고 실행하는 데 GPU를 사용합니다. 이것은 선택적 설정이며 시스템의 하드웨어 및 소프트웨어 기능에 따라 다릅니다.
GPU에서 작업하려면 라이브러리에는 다음이 필요합니다.
NEOML 라이브러리는 Abbyy 내부 인프라에서 시작됩니다. Abbyy는 여러 가지 이유로 FineObj라는 크로스 플랫폼 프레임 워크를 사용합니다. 이 때문에 Open Library 버전은이 프레임 워크 프리미티브 중 일부를 사용합니다. 공통 클래스 설명을 참조하십시오.
NEOML 에는 두 개의 C ++ 라이브러리가 포함되어 있습니다.
라이브러리는 다양한 고급 알고리즘을 구현하는 C ++ 객체를 제공합니다. 여러 부분으로 구성됩니다.
계산에 사용되는 수학 엔진은 알고리즘 라이브러리에 사용되는 저수준 수학적 기능을 구현하는 별도의 모듈입니다. 사용자는 이러한 기능을 호출 할 수 있지만 일반적으로 필요하지 않습니다.
이 모듈마다 다른 플랫폼마다 구현이 다릅니다. 특히 계산을 위해 GPU를 사용하는 구현이 있습니다.
수학 엔진은 또한 여기에 설명 된 C ++ 인터페이스 세트입니다.
readthedocs.io의 Python 모듈의 광범위한 문서를 참조하십시오.
Java 및 Kotlin의 라이브러리의 추론 버전에서 작업하기 위해 Java 인터페이스를 제공합니다.
Swift and Objective-C에서 라이브러리의 추론 버전과 협력하기 위해 우리는 목표 C 인터페이스를 제공합니다.
Copyright © 2016-2020 Abbyy Production LLC. Apache 라이센스, 버전 2.0에 따라 라이센스. 라이센스 파일을 참조하십시오.