文章目录
- TVM 中 Pass 分类
- Pass Infrastructure
- 后端主要数据结构
- 前端数据结构
- Pass 注册机制
- 注册流程
AI 编译器一般采用多级 IR 的架构来处理深度学习模型,不同级别的 IR 包含不同层级的信息。比如,越靠近前端的 IR 一般不包含硬件的信息,越靠近后端,IR 所含信息则与硬件愈相关。在 TVM 的架构中包含两级 IR,模型首先通过解析为高阶 IR Relay 来表示的,Relay 不包含硬件相关信息;然后将 Relay 降级为 Tensor IR,TIR 则包含着运行平台相关的信息。
TVM 中 Pass 分类
Pass 是传统编译器的一个概念,具体是指在 IR 上的一个优化操作,是 IR-to-IR 的转化过程。这些 Pass 或收集信息或改变模型结构。在 TVM 中,Pass 根据 IR 类型的不同分为 Relay 上的优化和 TIR 上的优化。Relay 上的优化是 Relay-to-Relay 的优化过程,是一种后端无关的操作。但是 Relay 上的优化其实是可以考虑后端信息的,比如量化操作或者布局转化操作。因此,Relay 上的 Pass 包括通用的 pass,在 tvm.relay.transform 目录下,还有一些 Pass 包含系统信息或后端信息,在其他目录下如 AnnotateUsedMemory Pass 等。
TVM 中的 Pass 主要在如下几个包中:
- tvm.transform – 基础的 IR 优化操作,适用于高阶 Relay IR 和低阶 TIR。主要包含定于 Pass 的元数据
- tvm.relay.transform – 高阶 IR 上的优化操作,与硬件无关
- tvm.tir.transform – 面向底层的优化,包括循环优化、降级优化等
按照功能,本人对 TVM 的 Relay 的上 Pass