【论文阅读】The Deep Learning Compiler: A Comprehensive Survey

这篇具有很好参考价值的文章主要介绍了【论文阅读】The Deep Learning Compiler: A Comprehensive Survey。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

论文来源:Li M , Liu Y , Liu X ,et al.The Deep Learning Compiler: A Comprehensive Survey[J]. 2020.DOI:10.1109/TPDS.2020.3030548.

这是一篇关于深度学习编译器的综述类文章。

什么是深度学习编译器

深度学习(Deep Learning)编译器将深度学习框架描述的模型在各种硬件平台上生成有效的代码实现,其完成的模型定义到特定代码实现的转换将针对模型规范和硬件体系结构高度优化。具体来说,它们结合了面向深度学习的优化,例如层融合和操作符融合,实现高效的代码生成。

此外,现有的编译器还采用了来自通用编译器(例如LLVM)的成熟工具链,对各种硬件体系结构提供了更好的可移植性。

简而言之,深度学习编译器通过对深度学习模型和计算图的优化,以及对硬件资源的充分利用,提高了深度学习模型的性能和效率。这使得深度学习模型在边缘设备和嵌入式系统上能够更好地运行。

深度学习编译器的基本架构

与传统编译器类似,深度学习编译器也采用分层设计,其通用设计架构主要包括编译器前端和编译器后端,其中IR(中间语言)分布在前端和后端,它是程序的抽象,用于程序优化。

深度学习模型在深度学习编译器中被转换为多级IR,其中高阶IR驻留在前端,低阶IR驻留在后端。基于高阶IR,编译器前端负责与硬件无关的转换和优化。基于低阶IR,编译器后端负责特定于硬件的优化、代码生成和编译。

高阶IR,也称为graph IR,表示计算和控制流,与硬件无关。高阶IR的设计挑战是计算和控制流的抽象能力,能够捕获和表达不同的DL模型。高阶IR的目标是建立控制流和op(算子)与数据之间的依赖关系,以及为图级优化提供接口。它还包含用于编译的丰富语义信息,并为定制算子提供可扩展性。

低阶IR是为特定于硬件的优化和针对不同硬件目标的代码生成而设计的。因此,低阶IR应该足够细粒度,以反映硬件特征并表示特定于硬件的优化。

前端将现有的Deep Learning框架中的模型作为输入,然后将该模型转换为计算图表示(例如,graph IR)。前端需要实现多种格式转换,以支持不同框架下的多种格式。计算图优化结合了通用编译器的优化技术和Deep Learning特定优化技术,减少了graph IR的冗余,提高了图graph IR的效率。这样的优化可以分为:

  1. node节点级(例如,nop消除和零维张量消除)

  2. block块级(代数简化、算子融合、op下降)

  3. 数据流层(例如CSE、DCE、静态内存规划和布局转换)。

前端完成后,生成优化的计算图并传递给后端,后端将高阶IR转换为低阶IR并执行特定于硬件的优化。一方面,它可以直接将高阶IR转换为第三方工具链,如LLVM IR,以利用现有的基础设施进行通用优化和代码生成。另一方面,它可以利用DL模型和硬件特性的先验知识,通过定制的编译通道,实现更高效的代码生成。通常应用的特定于硬件的优化包括硬件内在映射、内存分配和获取、内存延迟隐藏、并行化以及面向循环的优化。

【论文阅读】The Deep Learning Compiler: A Comprehensive Survey,论文阅读,机器学习,论文阅读,人工智能,深度学习,神经网络,深度学习编译器

前端优化

在构建计算图之后,前端应用图级优化。许多优化更容易在图级识别和执行,因为图提供了计算的全局视图。这些优化只应用于计算图,而不是后端实现。因此,它们是独立于硬件的,可以应用于各种后端目标。

前端优化通常由passes定义,可以通过遍历计算图的节点并执行图转换来应用。前端提供了如下方法:

  1. 从计算图中捕获特定的特征;

  2. 重写图以进行优化。

除了预定义的passes,开发人员还可以在前端定义定制的passes。一旦一个Deep Learning模型被导入并转换为一个计算图,大多数DL编译器可以确定每个操作的输入张量和输出张量的形状。

