MLIR学习可以参考的项目

MLIR(Multi-Level Intermediate Representation)包含了更多的信息,抽象层级更高。笔者在2023.8开始从事MLIR编译器的开发,当时学习资料不多,自己搜集了些开源项目并在2023.11发表在我的博客里,现在整理下挪到知乎来。

对MLIR不了解可以看下我的这篇文章。从零开始教你写一个MLIR Pass

一、OpenAI

1、triton-lang/Triton 16k

Pytorch2.0巨大更新,OpenAI的Triton也随着其chatgpt的爆火而备受关注。带来了TritonTriton GPU高层次抽象的dialect,能够很好的表示GPU的硬件细节,Pytorch2.0更新日志Triton有95%的库水平。

我写了一篇 浅析 Triton 执行流程,有兴趣可以看。Triton是目前最成功的MLIR项目。

seed最近开源了分布式的Triton ByteDance-Seed/Triton-distributed,激动人心,大家速速来star
triton-cpu也值得看看,同系列还有到linalg dialect 的微软 triton-shared寒武纪 triton-linalg

直接lower到Triton你又该如何应对,好好好,支持helion

除了nvidiaamdintelcpumicrosoft(部分)meta tlx扩展(Low-level)这些后端外,我们还有昆仑芯摩尔线程沐曦ARM china华为昇腾清微智能天数智芯寒武纪(部分)Seed 分布式扩展Op 的后端实现可以参考。

二、LLVM

1、官方的torch前端torch-mlir 1.6k

可以将torch的model转换到MLIR中

2、官方在开发的新clang 0.51k

这个项目我觉得蛮有意思的,clang但是以MLIR作为IR。cgeist在翻译时用的还是clang,因为AST的信息和MLIR不对等所以有些东西不太好表示,期待早日做好将大大提高clang的表达能力。有可能实现大一统

3、官方的C/C++前端Polygeist 0.56k

可以将C/C++代码翻译到affine层级,不太会写输出结果,可以参考下。最新版的Polygeist增加了poly,你也可以学习下poly的接入方式。

4、LLVM中的toy 33.3k

适合上手学习调试,官方还有文档

5、LLVM中的Fortran前端Flang 33.k

LLVM中的Fortran前端,这个也做得蛮早了,但是还不够完善。最初是f18 project

三、Google

1、iree-org/iree 3.2k

MLIR大模型推理,很多参考了这个项目。做推理框架首先看这个,当然推理框架还有llama.cppollamaTensorRT-LLMvllmsglang

OpenXLA 是 Google 想将编译器相关技术从 TensorFlow 独立出来的项目组,里面有hlo dialect的定义,fusion pass的思路,这个貌似着工业界用的还不少,我以前一直以为处于Pytorch的大一统时代。

IREE里隐藏着对 StableHLO,这是定义的神经网络模型的高层级运算。
当然XLA也是可以接进Pytorch的,有Pytorch/XLA

IREE和TVM的对比
来自Compiler Technologies in Deep Learning Co-Design: A Survey

2、openxla/stablehlo 0.50k

3、LLVM中的mlir 33.3k

Chris Lattner2018年在Google Brain主导开发了MLIR,并在2019年4月正式开源出来。Chris Lattner在AI民主化系列文章对MLIR的中肯评价如下。

Triton also includes compiler-driven optimizations—like vectorization—and enables simplified double buffering and software pipelining, which overlap memory transfers with computation. In CUDA, these techniques require deep GPU expertise; in Triton, they’re exposed in a way that non-experts can actually use. For a deeper dive, OpenAI provides detailed tutorials.

四、AMD

1、AMD rocMLIR

可以针对AMD硬件做CONV和GEMM kernel生成,被MIGraphX使用。都说AMD在梭哈MLIR实现弯道超车,具体怎么样可以看代码。他们还实现了xmir-runner,如果有自制MLIR JIT runner可以参考下。

2、Xilinx AIR platforms

Xilinx是做FPGA的,被AMD收购了,FPGA中也有AI引擎,他们梭哈MLIR蛮久了,开源质量不错。
大多数都是转换类,Pass位置
这个还能看到有人在实际运用,比如mase,有100多个star,不过HLS基本都是国人在搞
Nod.ai的人还在搞新的dsl

五、NVIDIA

1、NVIDIA/cutlass

只开源了前端非常少的一部分,但是我们可以看到MLIR的生态大家都在做。很大的一块收益是编译速度的显著提升,你不用在编译CUTLASS时等待很久。提升>100x,在去掉C++模版类实例化使用MLIR后,8kx8kx8k GEMM从C++编译时间的27997ms来到了241ms,十分惊人。

带来的收益还有Pytorch的集成,这点对不熟悉cutlass C++但是想来写算子的人是非常友好的。

六、intel

1、intel/graph-compiler

