AI 前线导读: 英特尔正式宣布开源 nGraph, 这是一款能兼容所有框架的深度神经网络 (DNN) 模型编译器, 可用于多种硬件设备利用 nGraph, 数据科学家们将能够专注于数据科学工作, 而无需分神于如何调整 DNN 模型以在不同设备上高效实现训练与运行
在今天的文章中, 我们将探讨工程当中出现的挑战与设计决策亮点此外, 感兴趣的朋友亦可参阅我们的 GitHub(https://github.com/NervanaSystems/ngraph) 说明文档(http://ngraph.nervanasys.com/index.html/) 以及 SysML 论文(https://arxiv.org/abs/1801.08058) 以了解更多细节信息
图 1. nGraph 生态系统
我们目前通过 nGraph 直接支持 TensorFlowMXNet 以及 neonCNTKPyTorch 与 Caffe2 则可通过 ONNX 实现间接支持用户可以将这些框架运行在多种设备之上, 具体包括英特尔架构 GPU 英特尔 Nervana 神经网络处理器 (简称 NNP) 等等未来, 我们还将在发展路线图当中引入更多设备 / 框架支持选项
我们为何构建 nGraph?
当深度学习 (简称 DL) 框架首次成为用于模型训练与推理的工具时, 其在设计层面仍然专门针对特定设备的内核作出优化因此, 模型定义当中存在的诸多设备特性使得深度学习模型在面对其它或更高级设备时, 往往带来更为复杂的适应性与可移植性挑战
在传统方案当中, 算法开发人员需要经历枯燥的过程才能够将模型引入其它设备当中此外, 模型在不同框架上的运行也会带来众多难题, 这是因为开发人员必须将模型本身与设备特性进行拆分, 并将其转换为新框架中的类似运算, 最终对首选旋转设备进行必要调整以立足新框架进行配置
正因为如此, 我们设计出了 nGraph 库, 希望大大减少相关工程任务的复杂性虽然通过英特尔 Math Kernel Library for Deep Neural Networks(简称英特尔 MKL-DNN)等为及项目能够实现深度学习基元的内核优化, 但我们认为提供更多编译器选项将能够进一步优化方案的性能表现
它在实践当中如何运作?
安装 nGraph 库并利用该库编写或编译框架, 即可运行模型的训练与推理任务您可通过任意受支持系统上的命令行将 nGraph 指定为框架后端我们的 Intermediate Representation(简称 IR, 即中间表示)层负责处理全部设备抽象细节, 并允许开发人员专注于自己的数据科学算法以及模型工作从而彻底摆脱机器码带来的困扰
下面来看更多细节信息:
nGraph 核心会创建一个强类型及设备中立式无状态计算表示图图中的各个节点, 或者说 op, 代表着计算中的一个步骤, 且各个步骤会从零个或更多张量输入内容中生成零个或更多张量输出结果我们的理念是, nGraph 的运作应作为深度学习框架当中更为复杂的 DNN 运算的基石, 并确保在推理计算与训练及推理计算之间取得理想的效率平衡点
我们为每套受支持框架开发出对应的框架桥接, 其作为 nGraph 核心与框架之间的中转载体我们目前已经面向 TensorFlow/XLAMXNet 以及 ONNX 建立了桥接机制由于 ONNX 只是一种交换格式, 因此 ONNX 桥接还配合一个执行 API 以实现功能增强
转换器在 nGraph 核心与各类设备之间扮演着类似的角色 ; 转换器负责将泛型与特定于设备的图形转换机制相结合以处理设备抽象, 从而立足框架桥接实现函数执行此外, 转换器还负责实现分配与归还, 同时在桥接的指引下进行张量读取与写入我们目前已经打造出面向英特尔架构英特尔 NNP 英伟达 cuDNN 以及其它多种高人气设备的转换器选项
目前表现
英特尔公司在 MKL-DNN 的英特尔架构框架优化方面拥有着相当丰富的经验我们充分利用以往积累到的宝贵资源, 并通过 nGraph 为侠框架开发出能够充分利用设备特性的优化效果框架开发者们将能够继续进行自己的优化工作举例来说, 英特尔架构上的 TensorFlow 1.7+/XLA 的性能远远优于英特尔架构上的 TensorFlow 1.3/XA 而随着英特尔框架 XLA 开发工作的进一步推进, 这种性能提升效果应该会得到持续加强
以下各图为多种框架的初始性能数据, 这些数据反映了迄今为止我们对 IA 转换器作出的优化效果在最新的英特尔至强 Platinum 8180 处理器上, 结合 MKLDNN v0.13, 我们将能够达到甚至大大超越以往的框架优化性能例如 MXNet-MKLDNN-CPU(经过 MKLDNN 优化的 MXNet)以及 neon-MKLML-CPU(经过 MKLML 优化的 neon)我们还能够带来超越 TensorFlow XLA 编译器 (TF-XLA-CPU) 的性能水平 ; 不过在将默认 CPU 实现与 cGraph 相结合之后, XLA 将能够带来更为显著的优化成效
现状与未来展望
截至目前, nGraph 共支持六套深度学习框架与三类计算设备
支持的框架:
通过 nGraph 框架中立表示直接支持框架选项
- TensorFlow
- MXNet
- neon
通过 ONNX 间接支持的框架选项
- CNTK
- PyTorch
- Caffe2
支持的计算设备
英特尔架构 (x86, 英特尔至强与至强 Phi)
英特尔 Nervana Neural Network Processor (简称英特尔 Nervana NNP)
英伟达 cuDNN (开发中)
我们将继续增加对更多其它设备的支持能力以及更强大的图形优化能力, 包括面向特定设备的 op 融合更理想的工作调度器以及更快的自定义 op 内核
如果您希望加入 nGraph 的贡献大家庭, 请访问我们的 GitHub 库: https://github.com/NervanaSystems/ngraph
来源: https://juejin.im/post/5ab2300df265da23945f5eb5