当前位置: 首页 > ai >正文

The Deep Learning Compiler: A Comprehensive Survey (深度学习编译器:全面调查)

(2021-3-1) The Deep Learning Compiler: A Comprehensive Survey (深度学习编译器:全面调查)

作者: Mingzhen Li; Yi Liu; Xiaoyan Liu; Qingxiao Sun; Xin You; Hailong Yang; Zhongzhi Luan; Lin Gan; Guangwen Yang; Depei Qian;
期刊: IEEE Transactions on Parallel and Distributed Systems (发表日期: 2021-3-1)
期刊分区: ㅤㅤ ㅤㅤIF 5.6 ㅤㅤ ㅤㅤ ㅤㅤ ㅤㅤ ㅤㅤ ㅤㅤSCI Q1 ㅤㅤ ㅤㅤ ㅤㅤ ㅤㅤ ㅤㅤ ㅤㅤ中科院 工程技术3区 ㅤㅤ ㅤㅤ
本地链接: Li 等 - 2021 - The Deep Learning Compiler A Comprehensive Survey.pdf
DOI: 10.1109/TPDS.2020.3030548
摘要: The difficulty of deploying various deep learning (DL) models on diverse DL hardware has boosted the research and development of DL compilers in the community. Several DL compilers have been proposed from both industry and academia such as Tensorflow XLA and TVM. Similarly, the DL compilers take the DL models described in different DL frameworks as input, and then generate optimized codes for diverse DL hardware as output. However, none of the existing survey has analyzed the unique design architecture of the DL compilers comprehensively. In this paper, we perform a comprehensive survey of existing DL compilers by dissecting the commonly adopted design in details, with emphasis on the DL oriented multi-level IRs, and frontend/backend optimizations. Specifically, we provide a comprehensive comparison among existing DL compilers from various aspects. In addition, we present detailed analysis on the design of multi-level IRs and illustrate the commonly adopted optimization techniques. Finally, several insights are highlighted as the potential research directions of DL compiler. This is the first survey paper focusing on the design architecture of DL compilers, which we hope can pave the road for future research towards DL compiler.

此文为机器辅助翻译,仅供个人学习使用,如有翻译不当之处欢迎指正

1 ABSTRACT

在各种深度学习(DL)硬件上部署不同的深度学习模型存在困难,这推动了学术界和工业界对深度学习编译器的研发。诸如TensorFlow XLA和TVM等多个深度学习编译器已被提出。同样,深度学习编译器将不同深度学习框架中描述的深度学习模型作为输入,然后为各种深度学习硬件生成优化代码作为输出。然而,现有调查均未全面分析深度学习编译器独特的设计架构。在本文中,我们通过详细剖析常用的设计,对现有的深度学习编译器进行了全面的综述,重点关注面向深度学习的多级中间表示(IR)以及前端/后端优化。我们对多级IR的设计进行了详细分析,并阐述了常用的优化技术。最后,我们强调了几个具有潜力的研究方向,作为深度学习编译器未来的研究方向。这是第一篇聚焦于深度学习编译器设计架构的综述论文,我们希望它能为深度学习编译器的未来研究铺平道路。

2 INTRODUCTION

深度学习(DL)的发展对各个科学领域产生了深远影响。它不仅在自然语言处理(NLP)[64]和计算机视觉(CV)[26]等人工智能领域展现出非凡价值,还在电子商务[36]、智慧城市[68]和药物研发[15]等更广泛的应用中取得了巨大成功。随着卷积神经网络(CNN)[54]、循环神经网络(RNN)[80]、长短期记忆网络(LSTM)[38]和生成对抗网络(GAN)[29]等多种功能强大的深度学习模型的出现,简化各种深度学习模型的编程对于实现其广泛应用至关重要。

在工业界和学术界的持续努力下,为了简化各种深度学习模型的实现过程,已经提出了多个广受欢迎的深度学习框架,如TensorFlow[1]、PyTorch[75]、MXNet[16]和CNTK[81]。尽管上述深度学习框架因其设计上的权衡各有优劣,但在支持现有深度学习模型与新兴深度学习模型交互时,互操作性对于减少冗余的工程工作变得十分重要。为了实现互操作性,开放神经网络交换格式(ONNX)[66]应运而生,它定义了一种统一的格式来表示深度学习模型,以便于在不同的深度学习框架之间进行模型转换。

