.. raw:: html ==== 三、AI编译原理(更新中) =========================== 随着深度学习的应用场景的不断泛化,深度学习计算任务也需要部署在不同的计算设备和硬件架构上;同时,实际部署或训练场景对性能往往也有着更为激进的要求,例如针对硬件特点定制计算代码。 这些需求在通用的AI框架中已经难已得到满足。由于深度学习计算任务在现有的AI框架中往往以DSL(Domain Specific Language)的方式进行编程和表达,这本身使得深度学习计算任务的优化和执行天然符合传统计算机语言的编译和优化过程。因此,深度学习的编译与优化就是将当前的深度学习计算任务通过一层或多层中间表达进行翻译和优化,最终转化成目标硬件上的可执行代码的过程。本章将围绕现有AI编译器中的编译和优化工作的内容展开介绍。 希望这个系列能够给大家、朋友们带来一些些帮助,也希望自己能够继续坚持完成所有内容哈! 课程简介 -------- - **《传统编译器》**\ 会粗略地回顾传统编译器中的前端、后端、IR中间表达等主要的概念,并对目前最常用的GCC和LLVM的发展历史,GCC的使用方式和LLVM的架构前后端优化划分,两大编译器GCC和LLVM进行简单的展开,去了解GCC的编译流程和编译方式,并回顾LLVM的整体架构,了解传统编译器的整体架构和脉络。 - **《AI 编译器》**\ 是本节的概览重点,去了解本章的主要内容 AI 编译器的整体架构,包括他的发展阶段,目前主要的组成模块,整体的技术演进方向等概念性的内容,因为近年来AI编译器发展迅猛,可以横向去了解AI编译器整体技术。AI 编译器发展时间并不长,从第一代开始到目前进入第二代,AI编译器整体架构基本上已经清晰,可是也会遇到很多挑战和技术难点。 - **《前端优化》**\ 前端优化作为 AI编译器的整体架构主要模块,主要优化的对象是计算图,而计算图是通过AI框架产生的,值得注意的是并不是所有的AI框架都会生成计算图,有了计算图就可以结合深度学习的原理知识进行图的优化。前端优化包括图算融合、数据排布、内存优化等跟深度学习相结合的优化手段,同时把传统编译器关于代数优化的技术引入到计算图中。 - **《后端优化》**\ 后端优化作为AI编译器跟硬件之间的相连接的模块,更多的是算子或者Kernel进行优化,而优化之前需要把计算图转换称为调度树等IR格式,AI 编译器为了更好地跟硬件打交道,充分赋能硬件,需要后端优化来支持,于是后端针对调度树或者底层IR,在每一个算子/Kernel进行循环优化、指令优化和内存优化等技术。 - **《多面体技术》**\ 多面体不属于新的技术,反而是传统编译器的一种优化手段,得益于深度学习中的主要特征(循环、张量),因此多面体技术可以发挥更大的作用,对循环展开、内存映射等优化工作。多面体表示技术作为统一化的程序变换表示技术, 可以通过迭代域、仿射调度、访存函数等操作对算子或者Kernel进行循环优化和内存映射优化,作为AI编译器的前言研究方向。 - **《PyTorch图模式》**\ 在充分了解AI编译器后,来深度剖析PyTorch2.0关于图模式的Dynamo是如何实现的,如何对PyTorch的后端执行进行加速。本节会以实际的AI框架 PyTorch 2.0为主线,去把其主打特性 Dynamo 和 AOTAutograd 进行展开,并回顾 PyTorch 对图模式的尝试,了解现今最热门的AI框架如何进行编译器优化的。 课程细节 -------- ``PPT``\ 和\ ``字幕``\ 需要到 `Github `__ 下载,网页课程版链接会失效哦~ 建议优先下载 PDF 版本,PPT 版本会因为字体缺失等原因导致版本很丑哦~ +-----------------------------------+-----------------------------------+ | 小节 | 链接 | +===================================+===================================+ | 01 编译器基础概念 | `PPT <../031CM_T | | | radition/01.introduction.pdf>`__, | | | `视频 `__, | | | `文章 <../031CM | | | _Tradition/01.introduction.md>`__ | +-----------------------------------+-----------------------------------+ 传统编译器 ~~~~~~~~~~ 《传统编译器》会粗略地回顾传统编译器中的前端、后端、IR中间表达等主要的概念,并对目前最常用的GCC和LLVM的发展历史,GCC的使用方式和LLVM的架构前后端优化划分,两大编译器GCC和LLVM进行简单的展开,去了解GCC的编译流程和编译方式,并回顾LLVM的整体架构,了解传统编译器的整体架构和脉络。 +-----------------------------------+-----------------------------------+ | 小节 | 链接 | +===================================+===================================+ | 02 开源编译器的发展 | `PPT <../03 | | | 1CM_Tradition/02.history.pdf>`__, | | | `视频 `__ | +-----------------------------------+-----------------------------------+ | 03 GCC编译过程和原理 | `PPT <. | | | ./031CM_Tradition/03.gcc.pdf>`__, | | | `视频 `__ | +-----------------------------------+-----------------------------------+ | 04 LLVM设计架构 | `PPT <.. | | | /031CM_Tradition/04.llvm.pdf>`__, | | | `视频 `__ | +-----------------------------------+-----------------------------------+ | 05 LLVM IR详解 | `PPT <../031CM_Tr | | | adition/05.llvm_detail01.pdf>`__, | | | `视频 `__ | +-----------------------------------+-----------------------------------+ | 06 LLVM前端和优化层 | `PPT <../031CM_Tr | | | adition/06.llvm_detail02.pdf>`__, | | | `视频 `__ | +-----------------------------------+-----------------------------------+ | 07 LLVM后端代码生成 | `PPT <../031CM_Tr | | | adition/07.llvm_detail03.pdf>`__, | | | `视频 `__ | +-----------------------------------+-----------------------------------+ AI 编译器 ~~~~~~~~~ 《AI 编译器》是本节的概览重点,去了解本章的主要内容 AI 编译器的整体架构,包括他的发展阶段,目前主要的组成模块,整体的技术演进方向等概念性的内容,因为近年来AI编译器发展迅猛,可以横向去了解AI编译器整体技术。AI 编译器发展时间并不长,从第一代开始到目前进入第二代,AI编译器整体架构基本上已经清晰,可是也会遇到很多挑战和技术难点。 +-----------------------------------+-----------------------------------+ | 小节 | 链接 | +===================================+===================================+ | 01 为什么需要AI编译器 | `PPT <../03 | | | 2CM_AICompiler/01.appear.pdf>`__, | | | `视频 `__, | | | `文章 <../0 | | | 32CM_AICompiler/01.appear.md>`__, | | | `字幕 <. | | | ./032CM_AICompiler/srt/01.srt>`__ | +-----------------------------------+-----------------------------------+ | 02 AI编译器的发展阶段 | `PPT <../0 | | | 32CM_AICompiler/02.stage.pdf>`__, | | | `视频 `__, | | | `文章 <../ | | | 032CM_AICompiler/02.stage.md>`__, | | | `字幕 <. | | | ./032CM_AICompiler/srt/02.srt>`__ | +-----------------------------------+-----------------------------------+ | 03 AI编译器的通用架构 | `PPT <../032CM_AI | | | Compiler/03.architecture.pdf>`__, | | | `视频 `__, | | | `文章 <../032CM_A | | | ICompiler/03.architecture.md>`__, | | | `字幕 <. | | | ./032CM_AICompiler/srt/03.srt>`__ | +-----------------------------------+-----------------------------------+ | 04 AI编译器的挑战与思考 | `PP | | | T <../032CM_AICompiler/04.future. | | | pdf>`__,\ `视频 `__, | | | , | | | `文章 <../0 | | | 32CM_AICompiler/04.future.md>`__, | | | `字幕 <. | | | ./032CM_AICompiler/srt/04.srt>`__ | +-----------------------------------+-----------------------------------+ 前端优化 ~~~~~~~~ 《前端优化》前端优化作为 AI编译器 的整体架构主要模块,主要优化的对象是计算图,而计算图是通过AI框架产生的,值得注意的是并不是所有的AI框架都会生成计算图,有了计算图就可以结合深度学习的原理知识进行图的优化。前端优化包括图算融合、数据排布、内存优化等跟深度学习相结合的优化手段,同时把传统编译器关于代数优化的技术引入到计算图中。 +-----------------------------------+-----------------------------------+ | 小节 | 链接 | +===================================+===================================+ | 01 内容介绍 | `PPT <./01.introduction.pdf>`__, | | | `视频 `__, | | | `文章 <./01.introduction.md>`__, | | | `字幕 <./srt/01.srt>`__ | +-----------------------------------+-----------------------------------+ | 02 计算图层IR | `PPT <./02.graph_ir.pdf>`__, | | | `视频 `__, | | | `文章 <./02.graph_ir.md>`__, | | | `字幕 <./srt/02.srt>`__ | +-----------------------------------+-----------------------------------+ | 03 算子融合策略 | `PPT <./03.op_fusion.pdf>`__, | | | `视频 `__, | | | `文章 <./03.op_fusion.md>`__, | | | `字幕 <./srt/03.srt>`__ | +-----------------------------------+-----------------------------------+ | 04 布局转换原理 | `PPT <./04.layout_princ.pdf>`__, | | | `视频 `__, | | | `文章 <./04.layout_princ.md>`__, | | | `字幕 <./srt/04.srt>`__ | +-----------------------------------+-----------------------------------+ | 05 布局转换算法 | `PPT <./05.layout_algo.pdf>`__, | | | `视频 `__, | | | `文章 <./05.layout_algo.md>`__, | | | `字幕 <./srt/05.srt>`__ | +-----------------------------------+-----------------------------------+ | 06 内存分配算法 | `PPT <./06.memory.pdf>`__, | | | `视频 `__, | | | `文章 <./06.memory.md>`__, | | | `字幕 <./srt/06.srt>`__ | +-----------------------------------+-----------------------------------+ | 07 常量折叠原理 | `PPT <./07.constant_fold.pdf>`__, | | | `视频 `__, | | | `文章 <./07.constant_fold.md>`__, | | | `字幕 <./srt/07.srt>`__ | +-----------------------------------+-----------------------------------+ | 08 公共表达式消除 | `PPT <./08.cse.pdf>`__, | | | `视频 `__, | | | `文章 <./08.cse.md>`__, | | | `字幕 <./srt/08.srt>`__ | +-----------------------------------+-----------------------------------+ | 09 死代码消除 | `PPT <./09.dce.pdf>`__, | | | `视频 `__, | | | `文章 <./09.dce.md>`__, | | | `字幕 <./srt/09.srt>`__ | +-----------------------------------+-----------------------------------+ | 10 代数简化 | `PPT <./10.algebraic.pdf>`__, | | | `视频 `__, | | | `文章 <./10.algebraic.md>`__, | | | `字幕 <./srt/10.srt>`__ | +-----------------------------------+-----------------------------------+ | 11 优化Pass排序 | `PPT <./11.summary.pdf>`__, | | | `视频 `__, | | | `文章 <./11.summary.md>`__, | | | `字幕 <./srt/11.srt>`__ | +-----------------------------------+-----------------------------------+ 后端优化 ~~~~~~~~ 《后端优化》后端优化作为AI编译器跟硬件之间的相连接的模块,更多的是算子或者Kernel进行优化,而优化之前需要把计算图转换称为调度树等IR格式,AI 编译器为了更好地跟硬件打交道,充分赋能硬件,需要后端优化来支持,于是后端针对调度树或者底层IR,在每一个算子/Kernel进行循环优化、指令优化和内存优化等技术。 +-----------------------------------+-----------------------------------+ | 小节 | 链接 | +===================================+===================================+ | 01 AI编译器后端优化介绍 | `PPT <./01.introduction.pdf>`__, | | | `视频 `__, | | | `文章 <./01.introduction.md>`__, | | | `字幕 <./srt/01.srt>`__ | +-----------------------------------+-----------------------------------+ | 02 算子分为计算与调度 | `PPT <./02.ops_compute.pdf>`__, | | | `视频 `__, | | | `文章 <./02.ops_compute.md>`__, | | | `字幕 <./srt/02.srt>`__ | +-----------------------------------+-----------------------------------+ | 03 算子优化手工方式 | `PPT <./03.optimization.pdf>`__, | | | `视频 `__, | | | `文章 <./03.optimization.md>`__, | | | `字幕 <./srt/03.srt>`__ | +-----------------------------------+-----------------------------------+ | 04 算子循环优化 | `PPT <./04.loop_opt.pdf>`__, | | | `视频 `__, | | | `文章 <./04.loop_opt.md>`__, | | | `字幕 <./srt/04.srt>`__ | +-----------------------------------+-----------------------------------+ | 05 指令和内存优化 | `PPT <./05.other_opt.pdf>`__, | | | `视频 `__, | | | `文章 <./05.other_opt.md>`__, | | | `字幕 <./srt/05.srt>`__ | +-----------------------------------+-----------------------------------+ | 06 Auto-Tuning原理 | `PPT <./06.auto_tuning.pdf>`__, | | | `视频 `__, | | | `文章 <./06.auto_tuning.md>`__, | | | `字幕 <./srt/05.srt>`__ | +-----------------------------------+-----------------------------------+ 多面体技术 ~~~~~~~~~~ 《多面体技术》多面体不属于新的技术,反而是传统编译器的一种优化手段,得益于深度学习中的主要特征(循环、张量),因此多面体技术可以发挥更大的作用,对循环展开、内存映射等优化工作。多面体表示技术作为统一化的程序变换表示技术, 可以通过迭代域、仿射调度、访存函数等操作对算子或者Kernel进行循环优化和内存映射优化,作为AI编译器的前言研究方向。 PyTorch图模式 ~~~~~~~~~~~~~ 《PyTorch图模式》在充分了解AI编译器后,来深度剖析PyTorch2.0关于图模式的Dynamo是如何实现的,如何对PyTorch的后端执行进行加速。本节会以实际的AI框架 PyTorch 2.0为主线,去把其主打特性 Dynamo 和 AOTAutograd 进行展开,并回顾 PyTorch 对图模式的尝试,了解现今最热门的AI框架如何进行编译器优化的。 +-----------------------------------+-----------------------------------+ | 小节 | 链接 | +===================================+===================================+ | 01 PyTorch2.0 特性串讲 | `PPT <./01.introduction.pdf>`__, | | | `视频 `__, | | | `文章 <./01.introduction.md>`__, | | | `字幕 <./srt/01.srt>`__ | +-----------------------------------+-----------------------------------+ | 02 TorchScript 静态图尝试 | `PPT <./02.torchscript.pdf>`__, | | | `视频 `__, | | | `文章 <./02.torchscript.md>`__, | | | `字幕 <./srt/02.srt>`__ | +-----------------------------------+-----------------------------------+ | 03 Torch FX 与 LazyTensor 特性 | `PPT <./03.torchfx_lazy.pdf>`__, | | | `视频 `__, | | | `文章 <./03.torchfx_lazy.md>`__, | | | `字幕 <./srt/03.srt>`__ | +-----------------------------------+-----------------------------------+ | 04 TorchDynamo 来啦 | `PPT <./04.torchdynamo.pdf>`__, | | | `视频 `__, | | | `文章 <./04.torchdynamo.md>`__, | | | `字幕 <./srt/04.srt>`__ | +-----------------------------------+-----------------------------------+ | 05 AOTAutograd 原理 | `PPT <./05.aotatuograd.pdf>`__, | | | `视频 `__, | | | `文章 <./05.aotatuograd.md>`__, | | | `字幕 <./srt/05.srt>`__ | +-----------------------------------+-----------------------------------+ | 06 Dispatch 机制 | `PPT <./06.dispatch.pdf>`__, | | | `视频 `__, | | | `文章 <./06.dispatch.md>`__, | | | `字幕 <./srt/06.srt>`__ | +-----------------------------------+-----------------------------------+