【PIR】Support visulization with GraphViz for pir Program #55599
Labels
good first issue
PFCC
Paddle Framework Contributor Club,https://github.com/PaddlePaddle/community/tree/master/pfcc
status/close
已关闭
type/feature-request
新需求申请
一、任务背景
飞桨近期在重构底层的中间表示(下称:IR),替换原来的 ProgramDesc 为新的 MLIR。具体技术设计详见:IR Dialect。
二、任务描述(难度:中)
此项目处于高效迭代期,为了加速开发者们对模型、子图级别下新 IR 表示的熟悉,降低功能开发中的调试成本,希望能够给 IR Dialect 添加「可视化」功能,接口形态如下:
三、思路引导
Visualize()
接口能够输出一个 string 供终端打印调试,其内容可以遵循 GraphViz 的 Dot Language 协议,可以借鉴 CINN 中 dot_lang.cc 中的实现。其输出范式为(CINN中的一个简单样例):
借助 VScode 的 DOT Preview 插件可以进行便捷化的可视化,即下图:
四、一些Tips
4.1 图语义
CINN 中的 Visualize 接口是基于 Graph 来做的。飞桨的新一代 IR 里的 ir::Program 本身借助了 OpOprand 和 OpResult 连接关系表达了 Graph 的语义,所以可以直接借助 ir::Program来实现(详见
OpOperandImpl
实现)下图表示算子A的第一个输出被算子C和算子B用作第一个输入。
4.2 子图可视化
此功能支持可以分为两期。第一期可以不考虑控制流、多Region的场景,聚焦单Block即可。控制流和多Region属于「子图可视化」。
The text was updated successfully, but these errors were encountered: