oneAPI 深度神经网络库 (oneDNN) 是一个开源的跨平台性能库,为深度学习应用提供基础构建模块。oneDNN 项目是 UXL Foundation 的一部分,并实现了 oneAPI 规范中的 oneDNN 组件。
该库针对基于 Intel 64/AMD64 架构的处理器、基于 Arm(R) 64 位架构 (AArch64) 的处理器以及 Intel 显卡进行了优化。oneDNN 对以下架构提供实验性支持:NVIDIA* GPU、AMD* GPU、OpenPOWER* Power ISA (PPC64)、IBMz* (s390x) 和 RISC-V。
oneDNN 面向深度学习应用和框架开发者,旨在提升应用在 CPU 和 GPU 上的性能。
深度学习实践者应使用已集成 oneDNN 的应用程序之一:
oneDNN 支持基于以下架构的平台:
- Intel 64 或 AMD64,
- Arm 64 位架构 (AArch64)。
- OpenPOWER / IBM Power ISA。
- IBMz z/架构 (s390x)。
- RISC-V 64 位 (RV64)。
警告
对 Power ISA (PPC64)、IBMz (s390x) 和 RISC-V (RV64) 的支持是实验性的,测试验证有限。
该库针对以下 CPU 进行了优化:
* Intel 64/AMD64 架构
* Intel Atom(R) 处理器(至少需要支持 Intel SSE4.1)
* Intel Core(TM) 处理器(至少需要支持 Intel SSE4.1)
* Intel Xeon(R) E3、E5 和 E7 系列处理器(前代代号 Sandy Bridge、Ivy Bridge、Haswell 和 Broadwell)
* Intel Xeon 可扩展处理器(前代代号 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) N1 和 V1 处理器
在基于 Intel 64 或 AMD64 架构的 CPU 上,oneDNN 会在运行时检测指令集架构 (ISA),并使用即时 (JIT) 代码生成技术来部署针对最新支持的 ISA 优化的代码。未来的 ISA 可能在库中默认禁用初始支持,需要使用运行时控制来启用它们。详情请参阅 [CPU 调度器控制]。
警告
在 macOS 上,使用 oneDNN 的应用程序如果启用了强化运行时,可能需要请求特殊权限。详情请参阅 [链接指南]。
该库针对以下 GPU 进行了优化:
* Intel 独立显卡:
* Intel Iris Xe MAX Graphics(前代代号 DG1)
* Intel Arc(TM) A 系列显卡(前代代号 Alchemist)
* Intel Data Center GPU Flex 系列(前代代号 Arctic Sound)
* Intel Data Center GPU Max 系列(前代代号 Ponte Vecchio)
* Intel Arc B 系列显卡和 Intel Arc Pro B 系列显卡(前代代号 Battlemage)
* 集成 Intel 显卡的处理器:
* 第 11-14 代 Intel Core 处理器
* Intel Core Ultra 系列 1 处理器的 Intel 显卡(前代代号 Meteor Lake)
* Intel Core Ultra 系列 2 处理器的 Intel 显卡(前代代号 Arrow Lake 和 Lunar Lake)
* Intel Core Ultra 系列 3 处理器的 Intel 显卡(前代代号 Panther Lake)
oneDNN 支持满足以下要求的系统:
* 支持 Intel 64/AMD64、AArch 64、PPC64 或 s390x 架构的操作系统
* 支持 C++11 标准的 C++ 编译器
* CMake 3.13 或更高版本
构建 oneDNN 文档需要以下工具:
* Doxygen 1.8.5 或更高版本
* Doxyrest 2.1.2 或更高版本
* Sphinx 6.2.1 或更高版本
* sphinx-book-theme 1.1.4 或更高版本
* sphinx-copybutton 0.5.2 或更高版本
* graphviz 2.40.1
CPU 和 GPU 引擎的配置可能会引入额外的构建时依赖项。
oneDNN CPU 引擎用于在基于 Intel 64/AMD64 的处理器、64 位 Arm 架构 (AArch64) 处理器、64 位 Power ISA (PPC64) 处理器、IBMz (s390x) 及兼容设备上执行原语。
CPU 引擎默认构建,但可以通过将 ONEDNN_CPU_RUNTIME 设置为 NONE 在构建时禁用。在这种情况下,必须启用 GPU 引擎。CPU 引擎可以配置为使用 OpenMP、TBB 或 SYCL 运行时。以下附加要求适用:
* OpenMP 运行时需要支持 OpenMP 2.0 或更高标准的 C++ 编译器
* TBB 运行时需要 Threading Building Blocks (TBB) 2017 或更高版本。
* SYCL 运行时需要
* [Intel oneAPI DPC++/C++ 编译器]
* Threading Building Blocks (TBB)
某些实现依赖于 OpenMP 4.0 SIMD 扩展。为了在 Intel 架构处理器上获得最佳性能结果,我们推荐使用 Intel C++ 编译器。
在基于 Arm AArch64 架构的 CPU 上,oneDNN CPU 引擎可以与 Arm Compute Library (ACL) 集成构建。ACL 是一个用于机器学习应用的开源库,提供了 AArch64 优化的核心函数实现。此功能目前要求单独下载和构建 ACL。详情请参阅开发者指南的 [从源代码构建] 部分。ACL 的最低支持版本是 52.4.0。
oneDNN GPU 引擎用于在各种加速器上执行原语,包括 Intel 集成和独立显卡、NVIDIA GPU、AMD GPU 以及其他支持 SYCL 编程语言的设备。GPU 引擎在默认构建配置中禁用,可以通过将 ONEDNN_GPU_RUNTIME 构建选项设置为 NONE 以外的值来启用。目标加速器供应商必须在构建时使用 ONEDNN_GPU_VENDOR 构建选项进行选择。
警告
Linux 会在内核运行时间超过几秒时重置 GPU。用户可以通过为 Intel GPU 驱动程序[禁用 hangcheck] 来防止此行为。Windows 具有内置的[超时检测与恢复]机制,会导致类似行为。用户可以通过增加 TdrDelay 值来防止此行为。
以下附加要求适用于 Intel 集成和独立显卡:
* 使用 OpenCL(TM) 运行时:
* OpenCL SDK(支持 OpenCL 1.2)
* 支持 OpenCL C 2.0、Intel 子组支持和 USM 扩展的 Intel 显卡驱动程序
* 使用 SYCL 运行时:
* [Intel oneAPI DPC++/C++ 编译器]
* OpenCL SDK(支持 OpenCL 3.0)
* oneAPI Level Zero
* 支持 OpenCL C 2.0、Intel 子组支持和 USM 扩展的 Intel 显卡驱动程序
以下附加要求适用于 NVIDIA GPU:
* [支持 CUDA 的 oneAPI DPC++ 编译器] 或 [适用于 NVIDIA GPU 的 oneAPI]
* NVIDIA CUDA* 驱动程序
* cuBLAS 10.1 或更高版本
* cuDNN 7.6 或更高版本
警告
NVIDIA GPU 支持是实验性的。通用信息、构建说明和实现限制请参阅 NVIDIA 后端自述文件。
以下附加要求适用于 AMD GPU:
* [支持 HIP AMD 的 oneAPI DPC++ 编译器] 或 [适用于 AMD GPU 的 oneAPI]
* AMD ROCm 版本 5.3 或更高版本
* MIOpen 版本 2.18 或更高版本(如果 AMD ROCm 包含所需版本的 MIOpen,则为可选)
* rocBLAS 版本 2.45.0 或更高版本(如果 AMD ROCm 包含所需版本的 rocBLAS,则为可选)
警告
AMD GPU 支持是实验性的。通用信息、构建说明和实现限制请参阅 AMD 后端自述文件。
其他支持 SYCL 编程模型的设备需要支持目标 GPU 的 oneAPI DPC++/C++ 编译器。有关其他详细信息,请参阅[通用 GPU 供应商]文档。
当 oneDNN 从源代码构建时,库的运行时依赖项和特定版本由构建环境定义。
常见依赖项:
* GNU C 库 (libc.so)
* GNU 标准 C++ 库 v3 (libstdc++.so)
* 动态链接库 (libdl.so)
* C 数学库 (libm.so)
* POSIX 线程库 (libpthread.so)
运行时特定依赖项:
| 运行时配置 | 编译器 | 依赖项 |
|---|---|---|
ONEDNN_CPU_RUNTIME=OMP |
GCC | GNU OpenMP 运行时 (libgomp.so) |
ONEDNN_CPU_RUNTIME=OMP |
Intel C/C++ 编译器 | Intel OpenMP 运行时 (libiomp5.so) |
ONEDNN_CPU_RUNTIME=OMP |
Clang | Intel OpenMP 运行时 (libiomp5.so) |
ONEDNN_CPU_RUNTIME=TBB |
任意 | TBB (libtbb.so) |
ONEDNN_CPU_RUNTIME=SYCL |
Intel oneAPI DPC++ 编译器 | Intel oneAPI DPC++ 编译器运行时 (libsycl.so)、TBB (libtbb.so)、OpenCL 加载器 (libOpenCL.so) |
ONEDNN_GPU_RUNTIME=OCL |
任意 | OpenCL 加载器 (libOpenCL.so) |
ONEDNN_GPU_RUNTIME=SYCL |
Intel oneAPI DPC++ 编译器 | Intel oneAPI DPC++ 编译器运行时 (libsycl.so)、OpenCL 加载器 (libOpenCL.so)、oneAPI Level Zero 加载器 (libze_loader.so) |
常见依赖项:
* Microsoft Visual C++ 可再发行组件 (msvcrt.dll)
运行时特定依赖项:
| 运行时配置 | 编译器 | 依赖项 |
|---|---|---|
ONEDNN_CPU_RUNTIME=OMP |
Microsoft Visual C++ 编译器 | 无额外要求 |
ONEDNN_CPU_RUNTIME=OMP |
Intel C/C++ 编译器 | Intel OpenMP 运行时 (iomp5.dll) |
ONEDNN_CPU_RUNTIME=TBB |
任意 | TBB (tbb.dll) |
ONEDNN_CPU_RUNTIME=SYCL |
Intel oneAPI DPC++ 编译器 | Intel oneAPI DPC++ 编译器运行时 (sycl.dll)、TBB (tbb.dll)、OpenCL 加载器 (OpenCL.dll) |
ONEDNN_GPU_RUNTIME=OCL |
任意 | OpenCL 加载器 (OpenCL.dll) |
ONEDNN_GPU_RUNTIME=SYCL |
Intel oneAPI DPC++ 编译器 | Intel oneAPI DPC++ 编译器运行时 (sycl.dll)、OpenCL 加载器 (OpenCL.dll)、oneAPI Level Zero 加载器 (ze_loader.dll) |
常见依赖项:
* 系统 C/C++ 运行时 (libc++.dylib, libSystem.dylib)
运行时特定依赖项:
| 运行时配置 | 编译器 | 依赖项 |
|---|---|---|
ONEDNN_CPU_RUNTIME=OMP |
Intel C/C++ 编译器 | Intel OpenMP 运行时 (libiomp5.dylib) |
ONEDNN_CPU_RUNTIME=TBB |
任意 |