节点级优化

计算图的节点足够粗粒度,可以在单个节点内进行优化。节点级优化包括:

  1. 节点消除(消除不必要的节点)

  2. 节点替换(用其他低成本节点替换节点)

在通用编译器中,Nop消除删除占用少量空间但不指定操作的no-op指令;在DL编译器中,Nop消除负责消除缺少足够输入的操作。例如,只有一个输入张量的和节点可以被消除,填充宽度为零的填充节点可以被消除。

块级优化
代数简化

代数简化优化包括:

  1. 代数识别

  2. 强度约简,我们可以用更便宜的算子取代更昂贵的算子

  3. 常数折叠,用它可以用它们的值替换常量表达式。

算子融合

算子融合是DL编译器不可缺少的优化方法。它能够更好地共享计算,消除中间分配,通过结合loop nests进一步优化,并减少launch和同步开销。

算子Sinking

算子Sinking这种优化将转置等操作置于批处理归一化、ReLU、sigmoid和channel shuffle等操作之下。

通过算子Sinking这种优化,许多相似的操作彼此之间移动得更近,为代数简化创造了更多的机会。

数据流级优化
通用子表达式消除(CSE)

如果表达式E的值之前已经计算过,并且E的值在之前的计算之后没有改变,那么它就是通用子表达式。

在这种情况下,E的值只计算一次,并且可以使用已经计算出的E的值来避免在其他地方重新计算。深度学习编译器在整个计算图中搜索公共子表达式,并用之前的计算结果替换下面的公共子表达式。

死代码消除(DCE)

如果一组代码的计算结果或副作用没有被使用,那么它就是死代码。

DCE优化会删除死代码。死代码通常不是由程序员引起的,而是由其他图优化引起的。因此DCE和CSE是在其他图优化之后应用的。

静态内存规划

使用静态内存规划优化以尽可能重用内存缓冲区,通常有两种方法:

  1. in-place内存共享

  2. 标准内存共享

in-place内存共享使用相同的内存作为操作的输入和输出,只在计算之前分配一个内存副本。标准内存共享重用以前操作的内存,而不重叠。静态内存规划是离线完成的,这允许应用更复杂的规划算法。

布局转变

布局转换试图找到最佳的数据布局来存储张量到计算图中,然后将布局转换节点插入到图中。

注意,这里不执行实际的转换,而是在编译器后端计算计算图时执行转换。事实上,相同操作在不同的数据布局中的性能是不同的,最佳布局在不同的硬件上也是不同的。

后端优化

特定于硬件的优化

特定于硬件的优化也称为目标相关优化,用于获得针对特定硬件的高性能代码。应用后端优化的一种方法是将低层IR转换为LLVM IR,利用LLVM基础设施生成优化的CPU/GPU代码。另一种方法是使用DL领域知识设计定制优化,更有效地利用目标硬件。

以下有五种在现有DL编译器中广泛采用的方法:

硬件固有的映射

硬件内在映射可以将一定的一组低层IR指令转换为已经在硬件上高度优化的内核。在TVM中,硬件本征映射采用可扩展张量化方法实现,可声明硬件本征的行为和本征映射的降低规则。这种方法使编译器后端能够将硬件实现和高度优化的手工微内核应用到特定的操作模式中,从而获得显著的性能提升。

内存分配和获取

内存分配是代码生成中的另一个挑战,特别是对于gpu和定制加速器。例如,GPU主要包含共享内存空间(内存大小有限,访问时延较低)和本地内存空间(容量大,访问时延较高)。这样的内存层次结构需要有效的内存分配和获取技术来改善数据局部性。为了实现这一优化,TVM引入了内存作用域的调度概念。内存作用域调度原语可以将计算阶段标记为共享的或线程本地的。对于标记为共享的计算阶段,TVM生成具有共享内存分配和协同数据获取的代码,并在适当的代码位置插入内存屏障以保证正确性。

内存延迟隐藏

