本文整理深度学习编译器相关的论文和来自知乎等网站的相关材料[1]。
1 深度学习编译器相关论文
1.1 Survey
The Deep Learning Compiler: A Comprehensive Survey
DL编译器的survey,总结了DL编译器的设计框架
An In-depth Comparison of Compilers for Deep Neural Networks on Hardware
比较了Halide, XLA, TVM, TC等几种编译器的性能
1.2 TVM系列
OSDI'18 - TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
文章[2]完整介绍了 TVM 的设计的背景,目标,技术难点和解决方案。该文章确定了整个 TVM 的技术架构,包括硬件无关的图级别的优化,硬件相关的算子优化,基于代价模型的搜索寻优等等。快速了解此文可以阅读已有的一些论文阅读笔记。
IWMLPL'18 - Relay - A New IR for Machine Learning Frameworks
Relay[3]是TVM 新的中间表示形式,不同框架的模型先转化成 Relay,然后在Relay 上来做图优化。如何评价TVM的新IR(Relay)?
Relay: A High-Level Compiler for Deep Learning[4]
TVM的第二代high-level IR,类似于编程语言,设计了语法规则,引入了let-binding机制。DL背景的开发者可以使用data flow graph来定义计算图, PL(Program Language)背景的研究人员可以使用let binding来定义计算图。Let binding机制通过compute scope解决了AST的二义性问题。
1.3 Auto-tuning相关工作
NIPS'18 - Learning to Optimize Tensor Programs
文章[5]发表于 2018 年的NIPS,详细介绍了autotvm 自动寻优方案。文章是对论文[2]的第5节的一个更加详细的扩充。主要观点在 OSDI2018 的论文里都有描述,论文 1 没有涉及的的内容是引入了 transfer learning 的应用。
OSDI'20 - Ansor: Generating High-Performance Tensor Programs for Deep Learning
Ansor 论文[6]发表于2020 年 OSDI , 其核心目标是生成高效的程序,具体包括两个部分(1)如何扩大搜索空间(2)如何提高搜索的性能和效率。
为了扩大搜索空间,改进了TVM 基于模板的搜索空间定义,通过层次化搜索的方案,解耦 high-level 结构和low-level 细节。
为了提升搜索的性能和效率,ansor 改进了TVM 的搜索策略,将搜索算法从模拟退火算法修改成了遗传算法(原文是进化搜索 evolutionary search,国内多翻译为遗传算法),从而能够有效的跳出局部最优。
把schedule分成sketch和annotation两层,sketch相当于TVM的schedule template,Ansor 可以先搜索出sketch,再搜索annotation。
FlexTensor: An Automatic Schedule Exploration and Optimization Framework for Tensor Computation on Heterogeneous System
FlexTensor [7]
- CHAMELEON: ADAPTIVE CODE OPTIMIZATION FOR EXPEDITED DEEP NEURAL NETWORK COMPILATION
1.4 Polyhedral
PLDI'21 - AKG: Automatic Kernel Generation for Neural Processing Units using Polyhedral Transformations [8]
MICRO'20 - Optimizing the Memory Hierarchy by Compositing Automatic Transformations on Computations and Data [9]
上面面三篇公众号文章介绍Poly的一些基本原理和在DL领域中的应用,作者是要术甲杰,是 Poly研究领域的博士
同样是要术甲杰写的介绍Pluto算法的文章
1.5 Others
Tensorflow XLA/JAX
MLIR
GLOW @facebook
Halide
Tensor comprehension
FUSIONSTITCHING: DEEP FUSION AND CODE GENERATION FOR TENSORFLOW COMPUTATIONS ON GPUS
用shared memory来实现更激进的operator fusion策略
- Automatic differentiation in ML: Where we are and where we should be going
- Automatic Differentiation in Machine Learning: a Survey
两篇关于自动微分的survey
schedule和execution阶段进行联合优化
阿里杨军的系列文章
用TVM在神威超算上生成算子
TensorFow中的图优化
2 其它相关文档
2.1 AI编译器@金雪峰
2.2 漫游深度学习编译器@知乎
- TVM系列「一」TVM概览
- TVM系列「二」TVM学习资源
- TVM系列「三」TVM官方文档的结构
- TVM系列「四」TVM的使用:compute+schedule双剑合璧
- TVM系列「五」TVM整体架构及其代码生成
- TVM系列「六」Relay IR与Relay Pass
- TVM系列「七」AutoTVM(AutoTune)
- TVM系列「八」AutoScheduler「Ansor」
2.3 TVM代码走读【@知乎专栏】
- TVM代码走读(一) ONNX前端
- TVM代码走读(二) 算子实现
- TVM代码走读(三) 图优化1--初识PASS
- TVM代码走读(四) 图优化2--TVM RELAY树结构
- TVM代码走读(五) 图优化3-- Constant Folding
- TVM代码走读(六) 图优化4-- Fuse ops
- TVM代码走读(七) 模型编译1--调用链
- TVM代码走读(八) 模型编译2--编译优化
- TVM代码走读(九) 计算和调度
- TVM代码走读(十) AutoTvm
- TVM代码走读(十一) te::Stage
- TVM代码走读(十二) lower--phase 0
- TVM代码走读(十三) arith::analyzer
- TVM代码走读(十四) lower--ScheduleOps
- TVM代码走读(十五) lower--relay func到lower的流程梳理
- TVM代码走读(十六) lower--phase0后续流程
- TVM代码走读(十七) lower--phase 1
- TVM代码走读(十八) lower--LoopPartition(phase 2)
2.4 深度学习编译器@柳嘉强
- 1. 深度学习编译器 - 引言
- 2. 深度学习编译器 - 前端
- 3. 深度学习编译器 - 图表示
- 4. 深度学习编译器 - 自动微分
- 5. 深度学习编译器 - 图优化
- 5. 深度学习编译器 - 图优化(续)
- 6. 深度学习编译器 - 低精度计算之量化
- 7. 深度学习编译器 - 算子的高效实现
2.5 从零开始学习深度学习编译器
- 一,深度学习编译器及TVM 介绍
- 二,TVM中的scheduler
- 三,基于ONNX模型结构了解TVM的前端
- 四,解析TVM算子
- 五,TVM Relay以及Pass简介
- 六,TVM的编译流程详解
- 七,万字长文入门TVM Pass
- 八,TVM的算符融合以及如何使用TVM Pass Infra自定义Pass
- 九,TVM的CodeGen流程
- 十,TVM的整体把握
- 十一,初识MLIR
- 十二,MLIR Toy Tutorials学习笔记一
- 十三,如何在MLIR里面写Pass?
- 十四,MLIR Toy Tutorials学习笔记之部分Lowering
- 十五,MLIR Toy Tutorials学习笔记之Lowering到LLVM IR
- 十六,MLIR ODS要点总结上篇
- 十七,MLIR ODS要点总结下篇
- 十八,MLIR中的Interfaces
- 十九,MLIR的Pass机制实践
- 二十,MLIR的Pattern Rewrite机制
- 番外一,Data Flow和Control Flow
- 番外二,在Jetson Nano上玩TVM
其它
- 白杨:TVM源语-Compute篇
- MLSys 15-884: Course Introduction
- OSDI 2021 PET 论文解读(代码生成相关工作)
- Buddy-MLIR 项目详解(入门 MLIR 极佳选择)
- 【社区实践】为 TVM 新增 OneFlow 前端
- MLIR:摩尔定律终结的编译器基础结构 论文解读
- 【TVM 三代优化巡礼】在X86上将普通的矩阵乘法算子提速90倍
- 【论文解读】基于MLIR生成矩阵乘法的高性能GPU代码,性能持平cuBLAS
- 【用沐神的方法阅读PyTorch FX论文】
- 【以OneFlow为例探索MLIR的实际开发流程】
- 可以让深度学习编译器来指导算子优化吗
- Ansor论文阅读笔记&&论文翻译