AI框架中图层IR的分析

IR(Intermediate Representation即中间表示)是程序编译过程中,源代码与目标代码之间翻译的中介,IR的设计对编译器来说非常关键,好的IR要考虑从源代码到目标代码编译的完备性、编译优化的易用性和性能。而AI框架本质的作用又是什么呢?AI框架本质的作用在于把一个把用户的模型表达翻译到可执行的代码,然后进行高效执行(训练和推理),其中从用户的模型表达(例如深度神经网络)到最后可执行的代码就是个编译器的行为,这个编译器也有一个IR,它的设计对AI框架的完备性/灵活性/易用性/性能都起到至关重要的作用。

本文重点分析一下AI框架对IR有什么特殊的需求、业界有什么样的方案以及MindSpore的一些思考。首先带大家了解下通用的编译器IR的分类以及各自特点。

业界IR的介绍

一、IR根据其组织结构[1],可以分为:Linear IR(线性IR)、Graphical IR(图IR)、Hybrid IR(混合IR),其中

Linear IR(线性IR):

类似某些抽象机的伪代码,对应的算法通过迭代来遍历简单的线性操作序列

Hybrid IR(混合IR):

结合了图IR和线性IR的要素。一种常见的混合IR使用底层的线性IR来表示无循环代码块,使用图IR来表示这些块之间的控制流

Graphical IR(图IR):

将编译过程的知识/信息保存在图中,对应的算法通过对图中的对象(节点、边、列表和树)操作来描述

线性IR的一个例子是堆栈机代码(Stack-Machine Code),它是一种单地址代码,假定操作数存在一个栈中。大多数操作从栈获得操作数,并将其结果推入栈中。例如:表达式 b-a*3对应的堆栈机代码如下:

push 3 push a multiply push a substract

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzydj.html