antiagainst / antiagainst.github.io

Generated website for my personal blog
https://lei.chat/
6 stars 0 forks source link

MLIR Vector Dialect 以及 Patterns | Lei.Chat() #14

Open utterances-bot opened 1 year ago

utterances-bot commented 1 year ago

MLIR Vector Dialect 以及 Patterns | Lei.Chat()

Vector dialect 及其相关变换 (transformation) 是机器学习代码生成流程中的重要一环。 今天我们来仔细分析一下其定位、设计、特性,并介绍其中的重要操作 (operation) 和变换, 最后用实例来说明如何恰当使用 vector dialect 相关功能。

https://www.lei.chat/zh/posts/mlir-vector-dialect-and-patterns/

BruceDai003 commented 1 year ago

谢谢分享。有一个问题想提问一下,我在看openai的triton项目,是用的mlir来做降级的。 里面有Triton Dialect和TritonGPU Dialect,后面再从TritonGPU lower到LLVM的时候,我看到populate了很多Patterns。然后调用了applyPartialConversion。我比较关心其中一些pattern是怎么起作用的,于是也添加了不少llvm::errs()或ir dump的打印。不过,我比较头疼的是,这个applyPartialConversion是怎么工作的。比如我这个RewritePatternSet有一百个patterns,benefit都是1。我不知道是按照什么顺序去对原始的moduleOp去作用这些patterns。比如我在pattern A里进出口都dump了IR,看到了该pattern A是如何作用于moduleOp的。但是从这个pattern A出去了之后,会继续调用哪个pattern?pattern A后来似乎又会被调用到,这个顺序让我比较难琢磨。 我倒是看了applyPatternsAndFoldGreedily(),在整个流程里,用到这个API的地方RewritePatternSet里pattern比较少,不到10个,而且benefit也有高低,因此,我大概整明白了这个的过程。但是对于applyPartialConversion,我的case里用到的pattern太多了,benefit似乎triton里都是1,所以我不明白这个怎么运作的。想请教一下,谢谢。

antiagainst commented 1 year ago

@BruceDai003 如果benefit相同,顺序应该是populate的顺序。不过这可能是比较早期的behavior,最近有没有变动我就不太清楚了。如果想要用debugger查看以及调整动态运行的顺序,推荐看一下这个 talk 以及其 slides。相关功能已经 landed,原始 rfc 和 MLIR 中的 doc 也可以参考。

carolove commented 6 months ago

不知道作者是否愿意,重点讲解以下,“对比 linalg.matmul 和 linalg.conv2d_nhwc_hwcf 的 indexing maps“; 我没看懂affine_map,找了很多中文的翻译我也没看懂,这个affine_map是一个什么数学表达,看的一知半解,感觉上像是一种函数映射换算,或者一种地址映射,但是我没看懂这个映射的数学关系, 比如,affine_map<(m, n, k)[s0, s1, s2] -> (m, k)>,那维度参数n以及s0、s1、s2都不参与计算吗? 望不吝赐教,多谢了

chenghuaWang commented 6 months ago

不知道作者是否愿意,重点讲解以下,“对比 linalg.matmul 和 linalg.conv2d_nhwc_hwcf 的 indexing maps“; 我没看懂affine_map,找了很多中文的翻译我也没看懂,这个affine_map是一个什么数学表达,看的一知半解,感觉上像是一种函数映射换算,或者一种地址映射,但是我没看懂这个映射的数学关系, 比如,affine_map<(m, n, k)[s0, s1, s2] -> (m, k)>,那维度参数n以及s0、s1、s2都不参与计算吗? 望不吝赐教,多谢了

@carolove MLIR文档里有解释 https://mlir.llvm.org/docs/Dialects/Affine/

carolove commented 6 months ago

我觉得这篇pdf可能对linalg affine_map的解释更清晰,https://mlir.llvm.org/OpenMeetings/2022-01-27-Intro-to-Linalg.pdf

carolove commented 6 months ago

我当时没太理解的应该是linalg generic 中的affine_,map的含义,我是通过对比https://mlir.llvm.org/OpenMeetings/2022-01-27-Intro-to-Linalg.pdf 中对linalg.generic的indexing_maps的解释,https://mlir.llvm.org/docs/Dialects/Linalg/关于linalg generic的解释,才搞清楚,这个indexing_maps我理解是对输入输出tensor维度的映射关系的描述