随着深度学习的应用场景的不断泛化,深度学习计算任务也需要部署在不同的计算设备和硬件架构上;同时,实际部署或训练场景对性能往往也有着更为激进的要求,例如针对硬件特点定制计算代码。
这些需求在通用的 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, 视频, 文章, 字幕 |
《传统编译器》会粗略地回顾传统编译器中的前端、后端、IR 中间表达等主要的概念,并对目前最常用的 GCC 和 LLVM 的发展历史,GCC 的使用方式和 LLVM 的架构前后端优化划分,两大编译器 GCC 和 LLVM 进行简单的展开,去了解 GCC 的编译流程和编译方式,并回顾 LLVM 的整体架构,了解传统编译器的整体架构和脉络。
小节 | 链接 |
---|---|
02 开源编译器的发展 | PPT, 视频, 字幕 |
03 GCC 编译过程和原理 | PPT, 视频, 字幕 |
04 LLVM 设计架构 | PPT, 视频, 字幕 |
05 LLVM IR 详解 | PPT, 视频, 字幕 |
06 LLVM 前端和优化层 | PPT, 视频, 字幕 |
07 LLVM 后端代码生成 | PPT, 视频, 字幕 |
《AI 编译器》是本节的概览重点,去了解本章的主要内容 AI 编译器的整体架构,包括他的发展阶段,目前主要的组成模块,整体的技术演进方向等概念性的内容,因为近年来 AI 编译器发展迅猛,可以横向去了解 AI 编译器整体技术。AI 编译器发展时间并不长,从第一代开始到目前进入第二代,AI 编译器整体架构基本上已经清晰,可是也会遇到很多挑战和技术难点。
小节 | 链接 |
---|---|
01 为什么需要 AI 编译器 | PPT, 视频, 文章, 字幕 |
02 AI 编译器的发展阶段 | PPT, 视频, 文章, 字幕 |
03 AI 编译器的通用架构 | PPT, 视频, 文章, 字幕 |
04 AI 编译器的挑战与思考 | PPT,视频, , 文章, 字幕 |
《前端优化》前端优化作为 AI 编译器 的整体架构主要模块,主要优化的对象是计算图,而计算图是通过 AI 框架产生的,值得注意的是并不是所有的 AI 框架都会生成计算图,有了计算图就可以结合深度学习的原理知识进行图的优化。前端优化包括图算融合、数据排布、内存优化等跟深度学习相结合的优化手段,同时把传统编译器关于代数优化的技术引入到计算图中。
小节 | 链接 |
---|---|
01 内容介绍 | PPT, 视频, 文章, 字幕 |
02 计算图层 IR | PPT, 视频, 文章, 字幕 |
03 算子融合策略 | PPT, 视频, 文章, 字幕 |
04 布局转换原理 | PPT, 视频, 文章, 字幕 |
05 布局转换算法 | PPT, 视频, 文章, 字幕 |
06 内存分配算法 | PPT, 视频, 文章, 字幕 |
07 常量折叠原理 | PPT, 视频, 文章, 字幕 |
08 公共表达式消除 | PPT, 视频, 文章, 字幕 |
09 死代码消除 | PPT, 视频, 文章, 字幕 |
10 代数简化 | PPT, 视频, 文章, 字幕 |
11 优化 Pass 排序 | PPT, 视频, 文章, 字幕 |
《后端优化》后端优化作为 AI 编译器跟硬件之间的相连接的模块,更多的是算子或者 Kernel 进行优化,而优化之前需要把计算图转换称为调度树等 IR 格式,AI 编译器为了更好地跟硬件打交道,充分赋能硬件,需要后端优化来支持,于是后端针对调度树或者底层 IR,在每一个算子/Kernel 进行循环优化、指令优化和内存优化等技术。
小节 | 链接 |
---|---|
01 AI 编译器后端优化介绍 | PPT, 视频, 文章, 字幕 |
02 算子的计算与调度 | PPT, 视频, 文章, 字幕 |
03 算子优化手工方式 | PPT, 视频, 文章, 字幕 |
04 算子循环优化 | PPT, 视频, 文章, 字幕 |
05 指令和内存优化 | PPT, 视频, 文章, 字幕 |
06 Auto-Tuning 原理 | PPT, 视频, 文章, 字幕 |
《多面体技术》多面体不属于新的技术,反而是传统编译器的一种优化手段,得益于深度学习中的主要特征(循环、张量),因此多面体技术可以发挥更大的作用,对循环展开、内存映射等优化工作。多面体表示技术作为统一化的程序变换表示技术, 可以通过迭代域、仿射调度、访存函数等操作对算子或者 Kernel 进行循环优化和内存映射优化,作为 AI 编译器的前言研究方向。
《PyTorch 图模式》在充分了解 AI 编译器后,来深度剖析 PyTorch2.0 关于图模式的 Dynamo 是如何实现的,如何对 PyTorch 的后端执行进行加速。本节会以实际的 AI 框架 PyTorch 2.0 为主线,去把其主打特性 Dynamo 和 AOTAutograd 进行展开,并回顾 PyTorch 对图模式的尝试,了解现今最热门的 AI 框架如何进行编译器优化的。
小节 | 链接 |
---|---|
01 PyTorch2.0 特性串讲 | PPT, 视频, 文章, 字幕 |
02 TorchScript 静态图尝试 | PPT, 视频, 文章, 字幕 |
03 Torch FX 与 LazyTensor 特性 | PPT, 视频, 文章, 字幕 |
04 TorchDynamo 来啦 | PPT, 视频, 文章, 字幕 |
05 AOTAutograd 原理 | PPT, 视频, 文章, 字幕 |
06 Dispatch 机制 | PPT, 视频, 文章, 字幕 |
文字课程内容正在一节节补充更新,每晚会抽空继续更新正在 AISys ,希望您多多鼓励和参与进来!!!
文字课程开源在 AISys,系列视频托管B 站和油管,PPT 开源在github,欢迎取用!!!
非常希望您也参与到这个开源项目中,B 站给 ZOMI 留言哦!
欢迎大家使用的过程中发现 bug 或者勘误直接提交代码 PR 到开源社区哦!
希望这个系列能够给大家、朋友们带来一些些帮助,也希望自己能够继续坚持完成所有内容哈!