oneDNN简介
oneDNN(oneAPI Deep Neural Network Library)是一个开源的跨平台深度学习性能库,为深度学习应用提供基础构建块。它是UXL基金会的一个项目,也是oneAPI规范的一个实现。
oneDNN主要针对Intel架构处理器、Intel显卡和基于ARM 64位架构(AArch64)的处理器进行了优化。它还实验性地支持NVIDIA GPU、AMD GPU、OpenPOWER Power ISA (PPC64)、IBMz (s390x)和RISC-V等架构。
该库主要面向希望提高应用程序在CPU和GPU上性能的深度学习应用和框架开发人员。深度学习从业者可以使用已集成oneDNN的应用程序。
主要特性
- 针对Intel处理器和显卡进行了优化
- 支持多种深度学习原语,如卷积、矩阵乘法、RNN等
- 提供CPU和GPU引擎
- 支持多种精度类型,包括FP32、FP16、BF16、INT8等
- 提供C++和C API
- 支持动态形状和运行时选择最佳实现
- 提供原语融合和后处理操作支持
- 可与多种深度学习框架集成
系统要求
oneDNN支持基于以下架构的平台:
- Intel 64或AMD64
- ARM 64位架构(AArch64)
- OpenPOWER/IBM Power ISA
- IBMz z/Architecture (s390x)
- RISC-V 64位(RV64)
CPU引擎针对Intel和ARM处理器进行了优化。GPU引擎支持Intel集成显卡和独立显卡。
构建要求:
- 支持C++11的C++编译器
- CMake 2.8.12或更高版本
- 根据不同配置可能需要额外依赖(如OpenMP、TBB等)
安装和使用
oneDNN提供了二进制分发包,可以通过Anaconda或Intel oneAPI获取。如果需要其他配置,可以从源代码构建。
基本使用流程:
- 创建引擎和流
- 创建内存描述符和内存对象
- 创建计算原语
- 执行计算
oneDNN提供了详细的开发者指南和API参考文档,可以帮助用户快速上手。
应用案例
多个流行的深度学习框架和工具集已经集成了oneDNN,包括:
- Apache MXNet
- PyTorch
- TensorFlow
- ONNX Runtime
- OpenVINO工具包
- PaddlePaddle 等
这些框架通过集成oneDNN获得了显著的性能提升。
社区与贡献
oneDNN是一个开源项目,欢迎社区贡献。贡献方式包括:
- 提交错误报告和功能请求
- 提交代码修复和新功能
- 改进文档
- 在论坛和Slack上回答问题
项目遵循Apache 2.0开源许可。贡献者需要遵守行为准则,保持友好和尊重的交流氛围。
总结
oneDNN为深度学习应用提供了高性能的计算库,大大提升了在Intel和ARM平台上的性能。随着深度学习的普及,oneDNN必将发挥越来越重要的作用。无论是深度学习框架开发者还是应用开发者,都可以从中受益。