oneAPI 深度神经网络库(oneDNN)
该软件以前称为用于深度神经网络的英特尔数学内核库(Intel MKL-DNN)和深度神经网络库(DNNL)。
随着 oneAPI 的启动,我们改变了项目名称和存储库位置,以与其他 oneAPI 库保持一致:
- 短库名称更改为 oneDNN。
- 存储库从 intel/mkl-dnn 移至 oneapi-src/oneDNN。到代码和文档的现有链接将继续起作用。
此时对 API、环境变量或计划的构建选项没有任何更改。
oneAPI 深度神经网络库(oneDNN)是用于深度学习应用程序的基本构建基块的开源跨平台性能库。该库针对英特尔架构处理器,英特尔处理器图形和基于 Xe 架构的图形进行了优化。对其他架构(例如Arm * 64位架构(AArch64)和OpenPOWER * Power ISA(PPC64))的支持尚处于试验阶段。请参阅下面的系统要求部分。
oneDNN 供有兴趣改善英特尔 CPU 和 GPU 上的应用程序性能的深度学习应用程序和框架开发人员使用。深度学习从业人员应使用启用 oneDNN 的应用程序之一:
- Apache* MXNet
- BigDL
- Caffe* Optimized for Intel Architecture
- Chainer*
- DeepLearning4J*
- Korali
- MATLAB* Deep Learning Toolbox
- Menoh*
- Microsoft* Cognitive Toolkit (CNTK)
- nGraph
- ONNX Runtime
- OpenVINO(TM) toolkit
- PaddlePaddle*
- PyTorch*
- Tensorflow*
文档
安装
可在发布部分中下载适用于 Linux*、Windows* 和 macOS* 的预构建二进制文件。 程序包名称使用以下约定:
OS | Package name |
---|---|
Linux | dnnl_lnx_<version>_cpu_<cpu runtime>[_gpu_<gpu runtime>].tgz
|
Windows | dnnl_win_<version>_cpu_<cpu runtime>[_gpu_<gpu runtime>].zip
|
macOS | dnnl_mac_<version>_cpu_<cpu runtime>.tgz
|
每个操作系统都可以使用几个软件包,以确保与应用程序使用的CPU或GPU运行时库互操作。
Configuration | Dependency |
---|---|
cpu_iomp
|
Intel OpenMP runtime |
cpu_gomp
|
GNU* OpenMP runtime |
cpu_vcomp
|
Microsoft Visual C OpenMP runtime |
cpu_tbb
|
Threading Building Blocks (TBB) |
这些软件包不包括库依赖关系,需要在构建时在应用程序中解决这些依赖关系。有关CPU和GPU运行时的更多详细信息,请参见下面的系统要求部分和开发人员指南中的构建选项部分。
如果所需的配置不可用,则可以从源代码构建库。
系统要求
oneDNN 支持基于以下架构的平台:
警告:Arm 64位体系结构(AArch64)和Power ISA(PPC64)支持是试验性的,具有有限的测试验证。
该库针对以下 CPU 进行了优化:
- 具有 Intel SSE4.1 支持的 Intel Atom 处理器
- 第4代、第5代、第6代、第7代和第8代 Intel(R)Core(TM)处理器
- 英特尔®至强®处理器 E3、E5 和 E7 家族(以前称为 Sandy Bridge、Ivy Bridge、Haswell 和 Broadwell)
- 英特尔(R)至强融核(TM)处理器(以前为 Knights Landing 和 Knights Mill)
- 英特尔至强可扩展处理器(以前称为 Skylake、Cascade Lake 和 Cooper Lake)
- 未来的 Intel Xeon 可扩展处理器(代号 Sapphire Rapids)
在基于 Intel 64 或 AMD64 架构的 CPU 上,oneDNN 在运行时检测指令集架构(ISA),并使用即时(JIT)代码生成来部署针对最新支持的 ISA 优化的代码。将来的 ISA 可能默认情况下禁用了库中的初始支持,并且需要使用运行时控件来启用它们。有关更多详细信息,请参见 CPU 调度程序控制。
警告:在 macOS 上,如果使用加固的运行时,则使用 oneDNN 的应用程序可能需要请求特殊权利。有关更多详细信息,请参见链接指南。
该库针对以下 GPU 进行了优化:
- 英特尔高清显卡
- 英特尔 UHD 图形
- 英特尔 Iris Plus 图形
- 基于 Xe 架构的 Graphics(代码分别为 DG1 和 Tiger Lake)
从源构建的要求
oneDNN 支持满足以下要求的系统:
- 支持 Intel 64/Arm 64/Power 体系结构的操作系统
- 具有 C++ 11 标准支持的 C++ 编译器
- CMake 2.8.11 或更高版本
- Doxygen 1.8.5 或更高版本来构建文档
CPU 和 GPU 引擎的配置可能会引入其他构建时间依赖性。
CPU 引擎
oneDNN CPU 引擎用于在 Intel 体系结构处理器,64 位 Arm 体系结构(AArch64)处理器,64 位 Power ISA(PPC64)处理器和兼容设备上执行原语。
默认情况下,CPU 引擎是内置的,无法在构建时禁用。可以将引擎配置为使用 OpenMP 或 TBB 线程运行时。以下附加要求适用:
- OpenMP 运行时需要具有 OpenMP 2.0 或更高标准支持的 C++ 编译器
- TBB 运行时需要 Threading Building Blocks(TBB)2017 或更高版本。
一些实现依赖于 OpenMP 4.0 SIMD 扩展。为了在英特尔架构处理器上获得最佳性能,我们建议使用英特尔 C++ 编译器。
GPU 引擎
oneDNN GPU 引擎支持基于英特尔处理器图形和基于 Xe 架构的图形。在默认的构建配置中,GPU 引擎被禁用。启用 GPU 引擎时,以下附加要求适用:
- OpenCL * 运行时库(OpenCL 1.2 版或更高版本)
- 具有 Intel 子组扩展支持的 OpenCL 驱动程序(具有对 OpenCL C 2.0 或更高版本的内核语言支持)
运行时依赖
从源代码构建 oneDNN 时,库运行时依赖项和特定版本由构建环境定义。
Linux
常见依赖项:
- GNU C Library (
libc.so
) - GNU Standard C++ Library v3 (
libstd++.so
) - Dynamic Linking Library (
libdl.so
) - C Math Library (
libm.so
) - POSIX Threads Library (
libpthread.so
)
运行时特定的依赖项:
Runtime configuration | Compiler | Dependency |
---|---|---|
DNNL_CPU_RUNTIME=OMP
|
GCC | GNU OpenMP runtime (libgomp.so )
|
DNNL_CPU_RUNTIME=OMP
|
Intel C/C++ Compiler | Intel OpenMP runtime (libiomp5.so )
|
DNNL_CPU_RUNTIME=OMP
|
Clang | Intel OpenMP runtime (libiomp5.so )
|
DNNL_CPU_RUNTIME=TBB
|
any | TBB (libtbb.so )
|
DNNL_GPU_RUNTIME=OCL
|
any | OpenCL runtime (libOpenCL.so )
|
Windows
常见依赖项:
- Microsoft Visual C++ Redistributable (
msvcrt.dll
)
运行时特定的依赖项:
Runtime configuration | Compiler | Dependency |
---|---|---|
DNNL_CPU_RUNTIME=OMP
|
Microsoft Visual C++ Compiler | No additional requirements |
DNNL_CPU_RUNTIME=OMP
|
Intel C/C++ Compiler | Intel OpenMP runtime (iomp5.dll )
|
DNNL_CPU_RUNTIME=TBB
|
any | TBB (tbb.dll )
|
DNNL_GPU_RUNTIME=OCL
|
any | OpenCL runtime (OpenCL.dll )
|
macOS
常见依赖项:
- System C/C++ runtime (
libc++.dylib
,libSystem.dylib
)
运行时特定的依赖项:
Runtime configuration | Compiler | Dependency |
---|---|---|
DNNL_CPU_RUNTIME=OMP
|
Intel C/C++ Compiler | Intel OpenMP runtime (libiomp5.dylib )
|
DNNL_CPU_RUNTIME=TBB
|
any | TBB (libtbb.dylib )
|
已验证的配置
CPU 引擎已在 RedHat* Enterprise Linux 7 上通过以下验证:
- GNU Compiler Collection 4.8, 5.4, 6.1, 7.2, and 8.1
- Clang* 3.8.0
- Intel C/C++ Compiler 17.0, 18.0, and 19.0
on Windows Server* 2012 R2 with
- Microsoft Visual C++ 14.0 (Visual Studio 2015 Update 3)
- Intel C/C++ Compiler 17.0 and 19.0
on macOS 10.13 (High Sierra) with
- Apple LLVM version 9.2 (XCode 9.2)
- Intel C/C++ Compiler 18.0 and 19.0
GPU engine was validated on Ubuntu* 18.04 with
- GNU Compiler Collection 6.1 and 8.1
- Clang 3.8.1
- Intel C/C++ Compiler 19.0
- Intel SDK for OpenCL applications 2019 Update 3
- Intel Graphics Compute Runtime for OpenCL 19.37.14191
on Windows Server 2019 with
- Microsoft Visual C++ 14.0 (Visual Studio 2015 Update 3)
- Intel C/C++ Compiler 19.0
- Intel SDK for OpenCL applications 2019 Update 3
- Intel Graphics - Windows 10 DCH Drivers 26.20.100.6709
预建二进制文件的要求
请参阅相应二进制软件包中包含的自述文件。
支持
请在 GitHub 问题 页面上提交您的问题,功能请求和错误报告。
您可以通过 dnnl.maintainers@intel.com 私下联系项目维护者。
贡献
我们欢迎社区对 oneDNN 的贡献。如果您有关于如何改进库的想法:
对于影响整体公共API或库的更改(例如添加新的原语或对体系结构的更改),请提交 RFC 拉取请求。
确保所做的更改与代码贡献准则和编码样式一致。
确保您可以构建产品并运行带有修补程序的所有示例。
提交拉取请求。
有关更多详细信息,请参见贡献准则。
该项目旨在提供一个安全,友好的合作空间,并且希望贡献者遵守《贡献者公约》行为准则。
许可
oneDNN 已获得 Apache 许可版本 2.0 的许可。有关完整的许可证文本和版权声明,请参阅“LICENSE”文件。
此发行版包括受单独许可条款约束的第三方软件。
3-clause BSD license:
Apache License Version 2.0:
Boost Software License, Version 1.0:
MIT License:
SIL Open Font License (OFL):
该第三方软件,即使包含在英特尔软件的发行版中,也可能受单独的许可条款约束,包括但不限于第三方许可条款,其他英特尔软件许可条款和开源软件许可条款。 这些单独的许可条款约束您对“第三方程序”文件中规定的第三方程序的使用。
(The first version translated by vz on 2020.08.08)