UXL Foundation Logo
oneAPI Deep Neural Network Library (oneDNN)
<div align="center">
Release
conda-forge
Documentation
Slack
OpenSSF Best Practices
OpenSSF Scorecard
Highlights | Used By | Quick Start |
Installation | Documentation |
System Requirements
Support | Governance | Contributing |
License | Security
</div>
oneDNN은 CPU와 GPU용으로 최적화된 오픈 소스 크로스 플랫폼 딥러닝 연산 라이브러리입니다. 이 라이브러리는 행렬 곱셈(matrix multiplication), 컨볼루션(convolution), 어텐션(attention), 정규화(normalization) 및 기타 연산에 대한 고도로 최적화된 구현을 제공하며, PyTorch, TensorFlow, OpenVINO 등 수많은 다른 AI 프레임워크의 기반이 되는 가속 계층입니다.
이 라이브러리는 Intel 64/AMD64 아키텍처 기반 프로세서, Arm(R) 64비트 아키텍처 (AArch64) 기반 프로세서 및 Intel Graphics용으로 최적화되었습니다. oneDNN은 다음 아키텍처에 대한 실험적인 지원을 제공합니다: NVIDIA* GPU, AMD* GPU, OpenPOWER* Power ISA (PPC64), 그리고 IBMz* (s390x).
oneDNN 프로젝트는 UXL Foundation의 일부입니다.
Highlights
- 하나의 API로 여러 장치 지원: 동일한 코드가 Intel 64/AMD64, AArch64, RISC-V CPU 및 Intel GPU를 대상으로 합니다.
- 하드웨어 특화: oneDNN은 런타임에 하드웨어 기능을 감지하고 명령어 세트(instruction set), 코어 수, 캐시 크기에 특화된 커널을 JIT 방식으로 생성합니다.
- 저정밀도 추론: OCP microscaling formats를 포함하여 다양한 양자화 방식과 함께
f32, bf16, f16, f8, f4, u8/s8, u4/s4 데이터 타입을 지원합니다.
- 연산 융합: 후처리(Post-ops)는 활성화 값(activations), 잔여 연결(residual connections), 양자화(quantization)를 matmul 및 컨볼루션으로 융합합니다. Graph API는 스케일드 닷-프로덕트 어텐션 (SDPA) 및 그룹화된 쿼리 어텐션 (GQA)과 같은 더 큰 패턴을 융합합니다.
- 상호 운용성: CPU에서는 OpenMP, TBB 및 사용자 정의 스레드풀(custom threadpools)을 지원하고, GPU에서는 SYCL과 OpenCL을 지원합니다.
사용되는 프레임워크 (Used By)
oneDNN은 다음 프레임워크 및 애플리케이션에 통합되어 있습니다. 딥러닝 실무자는 oneDNN을 직접 사용하기보다 이들 중 하나를 사용하는 것이 좋습니다:
빠른 시작 (Quick Start)
conda-forge에서 미리 빌드된 oneDNN을 설치합니다:
conda install -c conda-forge onednn
f32, f16, bf16, 및 s8 데이터 타입에 대한 matmul 처리량(throughput)을 측정하는 행렬 곱셈 성능 예제를 빌드하고 실행합니다:`
wget https://raw.githubusercontent.com/uxlfoundation/oneDNN/main/examples/matmul_perf.cpp \
https://raw.githubusercontent.com/uxlfoundation/oneDNN/main/examples/example_utils.hpp
g++ matmul_perf.cpp -I$CONDA_PREFIX/include -L$CONDA_PREFIX/lib \
...
다음 단계:
- [예제 및 튜토리얼(Examples and Tutorials)]에서는 양자화(quantization), 융합(fusion), 그래프 API(Graph API), GPU 실행 등 다양한 내용을 다룹니다.
- 빌드 방식을 사용자 정의하려면 [소스에서 빌드(Build from Source)]를 사용하십시오.
만약 oneDNN이 작업에 유용하다면, GitHub에서 프로젝트에 별을 주는 것을 고려해 주세요. 이는 다른 사람들이 이 프로젝트를 발견하는 데 도움이 됩니다.
설치(Installation)
다음 옵션 중 하나를 사용하여 oneDNN 라이브러리를 다운로드하고 설치할 수 있습니다:
- conda-forge: 필요한 구성이 conda-forge 채널에 없는 경우, 소스 배포판(Source Distribution)을 사용하여 라이브러리를 빌드할 수 있습니다.
- Intel oneAPI:
- 소스 배포판(Source Distribution): 소스에서 빌드 페이지의 지침을 따라 라이브러리를 직접 빌드할 수 있습니다.
문서화(Documentation)
- [oneDNN 개발자 가이드 및 참고 자료(Developer Guide and Reference)]에는 프로그래밍 모델, 지원되는 기능, 구현 세부 정보가 설명되어 있으며 주석이 달린 예제가 포함되어 있습니다.
- [API 참고 자료(API Reference)]는 라이브러리 API에 대한 포괄적인 참고 자료를 제공합니다.
- [릴리스 노트(Release Notes)]에는 oneDNN의 각 버전에서 구현된 새로운 기능, 성능 최적화 및 개선 사항이 설명되어 있습니다.
시스템 요구 사항 (System Requirements)
oneDNN은 다음 아키텍처를 기반으로 하는 플랫폼을 지원합니다:
경고 (WARNING)
Power ISA (PPC64) 및 IBMz (s390x) 지원은 제한적인 검증을 거친 실험적 기능입니다.
이 라이브러리는 다음 CPU에 최적화되어 있습니다:
- Intel 64/AMD64 아키텍처
- Intel Xeon(R) 프로세서 E3, E5 및 E7 패밀리 v3+ 라인업 (구 Haswell 및 Broadwell)
- Intel Xeon Scalable 프로세서 (구 Skylake, Cascade Lake, Cooper Lake, Ice Lake, Sapphire Rapids, Emerald Rapids)
- Intel Xeon CPU Max 시리즈 (구 Sapphire Rapids HBM)
- Intel Core Ultra 프로세서 (구 Meteor Lake, Arrow Lake, Lunar Lake 및 Panther Lake)
- Intel Xeon 6 프로세서 (구 Sierra Forest 및 Granite Rapids)
- 향후 Intel AVX10.2 명령어 세트 지원을 갖춘 Intel Core 프로세서 (코드명 Nova Lake)
- 향후 Intel AVX10.2 명령어 세트 지원을 갖춘 Intel Xeon 프로세서 (코드명 Diamond Rapids)
- AArch64 아키텍처
- Arm Neoverse(TM) N-Series 및 V-Series
- RISC-V 아키텍처 기반 프로세서 중 다음 ISA 확장을 가진 제품:
- RISC-V Vector (RVV) 확장, 버전 1.0
- Zvfh (FP16 벡터) 및 Zvfbfwma (BF16 벡터)
Intel 64/AMD64, AArch64 또는 RISC-V 아키텍처 기반의 CPU에서 oneDNN은 런타임에 명령어 세트 아키텍처(ISA)를 감지하고, 최신 지원 ISA에 최적화된 코드를 배포하기 위해 Just-In-Time (JIT) 코드 생성을 사용합니다. 향후 ISA는 라이브러리에서 기본적으로 비활성화될 수 있으며, 이를 활성화하려면 런타임 제어(run-time controls)를 사용해야 할 수 있습니다. 자세한 내용은 CPU dispatcher control을 참조하십시오.
경고
macOS에서 oneDNN을 사용하는 애플리케이션은 하드닝된 런타임(hardened runtime)을 사용할 경우 특별 권한 부여(entitlements)를 요청해야 할 수 있습니다. 자세한 내용은 Linking Guide를 참조하십시오.
이 라이브러리는 다음 GPU에 최적화되어 있습니다:
- Intel 전용(discrete) GPU:
- Intel Arc™ A-Series Graphics (구 Alchemist)
- Intel Data Center GPU Flex Series (구 Arctic Sound)
- Intel Data Center GPU Max Series (구 Ponte Vecchio)
- Intel Arc B-Series Graphics 및 Intel Arc Pro B-Series Graphics
(구 Battlemage)
- Intel GPU D-Series (구 Crescent Island)
- Intel 그래픽 통합 제품군:
- Intel Core Ultra Series 1 프로세서용 Intel Graphics (구 Meteor Lake)
- Intel Core Ultra Series 2 프로세서용 Intel Graphics (구 Arrow Lake 및 Lunar Lake)
- Intel Core Ultra Series 3 프로세서용 Intel Graphics (구 Panther Lake)
- Intel Core Series 3 프로세서용 Intel Graphics (구 Wildcat Lake)
- 향후 Intel Core Ultra 프로세서용 Intel Graphics (코드명 Nova Lake)
소스에서 빌드하기 위한 요구 사항
oneDNN은 다음 요구 사항을 충족하는 시스템을 지원합니다:
- Intel 64/AMD64, AArch64, PPC64, s390x 또는 RV64 아키텍처를 지원하는 운영 체제
- C++11 표준 지원이 가능한 C++ 컴파일러
- CMake 3.13 이상
oneDNN 문서를 빌드하는 데 필요한 도구는 다음과 같습니다:
CPU 및 GPU 엔진의 구성은 추가적인 빌드 시간 종속성을 유발할 수 있습니다.
CPU 엔진
oneDNN CPU 엔진은 Intel 64/AMD64 기반 프로세서, 64비트 Arm Architecture (AArch64) 프로세서, 64비트 Power ISA (PPC64) 프로세서, IBMz (s390x), RISC-V 64비트 (RV64) 프로세서 및 호환 장치에서 프리미티브를 실행하는 데 사용됩니다.
CPU 엔진은 기본적으로 빌드되지만, 빌드 시점에 ONEDNN_CPU_RUNTIME을 NONE으로 설정하여 비활성화할 수 있습니다. 이 경우 GPU 엔진이 활성화되어야 합니다. CPU 엔진은 OpenMP, TBB, SYCL 또는 스레드풀(threadpool) 런타임을 사용하도록 구성할 수 있습니다. 다음 추가 요구 사항이 적용됩니다:
일부 구현은 OpenMP 4.0 SIMD 확장에 의존합니다. Intel Architecture 프로세서에서 최상의 성능 결과를 얻으려면 Intel oneAPI DPC++/C++ Compiler 사용을 권장합니다.
Arm AArch64 아키텍처 기반 CPU에서 oneDNN CPU 엔진은 Arm Compute Library (ACL) 통합을 통해 빌드될 수 있습니다. ACL은 머신러닝 애플리케이션용 오픈 소스 라이브러리이며, 핵심 기능에 대한 AArch64 최적화 구현체를 제공합니다. 이 기능성은 현재 ACL이 별도로 다운로드 및 빌드되어야 합니다. 자세한 내용은 개발자 가이드(Developer Guide)의 [Build from Source] 섹션을 참조하십시오. ACL의 최소 지원 버전은 53.1.0입니다.
GPU Engine