与此同时,诸如矩阵乘法等独特的计算特性激发了芯片架构师设计定制化深度学习加速器以提高效率的热情。互联网巨头(如谷歌的张量处理单元(TPU)[44]、海思的神经网络处理器(NPU)[56]、苹果的仿生芯片(Bonic)[49])、处理器供应商(如英伟达的图灵(Turing)架构[72]、英特尔的神经网络处理器(NNP)[41])、服务提供商(如亚马逊的Inferentia[8]、阿里巴巴的含光芯片[7]),甚至初创企业(如寒武纪[57]、Graphcore[43])都在投入大量人力和资金开发深度学习芯片,以提升深度学习模型的性能。 一般来说,深度学习硬件可分为以下几类:1)采用软硬件协同设计的通用硬件;2)为深度学习模型完全定制的专用硬件;3)受生物脑科学启发的神经形态硬件。例如,通用硬件(如CPU、GPU)增加了特殊的硬件组件,如AVX512向量单元和张量核心,以加速深度学习模型的运行。而对于像谷歌TPU这样的专用硬件,其专用集成电路(如矩阵乘法引擎和高带宽内存)被设计用于将性能和能效提升到极致。在可预见的未来,深度学习硬件的设计将变得更加多样化。

为适应硬件的多样性,将计算高效地映射到深度学习硬件上至关重要。在通用硬件上,高度优化的线性代数库,如基本线性代数子程序(BLAS)库(例如英特尔数学核心函数库(MKL)和CUDA基本线性代数子程序库(cuBLAS)),是深度学习模型高效计算的基础。以卷积运算为例,深度学习框架将卷积转换为矩阵乘法,然后调用BLAS库中的通用矩阵乘法(GEMM)函数。此外,硬件供应商发布了专门为深度学习计算优化的库(例如英特尔深度学习库(MKL-DNN)和CUDA深度神经网络库(cuDNN)),涵盖前向和反向卷积、池化、归一化和激活等操作。还有更先进的工具被开发出来,以进一步加速深度学习操作。例如,TensorRT[73]支持图优化(如层融合)和低比特量化,拥有大量经过高度优化的GPU内核。在专用深度学习硬件上,也提供类似的库[43, 57]。然而,依赖这些库的缺点是,它们通常跟不上深度学习模型的快速发展,因此无法高效利用深度学习芯片。

为了解决深度学习库和工具的缺陷,同时减轻在每种深度学习硬件上手动优化深度学习模型的负担,深度学习领域开始借助特定领域的编译器来解决问题。很快,学术界和工业界便提出了几种广受欢迎的深度学习编译器,如TVM[17]、Tensor Comprehension[91]、Glow[79]、nGraph[21]和XLA[53]。深度学习编译器将深度学习框架中描述的模型定义作为输入,为各种深度学习硬件生成高效的代码实现作为输出。模型定义与具体代码实现之间的转换针对模型规格和硬件架构进行了高度优化。具体而言,它们融入了面向深度学习的优化方法,如层融合和操作符融合,这使得高效的代码生成成为可能。此外,现有的深度学习编译器还利用了通用编译器的成熟工具链(例如LLVM[51]),这为跨多种硬件架构提供了更好的可移植性。与传统编译器类似,深度学习编译器也采用分层设计,包括前端、中间表示(IR)和后端。然而,深度学习编译器的独特之处在于其多级IR的设计和深度学习特定的优化。

在本文中,我们通过将编译器设计剖析为前端、多级中间表示(IR)和后端,对现有的深度学习编译器进行了全面的综述,特别强调了IR设计和优化方法。据我们所知,这是第一篇对深度学习编译器设计进行全面综述的论文。具体而言,本文做出了以下贡献:

  • 我们剖析了现有深度学习编译器常用的设计架构,并对关键设计组件进行了详细分析,这些组件包括多级中间表示(IR)、前端优化(涵盖节点级、块级和数据流级优化)以及后端优化(包括硬件特定优化、自动调优和优化的内核库)。
  • 我们从多个方面对现有深度学习编译器进行了全面的分类,这与本综述中描述的关键组件相对应。这种分类的目的是为从业者在根据自身需求选择深度学习编译器时提供指导,同时为研究人员提供深度学习编译器的全面总结。
  • 我们对深度学习编译器在卷积神经网络(CNN)模型上的性能进行了量化比较,这些模型包括完整模型和轻量级模型。我们比较了端到端性能以及每层(由于卷积层主导推理时间,因此重点比较卷积层)的性能,以展示优化的有效性。评估脚本和结果已开源,可供参考 。
  • 我们强调了深度学习编译器未来发展的几个方向,包括动态形状和预处理/后处理、先进的自动调优、多面体模型、子图分区、量化、统一优化、可微编程和隐私保护,我们希望这些能推动深度学习编译器领域的研究。

