这篇教程的目的是MLIR的基础教程,快速了解MLIR框架的用法和功能。
MLIR它起源一方面是由于深度学习框架的兴起,因为不同的深度学习框架(TF,torch)都会有计算图的概念,于是为了优化计算图的运行,就需要图编译,于是每个框架都会自己实现图编译系统,甚至会为每一种后端去实现相应的编译软件,于是带来了软件碎片化的问题,因为每款”图编译器“都会有很多通用的地方,但是由于实现方式不同,导致无法复用。MLIR它就是提供了一套可复用的基础设施来尝试解决这个问题。
另一方面,传统LLVM IR表达的语义层次较低,并且是静态的。现代的高级语言往往是动态且具备很多高级特性。这使得从高级语言Lowing到LLVM IR较为困难且难以保持高级语言的特性。MLIR可以通过更高级的抽象表达将这些层次更高,更抽象的的信息在lowing中保留下来。
MLIR更像是一套Dialect系统,包括定义Dialect内部的Operation,Type,Attribute,Interface以及Dialect之间的转换一套基础设施。
主要内容是:定义一个名为”北极星“的方言,去完成一个softmax 算子数据并行下的编译与运行。考虑到没有相应的通讯库,以及多卡的条件,所以实际的通运和数据都只是模拟运行的。
第一阶段:定义”北极星”方言,包括类型,属性,以及接口。以及MLIR IR的结构。
第二阶段:实现IR的Pass以及变换。
第三个阶段:利用lit测试框架进行测试。
第四个阶段:进行方言的转换,将”北极星“方言下降到LLVM IR。
第五阶段:执行 “数据并行”条件下softmax算子。