1. 概述

深度学习(DL)编译器的产生有两方面的因素:深度学习模型的广泛应用,以及深度学习芯片的层出不穷。

一方面,我们现在有非常多深度学习的应用,比如自动驾驶技术常常需要用到计算机视觉方面的模型,如行人检测,车道线识别等,智能家居设备常常需要用到自然语言处理(NLP)和语音识别方面的模型,甚至在生物学领域深度学习可以解决难倒了几代科学家的蛋白质折叠问题。

另一方面,这些应用要投入使用,面对的是非常多样的部署环境。比如自动驾驶相关的计算机视觉模型需要部署到车辆上,智能家居相关的自然语言处理模型需要部署到智能音箱上,另外一些应用还可能部署到手机上、数据中心的计算集群上等。而随着各种深度学习专用芯片的出现,如Google的TPU,Nvidia的Turing,Intel NNP,Amazon的Inferentia,阿里平头哥的含光,华为海思的NPU等等,部署环境变得更加的多样化。
gap

那么如何使不同的深度学习应用在不同的部署环境(如不同的硬件、不同的操作系统、不同的容器执行环境、不同的运行时计算库、不同的加速器类型等)上获得最优的性能呢?这正是深度学习编译器研究的问题。

2. 什么是深度学习编译器

深度学习编译器的任务,是把输入的深度学习模型,转化成不同硬件上优化的代码进行输出。
这个过程和传统编译器所做的事情非常类似,因此取名“深度学习编译器”。

但深度学习编译器也有和传统编译器不同的地方。最大的不同在于输入不同,传统编译器输入的是高级语言,比如C/C++/ObjC,而深度学习编译器输入的是深度学习模型。这样的输入使得深度学习的领域知识可以在编译的过程中被引入进来,从而更好地优化部署的代码。这也是为什么不直接用传统编译器来编译深度学习相关应用的原因。

参考文献:

  1. 机器学习编译概述
  2. 为什么需要AI编译器?跟传统编译器啥关系吗?【AI编译器】系列第一篇
  3. The Golden Age of Compiler Design in an Era of HW/SW Co-design by Dr. Chris Lattner
GSL(发音为Gie-sel,是图形替换语言的缩写)是一种嵌入在Python中的声明性特定于域的语言,用于在 深度学习 编译器 中定义图替换规则。 深度学习 编译器 在模型的计算图上执行图替换。 常见的图形替换过程遵循match-capture-rewrite过程,这可能导致重复样板代码。 GSL帮助用户专注于图形替换的本质-源模式和目标模式的结构以及对其施加的约束,从而减少了重复工作。 GSL的当前实现基于 ,可以用作其的替代方法。 由于它们的相似性,可以将其移植到其他图形级IR。 声明式的。 该语言使用户可以专注于图替换的本质。 他们不 需要 关心替换算法的细节。 很简单。 该语言充分利用了Python的功能,使其简洁明了。 只需几行代码就可以定义替换规则并将其应用于图。 富有表现力的。 该语言支持具有多个甚至可变参数输出节点的模式。 可以使用属性表达式来指定对运算符属性 使用Jupyter编辑markdown文件: ://d2l.ai/chapter_appendix-tools-for-deep-learning/jupyter.html#markdown-files-in-jupyter 如何在Github上发送PR: : 样式指南: :
TVM是 深度学习 系统的 编译器 堆栈。 它旨在缩小以生产力为重点的 深度学习 框架与以性能和效率为重点的硬件后端之间的差距。 TVM与 深度学习 框架协同工作,为不同的后端提供端到端编译。 打开 深度学习 编译器 堆栈文档 | 贡献者 | 发行说明 Apache TVM(孵化)是 深度学习 系统的 编译器 堆栈。 它旨在缩小以生产力为中心的 深度学习 框架与以性能和效率为中心的硬件后端之间的差距。 TVM 与 深度学习 框架配合使用,为不同的后端提供端到端编译。 许可 :copyright: Contributors 在 Apache-2.0 许可下获得许可。 贡献于 TVM TVM 采用 apache committer 模型,我们旨在创建一个由社区维护和拥有的开源项目。 查看贡献者指南 致谢 我们在构建 TVM 时从以下项目中学到了很多东西。 Halide:TVM 的部分 TIR 和算术简化模块源自 Halide。 我们还从 Halide 中学习并改编了一些降低管道的部分。 Loopy:使用整数集分析及其循环转换原语。 Theano:循环符号扫描算子的设计灵感。
开放 深度学习 编译器 堆栈文档|贡献者|社区|发行说明Apache TVM 是用于 深度学习 系统的 编译器 堆栈。它旨在缩小以生产力为中心的 深度学习 框架与以性能和效率为中心的硬件后端之间的差距。TVM 与 深度学习 框架配合使用,为不同的后端提供端到端编译。执照:copyright: Contributors 在Apache-2.0许可下获得许可。为 TVM 做出贡献TVM 采用 apache committer 模型,我们旨在创建一个由社区维护和拥有的开源项目。查看贡献者指南。致谢在构建 TVM 时,我们从以下项目中学到了很多东西。Halide : TVM 的部分 TIR 和算术简化模块源自 Halide。我们还从 Halide 中学习并改编了一些降低管道的部分。Loopy :使用整数集分析及其循环转换原语。Theano :循环符号扫描算子的设计灵感。
【论文笔记】视频物体检测(VID)系列 FGFA:Flow-Guided Feature Aggregation for Video Object Detection qq_52896125: 您能给解释一下吗 C++编程笔记:dll的生成与使用 A1200266: 请问隐式链接时,如何不同VS版本的调用?如VS2019写dll,生成h\lib\dll,如何用隐式链接在VS2008中使用? 解读Batch Normalization m0_64967806: 请教博主标准化的时候为什么还多了一个参数呢 IPython Notebook error - Unreadable Notebook: Unsupported JSON nbformat m0_70230434: 怎么搞呀,我现在出现了这个问题 MFC界面编程1:GDI+实现不规则窗体 Aili_Xiao: GDI+绘制背景后,上面的按钮无法显示是怎么回事?