本文的其余部分结构如下。第2节介绍深度学习编译器的背景,包括深度学习框架、深度学习硬件,以及硬件(FPGA)特定的深度学习代码生成器。第3节描述深度学习编译器的常见设计架构。第4节讨论深度学习编译器的关键组件,包括多级中间表示(IR)、前端优化和后端优化。第5节给出全面的分类体系。第6节进行定量的性能比较。第7节强调深度学习编译器研究的未来方向。

3 背景

3.1 深度学习框架

在本节中,我们将概述流行的深度学习框架。这里的讨论可能并不详尽,但旨在为深度学习从业者提供指导。图 1 展示了深度学习框架的全景,包括当前流行的框架、历史框架以及 ONNX 支持的框架。

TensorFlow:在所有深度学习框架中,TensorFlow 对语言接口的支持最为全面,包括 C++、Python、Java、Go、R 和 Haskell。TensorFlow 采用带有受限控制边的基本算子数据流图来表示可微程序 [78]。TensorFlow Lite 专为移动和嵌入式深度学习而设计,并提供了 Android 神经网络 API。为降低使用 TensorFlow 的复杂性,谷歌采用 Keras 作为 TensorFlow 核心的前端。此外,TensorFlow 中的即时执行模式(eager - mode)采用了类似于 PyTorch 的方法,以更好地支持动态计算图。

Keras:Keras [19] 是一个用于快速构建深度学习模型的高级神经网络库,用纯 Python 编写。虽然它本身不是一个深度学习框架,但 Keras 提供了一个高级 API,可以与 TensorFlow、MXNet、Theano 和 CNTK 集成。使用 Keras,深度学习开发者只需编写几行代码就能构建一个神经网络。此外,Keras 还可以与其他常见的深度学习包(如 scikit - learn)集成。然而,由于过度封装,Keras 的灵活性不足,这使得添加算子或获取底层数据信息变得过于困难。

PyTorch:Facebook 用 Python 重写了基于 Lua 的深度学习框架 Torch,并在张量级别重构了所有模块,从而推出了 PyTorch。作为最受欢迎的动态框架,PyTorch 在 Python 中嵌入了用于构建动态数据流图的原语,其控制流在 Python 解释器中执行。PyTorch 1.0 集成了 PyTorch 0.4 和 Caffe2 的代码库,创建了一个统一的框架。这使得 PyTorch 能够吸收 Caffe2 的优势,以支持高效的图执行和移动部署。FastAI [39] 是基于 PyTorch 上层封装的高级 API 层,它充分借鉴了 Keras,以简化 PyTorch 的使用。

Caffe/Caffe2:Caffe [42] 是由加州大学伯克利分校为深度学习和图像分类而设计的。Caffe 拥有命令行、Python 和 MATLAB API。Caffe 的简洁性使其源代码易于扩展,适合开发者进行深入分析。因此,Caffe 主要定位于研究领域,从一开始就广受欢迎。Caffe2 建立在原始 Caffe 项目的基础上,其代码结构与 TensorFlow 类似,但 API 更轻量级,并且更易于访问计算图中的中间结果。

MXNet:MXNet 支持多种语言 API,包括 Python、C++、R、Scala、Julia、Matlab 和 JavaScript。它旨在实现可扩展性,并从降低数据加载和 I/O 复杂性的角度进行设计 [16]。MXNet 提供了不同的编程范式:类似于 Caffe 和 TensorFlow 的声明式编程,以及类似于 PyTorch 的命令式编程。2017 年 12 月,亚马逊和微软基于 MXNet 联合发布了 Gluon [69],这是一个类似于 Keras 和 FastAI 的高级接口。Gluon 既支持灵活的动态图,也支持高效的静态图。

CNTK:CNTK 可以通过 Python、C++ 和 C# API,或者其自己的脚本语言(即 BrainScript)来使用。CNTK 旨在易于使用,并为生产环境中的大规模数据做好了准备 [37]。然而,CNTK 目前尚不支持 ARM 架构,这限制了它在移动设备上的使用。它使用类似于 TensorFlow 和 Caffe 的静态计算图,在这种图中,深度学习模型被视为通过有向图的一系列计算步骤。

