当前位置:首页|资讯|深度学习

英特尔 nGraph——用于深度学习的中间描述、编译器和执行器

作者:星云Clustar发布时间:2024-01-10

原标题:英特尔 nGraph——用于深度学习的中间描述、编译器和执行器

来源:SysML 2018 ,

作者:Scott Cyphers, Arjun K. Bansal, Anahita Bhiwandiwalla, Jayaram Bobba, Matthew Brookhart, Avijit Chakraborty, Will Constable, Christian Convey, Leona Cook Omar Kanawi, Robert Kimball, Jason Knight, Nikolay Korovaiko, Varun Kumar, Yixing Lao , Christopher R. Lishka, Jaikrishnan Menon, Jennifer Myers , Sandeep Aswath Narayana, Adam Procter,Tristan J. Webb

译者:郭昊 ,编辑:星云Clustar

摘要

深度学习(DL)社区每年都会发布许多新颖的(神经网络)拓扑结构。在每个新拓扑上实现高性能仍然具有很大的挑战,因其需要依赖一定程度的手动工作。框架和硬件平台的激增加剧了这个问题。目前的方法,我们称之为“直接优化”。它需要在每个框架内进行深度优化,从而提高每个硬件后端(CPU,GPU,FPGA,ASIC)的训练性能,并且需要O(f p) 的计算复杂度,其中f是框架的数量,p是平台的数量。虽然通过诸如深度神经网络的英特尔数学核心库(MKL-DNN)之类的库提供了用于深度学习原语的优化内核,但仍有几种启发式编译器的方法可进一步优化性能。基于我们在创建neon(GPU上的快速深度学习库)方面的经验,我们开发了Intel nGraph, 这是一个开源的C++库,可简化跨框架和硬件平台实现优化深度学习性能的深度神经网络模型编译器。

最初支持的框架包括TensorFlow,MXNet和Intel neon框架。初始后端是英特尔架构CPU、英特尔Nervana神经网络处理器(NNP)和NVIDIA GPU。目前支持的编译器优化包括高效的内存管理和数据布局抽象。本文描述了我们的整体架构以及其核心组件。未来,我们设想将nGraph API支持扩展到更广泛的框架、硬件(包括FPGA和ASIC)、以及编译器的优化中去(通过有效的子图区分进行训练与推理优化,多节点和多设备扩展,以及特定硬件的复合操作)。

引言

深度学习框架是提供特定领域语言的库,用于定义深度学习计算和用于管理数据和执行计算的API。后端的实现是封装好的,所以相同的计算可以在多个后端上执行,例如CPU、GPU。我们采用类似LLVM [7] 等编译器的组织结构,将框架专用的计算定义转换为独立于框架的中间表示(IR),然后再将其编译成可在后端执行的形式。一个nGraph框架桥充当框架后端。每一个框架后端都有一个转换器,用于编译和解释IR,同时提供一套分配和执行API给框架桥,用来实现框架自身的API。编程语言如C++的编译器和编译深度学习框架的编译器之间的关键区别在于,深度学习框架操作的数据量大且可变,但是非常适合并行化。

1.1相关工作

谷歌的线性加速代数XLA [6]编译器为TensorFlow[4]的实验后端,与nGraph不同。XLA项目没有公开声明支持除TensorFlow之外的框架。

DMLC小组宣布将NNVM [8] 项目作为深度学习的轻量级图形优化库,后来发布的TVM [5] ,作为支持多个硬件平台和NNVM交互的预先编译器(AOT)。NNVM未明确运算符,因此不同的前端和后端无法相互兼容。nGraph、XLA和LLVM使用固定但可扩展的操作集。

DLVM [9] 是伊利诺伊大学Urbana-Champaign的一个项目,DLVM提出一种受LLVM启发的模块化的IR,具有完全控制流和无副作用的表示。更灵活的IR是否能够支持由更简单的数据流图IRs(如nGraph/XLA/NNVM)实现的性能优化,仍有待观察。

ONNX [2] 是我们最近参与的跨行业项目,旨在标准化用于推理的IR。nGraph IR 具有更丰富的功能集,包括对训练的支持,以及多种优化通道和后端运行。我们将以ONNX互操作性为目标。

在深度学习编译器和IR领域的活动突显了他们的需求,在这些共同努力下,随着领域的进步,我们期待良性的想法相互交流。我们相信nGraph可以通过框架桥和nGraph后端促进和影响标准化。

IR

nGraph IR 是由无状态操作节点组成的有向无环图。每个节点有零个或多个输入,以及零个或多个输出。节点可能具有影响其行为的其他常量属性,例如要汇总的轴。节点的输入和属性决定输出的形状和元素类型。

节点在多维数组上运行,称为张量。大多数框架将语义与特定的轴位置相关联。例如,图像可能存储在按批量大小、通道、高度和宽度排序的张量中。特定于框架的排序通常反映了op的实现和张量元素的布局。在处理视频和高维时间序列数据集时,来自框架操作的排名限制需要明确的张量重塑和轴的重排。除了框架用户可以直接访问的张量之外,nGraph在轴顺序和张量元素布局之间没有固定关系。

框架桥