通过对执行管道重新排序,内存延迟隐藏也是在后端使用的一项重要技术。由于大多数DL编译器支持CPU和GPU上的并行化,内存延迟隐藏可以自然地通过硬件实现(例如,GPU上的扭曲上下文切换)。但是对于具有解耦访问库(DAE)体系结构的TPU类加速器,后端需要执行调度和细粒度同步以获得正确和高效的代码。为了获得更好的性能和减轻编程负担,TVM引入了虚拟线程调度原语,允许用户在虚拟多线程架构上指定数据并行度。然后,TVM通过插入必要的内存屏障,并将来自这些线程的操作穿插到单个指令流中,从而降低了这些实际上并行的线程,这形成了每个线程更好的执行管道,以隐藏内存访问延迟。

面向循环优化

面向循环的优化也应用于后端,为目标硬件生成高效的代码。由于Halide和LLVM已经集成了这样的优化技术,一些DL编译器在后端利用了Halide和LLVM。面向循环优化中应用的关键技术包括循环融合、滑动窗口、平铺、循环重排序和循环展开。

并行化

由于现代处理器通常支持多线程和SIMD并行性,编译器后端需要利用并行性来最大化硬件利用率,以实现高性能。

Halide使用一个叫做parallel的调度原语来指定线程级别并行化的循环的并行化维度,并通过将标记为parallel的循环维度与块和线程的注释进行映射来支持GPU并行化。它将一个大小为n的循环替换为一个宽为n的向量语句,该向量语句可以通过硬件内在映射映射到特定于硬件的SIMD操作码。

Stripe发展了一种多面体模型的变体,称为嵌套多面体模型,该模型引入了并行多面体块作为迭代的基本执行元素。在此扩展之后,一个嵌套的多面体模型可以检测平铺和跨步级别之间的层次并行性。

自动调优

由于在特定于硬件的优化中参数调优有巨大的搜索空间,因此有必要利用自动调优来确定最佳参数配置。在A Comprehensive Survey[4]这篇论文中研究的DL编译器中,TVM、TC和XLA支持自动调优。通常,自动调优实现包括Parameterization(参数化)、代价模型、搜索技术和加速四个关键部分。

Parameterization(参数化)

数据参数描述数据的规格,如输入的形状。目标参数描述在优化调度和代码生成期间要考虑的特定于硬件的特征和约束。例如,对于GPU目标,需要指定共享内存和寄存器大小等硬件参数。

优化选项包括优化调度和相应的参数,如面向循环的优化和瓷砖大小。在TVM中,既考虑了预定义调度,也考虑了自定义调度,还考虑了参数。

代价模型

自动调优中不同代价模型的比较如下:

  1. 黑箱模型:该模型只考虑最终的执行时间,而不考虑编译任务的特征。建立黑盒模型很容易,但是如果没有任务特性的指导,很容易导致更高的开销和更少的最优解。TC采用了这种模式。

  2. 基于ML的代价模型:基于ml的成本模型是一种使用机器学习方法预测性能的统计方法。它使模型能够随着新配置的探索而更新,这有助于实现更高的预测精度。TVM和XLA采用这种模型,分别是梯度树提升模型(GBDT)和前馈神经网络。

  3. 预定义代价模型:基于预定义代价模型的方法,期望根据编译任务的特点建立一个完美的模型,能够评估任务的整体性能。与基于ML的模型相比,预定义模型在应用时产生的计算开销更少,但需要在每个新的DL模型和硬件上重新构建模型,需要大量的工程工作。文章来源地址https://www.toymoban.com/news/detail-609279.html

