在今天的文章中,咱们将探讨工程当中出现的挑战与设计决策亮点。此外,感兴趣的朋友亦可参阅咱们的 GitHub(https://github.com/NervanaSystems/ngraph) 、说明文档(http://ngraph.nervanasys.com/index.html/) 以及 SysML 论文(https://arxiv.org/abs/1801.08058) 以了解更多细节信息。html
图 1. nGraph 生态系统git
咱们目前经过 nGraph 直接支持 TensorFlow、MXNet 以及 neon。CNTK、PyTorch 与 Caffe2 则可经过 ONNX 实现间接支持。用户能够将这些框架运行在多种设备之上,具体包括英特尔架构、GPU、英特尔 Nervana 神经网络处理器(简称 NNP)等等。将来,咱们还将在发展路线图当中引入更多设备 / 框架支持选项。github
当深度学习(简称 DL)框架首次成为用于模型训练与推理的工具时,其在设计层面仍然专门针对特定设备的内核做出优化。所以,模型定义当中存在的诸多设备特性使得深度学习模型在面对其它或更高级设备时,每每带来更为复杂的适应性与可移植性挑战。算法
在传统方案当中,算法开发人员须要经历枯燥的过程才可以将模型引入其它设备当中。此外,模型在不一样框架上的运行也会带来众多难题,这是由于开发人员必须将模型自己与设备特性进行拆分,并将其转换为新框架中的相似运算,最终对首选旋转设备进行必要调整以立足新框架进行配置。后端
正由于如此,咱们设计出了 nGraph 库,但愿大大减小相关工程任务的复杂性。虽然经过英特尔 Math Kernel Library for Deep Neural Networks(简称英特尔 MKL-DNN)等为及项目可以实现深度学习基元的内核优化,但咱们认为提供更多编译器选项将可以进一步优化方案的性能表现。微信
安装 nGraph 库并利用该库编写或编译框架,便可运行模型的训练与推理任务。您可经过任意受支持系统上的命令行将 nGraph 指定为框架后端。咱们的 Intermediate Representation(简称 IR,即中间表示)层负责处理所有设备抽象细节,并容许开发人员专一于本身的数据科学、算法以及模型工做——从而完全摆脱机器码带来的困扰。网络
下面来看更多细节信息:架构
nGraph 核心会建立一个强类型及设备中立式无状态计算表示图。图中的各个节点,或者说 op,表明着计算中的一个步骤,且各个步骤会从零个或更多张量输入内容中生成零个或更多张量输出结果。咱们的理念是,nGraph 的运做应做为深度学习框架当中更为复杂的 DNN 运算的基石,并确保在推理计算与训练及推理计算之间取得理想的效率平衡点。框架
咱们为每套受支持框架开发出对应的框架桥接,其做为 nGraph 核心与框架之间的中转载体。咱们目前已经面向 TensorFlow/XLA、MXNet 以及 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://ai.intel.com/ngraph-a-new-open-source-compiler-for-deep-learning-systems/
更多干货内容,可关注AI前线,ID:ai-front,后台回复「AI」、「TF」、「大数据」可得到《AI前线》系列PDF迷你书和技能图谱。