框架使用一套特定于框架的符号来表示它的计算,称为计算图。后端使用图来解释或者编译计算。用于实现某种形式的用于计算导数的autodiff算法,可通过直接在图上计算导数,或者通过从现有图计算衍生计算的图来实现。属于nGraph库的框架桥使用该图来构造nGraph IR。

Apache MXNet[1]是一个核心C++库和一个用于多种前端语言交互的C API。机器学习模型可以通过Gluon强制定义或者通过标准的MXNet前端符号定义。在NNVM图中,模型的操作被表示为节点。MXNet-nGraph桥将NNVM接口翻译成nGraph IR。它为各个后端选择尽可能大的计算图,在nGraph IR上使用Autodiff(自动梯度计算)作为导数。编译后的nGraph函数可以与标准的MXNet 执行引擎连接。

TensorFlow [4] XLA框架支持在NNP等新型硬件框架上编译和执行TensorFlow图。在通过XLA执行计算期间,TensorFLow计算的HLO IR被发送到诸如CPU、GPU等新的硬件设备中。我们的桥插件将自身注册为新的XLA设备,将HLO IR映射到nGraph IR,并返回编译好的函数。在执行TensorFlow计算期间,TensorFlow调用函数处理输入数据,并返回生成的nGraph作为输出。

对于neon, 我们正在为nGraph API 创建一个Python 绑定,希望它可以与其他基于python的框架一起使用。

转换器

由nGraph库生成的IR 被发送给转换器,用于生成专门针对所选后端优化的代码。这些新优化后的后端可以提供新的服务如:模式匹配,活跃度分析,内存管理,并将张量元素布局和形状管理与后端内核选择相结合。

CPU的转换器使用MKL-DNN,为高度优化的内核生成优化后的调用序列。MKL-DNN提供的优化度比nGraph提供的更精细。其他转换器也可以使用CPU转换器用于为其后端所不支持的操作的子图。

英特尔的NNP处理器为深度学习工作负载所定制。他的转换器使我们能够充分利用硬件,重新使用CPU转换器进行为其他转换器所不支持的操作。

cuDNN[3]转换器动态生成连接到NVIDIA CUDA深度神经网络库的代码,用于常用内核,如卷积或者softmax。然后nGraph库将图形的一部分编译为LVMM IR表示,并使用LLXM的PTX发送后端来生成GPU汇编语言PTX。

nGraph本身支持集体通信原语(ALLReduce,Gather,Broadcast),以及作为核心图操作的点对点原型。转换器将生成相应通信库的调用。转换器将支持vanilla MPI,或者提供限制的优化通信方法。这种限制的一个例子是:仅在某个拓扑的同构集群上运行。

参考文献

[1] 2017. Apache MXNet. (2017). apache.org/Retrieved January 4, 2018 from https://mxnet.

[2] 2017. ONNX. (2017). Retrieved January 4, 2018 from http://onnx.ai

[3] 2018. NVIDIA cuDNN. (2018). Retrieved January 4, 2018 from https://developer.nvidia.com/cudnn

[4] Martín Abadi, Ashish Agarwal, Paul Barham, Eugene Brevdo, Zhifeng Chen,Craig Citro, Greg S. Corrado, Andy Davis, Jeffrey Dean, Matthieu Devin, San- jay Ghemawat, Ian Goodfellow, Andrew Harp, Geoffrey Irving, Michael Isard, Yangqing Jia, Rafal Jozefowicz, Lukasz Kaiser, Manjunath Kudlur, Josh Levenberg, Dan Mané, Rajat Monga, Sherry Moore, Derek Murray, Chris Olah, Mike Schus- ter, Jonathon Shlens, Benoit Steiner, Ilya Sutskever, Kunal Talwar, Paul Tucker, Vincent Vanhoucke, Vijay Vasudevan, Fernanda Viégas, Oriol Vinyals, Pete War- den, Martin Wattenberg, Martin Wicke, Yuan Yu, and Xiaoqiang Zheng. 2015. TensorFlow: Large-Scale Machine Learning on Heterogeneous Systems. (2015).https://www.tensorflow.org/ Software available from tensorflow.org.

[5] TianqiChen,ThierryMoreau,ZihengJiang,andHaichenShen.2017.TVM:AnEnd to End IR Stack for Deploying Deep Learning Workloads on Hardware Platforms.(Aug 2017). http://tvmlang.org/2017/08/17/tvm-release-announcement.html

[6] Google. 2017. XLA Overview. (2017). Retrieved January 5, 2018 from https://www.tensorflow.org/performance/xla/

[7] Chris Lattner and Vikram Adve. 2004. LLVM: A Compilation Framework for Life-long Program Analysis & Transformation. In Proceedings of the 2004 International Symposium on Code Generation and Optimization (CGO’04). Palo Alto, California.

[8] Amazon Web Service AI team. 2017. (Oct 2017). http://tvmlang.org/2017/10/06/nnvm- compiler- announcement.html

[9] Richard Wei, Vikram S. Adve, and Lane Schwartz. 2017. DLVM: A modern compiler infrastructure for deep learning systems. CoRR abs/1711.03016 (2017). arXiv:1711.03016 http://arxiv.org/abs/1711.03016

原文链接:http://www.sysml.cc/doc/132.pdf


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1