到了这里,关于【论文阅读】The Deep Learning Compiler: A Comprehensive Survey的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [论文阅读笔记25]A Comprehensive Survey on Graph Neural Networks

    这是一篇GNN的综述, 发表于2021年的TNNLS. 这篇博客旨在对GNN的基本概念做一些记录. 论文地址: 论文 对于图像数据来说, CNN具有平移不变性和局部连接性, 因此可以在欧氏空间上良好地学习. 然而, 对于具有图结构的数据(例如社交网络 化学分子等)就需要用GNN来学习. 最早期的GN

    2024年02月11日
    浏览(45)
  • [论文阅读笔记] TRACE: A Comprehensive Benchmark for Continual Learning In Large Language Models

    TRACE: A Comprehensive Benchmark for Continual Learning In Large Language Models arXiv2023 复旦大学 Benchmark、Continual Learing、LLMs 已经对齐过的大模型 (Aligned LLMs )能力很强,但持续学习能力缺乏关注; 目前CL的benchmark对于顶尖的LLMs来说过于简单,并且在指令微调存在model的potential exposure。(这里的

    2024年01月18日
    浏览(43)
  • 论文阅读--Diffusion Models for Reinforcement Learning: A Survey

    一、论文概述 本文主要内容是关于在强化学习中应用扩散模型的综述。文章首先介绍了强化学习面临的挑战,以及扩散模型如何解决这些挑战。接着介绍了扩散模型的基础知识和在强化学习中的应用方法。然后讨论了扩散模型在强化学习中的不同角色,并对其在多个应用领域

    2024年03月20日
    浏览(40)
  • 【论文阅读】Deep Graph Contrastive Representation Learning

    作者:Yanqiao Zhu Yichen Xu 文章链接:Deep Graph Contrastive Representation Learning 代码链接:Deep Graph Contrastive Representation Learning 现实世界中,图的标签数量较少,尽管GNNs蓬勃发展,但是训练模型时标签的可用性问题也越来越受到关心。 传统的无监督图表征学习方法,例如DeepWalk和nod

    2024年01月18日
    浏览(43)
  • [论文阅读]Self-Supervised Learning for Videos: A Survey

    Schiappa, M. C., Rawat, Y. S., Shah, M. (2023). Self-Supervised Learning for Videos: A Survey. ACM Comput. Surv., 55(13s), 1–37. https://doi.org/10.1145/3577925 论文中文名称:视频的自监督学习综述 摘要: 深度学习在各个领域取得的显著成功依赖于大规模标注数据集的可用性。然而,获取标注是昂贵且需要巨

    2024年01月17日
    浏览(42)
  • 论文阅读--Deep Learning-Based Channel Estimation

    论文信息: Soltani M, Pourahmadi V, Mirzaei A, et al. Deep learning-based channel estimation[J]. IEEE Communications Letters, 2019, 23(4): 652-655. 创新点: 信道时频响应建模为图像,将OFDM的时频特性视做一种2D图像信息。 将导频位置的通道响应视为LR图像,并将估计的通道响应视为HR图像。 利用基于深度

    2024年02月01日
    浏览(36)
  • 材料论文阅读/中文记录:Scaling deep learning for materials discovery

    Merchant A, Batzner S, Schoenholz S S, et al. Scaling deep learning for materials discovery[J]. Nature, 2023: 1-6. 全文速览 这篇文章主要讲了一种名为 GNoME 的 材料发现框架 。该框架利用机器学习和高通量计算方法,通过预测材料的稳定性和性质,加速新材料的发现。文章介绍了GNoME的 工作原理和方

    2024年02月02日
    浏览(50)
  • 论文阅读【14】HDLTex: Hierarchical Deep Learning for Text Classification

    论文十问十答: Q1论文试图解决什么问题? 多标签文本分类问题 Q2这是否是一个新的问题? 不是 Q3这篇文章要验证一个什么科学假设? 因为文本标签越多,分类就越难,所以就将文本类型进行分层分类,这样就可以加大文本分类的准确度。 Q4有哪些相关研究?如何归类?谁

    2023年04月09日
    浏览(29)
  • Deep learning of free boundary and Stefan problems论文阅读复现

    在这项工作中,作者提出了一个基于物理信息神经网络的多网络模型,来解决一类一般的正和逆自由边界问题,称为Stefan问题。具体地说,用两个深度神经网络来近似未知解以及任何移动边界。作者提供了三个案例研究(一维一相Stefan问题,一维二相Stefan问题,二维一相Ste

    2024年02月08日
    浏览(32)
  • 【论文阅读记录】地震数据增强方法:APPLICATIONS OF DEEP LEARNING IN SEISMOLOGY

     随机位移(Random shift)技术对于提高模型泛化能力的重要性。通过将地震训练数据在时间上进行随机位移,可以减少模型对于特定时间点的位置偏见,从而提高其对地震波到达时间预测的准确性。 目标:利用随机位移增强地震波到达时间(如P波)的预测准确性,通过在每

    2024年04月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包