英特尔重磅开源nGraph:兼容所有框架的深度学习系统编译器

原文链接: https://juejin.im/post/5ab2300df265da23945f5eb5
策划编辑|Natalie
译者|核子可乐
编辑|Natalie
AI 前线导读: 英特尔正式宣布开源 nGraph,这是一款能兼容所有框架的深度神经网络(DNN)模型编译器,可用于多种硬件设备。利用 nGraph,数据科学家们将能够专注于数据科学工作,而无需分神于如何调整 DNN 模型以在不同设备上高效实现训练与运行。

更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)

在今天的文章中,我们将探讨工程当中出现的挑战与设计决策亮点。此外,感兴趣的朋友亦可参阅我们的 GitHub(https://github.com/NervanaSystems/ngraph) 、说明文档(http://ngraph.nervanasys.com/index.html/) 以及 SysML 论文(https://arxiv.org/abs/1801.08058) 以了解更多细节信息。

图 1. nGraph 生态系统

我们目前通过 nGraph 直接支持 TensorFlow、MXNet 以及 neon。CNTK、PyTorch 与 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/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迷你书和技能图谱。


你可能感兴趣的:(英特尔重磅开源nGraph:兼容所有框架的深度学习系统编译器)