PaddlePaddle:PaddlePaddle [11] 最初的设计与 Caffe 类似,每个模型都可以表示为一组层。然而,PaddlePaddle v2 参考 TensorFlow 采用了算子的概念,将层分解为更细粒度的算子,从而支持更复杂的深度学习模型。并且 PaddlePaddle Fluid 与 PyTorch 类似,因为它提供了自己的解释器,以避免 Python 解释器的性能限制。

ONNX:开放神经网络交换格式(ONNX)[66] 定义了一个可扩展的计算图模型,因此不同深度学习框架构建的计算图可以轻松转换为 ONNX 格式。有了 ONNX,在不同深度学习框架之间转换模型变得更加容易。例如,它允许开发者构建一个 MXNet 模型,然后使用 PyTorch 进行推理。如图 1 所示,ONNX 已经集成到 PyTorch、MXNet、PaddlePaddle 等框架中。对于一些尚未直接支持的深度学习框架(如 TensorFlow 和 Keras),ONNX 添加了转换器。

![[Pasted image 20250513103958.png]]

历史框架:由于深度学习领域的快速发展,许多历史深度学习框架不再活跃。例如,PyTorch 已经取代了 Torch [20]。作为最古老的深度学习框架之一,Theano [86] 不再维护。Deeplearning4J [85] 是一个基于 Java 和 Scala 的分布式深度学习框架,但由于缺乏庞大的开发者社区而变得不活跃。Chainer [87] 曾是动态计算图的首选框架,但现在已被具有类似功能的 MXNet、PyTorch 和 TensorFlow 所取代。

以前的工作 [10, 25, 35, 70, 82, 100] 已经在不同应用(如计算机视觉和图像分类)和不同硬件(如 CPU、GPU 和 TPU)上比较了深度学习框架的性能。有关每个深度学习框架的详细信息,读者可以参考 [37]。与这些工作不同,本综述侧重于深度学习编译器的研究,深度学习编译器提供了一种更通用的方法,可以在各种硬件上高效执行各种深度学习模型。

3.2 深度学习硬件

深度学习硬件根据通用性可分为三类:1)通过硬件和软件优化能够支持深度学习工作负载的通用硬件;2)通过完全定制的电路设计专注于加速深度学习工作负载的专用硬件;3)模仿人类大脑功能的神经形态硬件。

通用硬件:深度学习模型最具代表性的通用硬件是图形处理单元(GPU),它通过多核架构实现了高并行性。例如,

http://www.xdnf.cn/news/5892.html

相关文章:

  • milvus+flask山寨《从零构建向量数据库》第7章case2
  • FPGA图像处理(六)------ 图像腐蚀and图像膨胀
  • 【图像处理基石】遥感图像分析入门
  • stm32f103rct6中使用串口1 DMA通信程序含异常处理
  • 数据验证库pydantic的用法
  • 力扣热题——统计平衡排列的数目
  • 进程间通信分类
  • 数组练习题
  • 采购流程规范化如何实现?日事清流程自动化助力需求、采购、财务高效协作
  • 动态查找滚动容器(通用方案)
  • 故障诊断模型评估——混淆矩阵,如何使样本量一致(上)
  • 深入浅出之STL源码分析8_三个指针
  • PostgreSQL 恢复信息函数
  • Android Exoplayer多路不同时长音视频混合播放
  • window 显示驱动开发-报告图形内存(一)
  • ElasticSeach快速上手笔记-入门篇
  • VScode 的插件本地更改后怎么生效
  • 嵌入式学习--江协51单片机day5
  • React百日学习计划——Deepseek版
  • 销量预测评估指标
  • 【工作记录】Kong Gateway 入门篇之部署及简单测试
  • mpegts.js 播放flv视频报错:PIPELINE_ERROR_DECODE: video decode error!
  • FlashInfer - 安装
  • 理解 Open vSwitch (OVS)
  • 一键转换上百文件 Word 批量转 PDF 软件批量工具
  • 大模型——Crawl4AI为 LLM 和 RAG 准备高质量网页数据
  • ‌Element UI 双击事件(@cell-dblclick 与 @row-dblclick)
  • 函数式方法的实现(JDK8+)
  • 洛谷 P3374 【模板】树状数组 1(树状数组解法)
  • C#高级编程:设计模式原则