这个MLIR接的是oneDNN Graph API,也是最近刚开始做

2、intel/intel-xpu-backend-for-triton

intel的xpu后端,这里也有和微软triton-shared类似的部分。

七、微软

1、microsoft/triton-shared

微软最先在linalg上做了一些尝试,并把自己的一些优化share出来了。This talk at the 2023 Triton Developer Conferene

八、meta

META可以看到的是在折腾Triton,Meta 推荐芯片MTIAV2 也使用了Triton这套软件栈。

1、facebookexperimental/triton

meta在搞TLX (Triton Low-level Language Extensions),把 warp-aware, hardware-near 带回Triton,以求拿到性能。把 Low-level 带回Triton也是有收益的,能拿到性能。

2、pytorch-labs/triton-cpu

也折腾过Triton的cpu后端的。

九、ONNX

1、onnx/onnx-mlir

这个项目我还真用过,要把ONNX转换到MLIR dialect,不少krnl的需要自己实现。所以经常是一边看netron可视化工具,一边对语义,写实现。

九、Jim Keller的tenstorrent

1、tenstorrent tt-mlir

tenstorrent是Jim Keller(硅仙人)领导的AI芯片新创公司,目标也是他们的AI加速器。兆松(1nfinite)有一个中文文档

十、硅基流动

1、Oneflow-Inc/oneflow

一流科技较早将MLIR融入自己的深度学习框架,也对MLIR做了些支持。不过在深度学习中我觉得很多依旧是Transform类的,能lower正确就可以,很像一个工程问题。定义创建Pass的文件,甚至还有PDLL这类高级功能。一流科技也就是现在的硅基流动。

十一、算能

1、sophgo/tpu-mlir

TPU-MLIR是一个面向深度学习处理器的开源TPU编译器。该项目提供了完整的工具链,将各种框架下预训练的神经网络转换为可在TPU中高效运行的二进制文件bmodel,以实现更高效的推理。TPU-MLIR项目已应用于算能开发的最新一代深度学习处理器BM1684X。结合处理器本身的高性能ARM内核以及相应的SDK,可以实现深度学习算法的快速部署。甚至提供了相应课程,只需要填写相关信息就可以学习,B站不用注册,来白嫖B站这边

十二、软件所iscas

1、buddy-mlir

适合上手学习调试,不过已经越来越强大了。其在最近(2023年11月)完成了端到端 LLaMA2-7B 推理示例

十三、华为

1、mindspore-ai/akg

AKG是Auto Kernel Generator的简称,在昇思MindSpore框架中担任图算融合编译加速的任务。AKG基于polyhedral多面体编译技术,可自动生成满足并行性与数据局部性的调度,目前能够支持NPU/GPU/CPU等硬件。

MindSpore AKG MLIR已经支持主流模型中所有重要算子,但是随着网络的迭代和算法的改进,依然不断有新的算子出现。由于MindSpore AKG支持包括NPU、GPU、CPU在内的多硬件后端,我们规划了基于后端代码生成能力完成相关算子支持,包括:1.对于新算子提供基于循环和数学表达式的表达。2.对于融合算子提供以已有算子拼接的展开表达。

B站有对应的技术分享会录播

源码大概看了下,为了解决动态shape弄了个symbolicStrExprMap,要SameSymbolicShape。用的是symengine,而不是MLIR的affine dialect

GPU Lower流程如下所示

发布后就没怎么更新了,心痛,想学。

十四、字节跳动

1、bytedance/byteir

ByteIR项目是字节跳动的模型编译解决方案。ByteIR包括编译器、运行时和前端,并提供端到端的模型编译解决方案。 尽管所有的ByteIR组件(编译器/运行时/前端)一起提供端到端的解决方案,并且都在同一个代码库下,但每个组件在技术上都可以独立运行。

十五、阿里

1、alibaba/BladeDISC

阿里云PAI团队的BladeDISC目的是解决AI编译器的Dynamic Shape问题,主要做了显存优化、计算优化、通信优化,2024年底发现其推文多了起来,这个工作的论文被 NeurIPS Workshop 2024收录了。

十六、寒武纪

1、Cambricon/triton-linalg

寒武纪针对mlu的到linalg的实现,linalg之后和硬件实现有关。这是发布时的Slides,72页开始

十七、一些教程

1、OpenMLIR/mlir-tutorial

北大周可行的中文教程,更适合中国宝宝使用。我完善了两章,之后还想加点新东西。

2、KEKE046/mlir-tutorial

北大周可行的中文教程原地址

3、j2kun/mlir-tutorial

Jeremy Kun的英文教程

4、BBuf/tvm_mlir_learn

BBuf的学习笔记

posted @ 2023-11-02 08:34  暴力都不会的蒟蒻  阅读(2986)  评论(2)    收藏  举报