使用环境变量简化mindir打印

功能背景:
在使用jit编译加速网络脚本时,往往需要查看ir文件来了解编译期间静态图的中间状态。
当前网络结构复杂时保存ir图耗时较长。现提供四个环境变量定制化打印ir,用于节省ir打印时间。(环境变量文档可参考:环境变量

使用前提:
设置export MS_DEV_SAVE_GRAPHS=1或2或3打开ir保存功能。(ir文件保存可参考文档:IR文件分析

环境变量介绍

一、更改ir打印等级

使用环境变量 export MS_DEV_SAVE_GRAPHS=1

使用场景:
不需要打印verbose ir文件夹中的后端ir以及前端的小颗粒opt阶段的pass。

使用效果:
可打印相较export MS_DEV_SAVE_GRAPHS=2更少的ir文件。

二、指定ir文件打印

使用环境变量export MS_DEV_DUMP_IR_PASSES=指定的ir文件名或文件名片段

使用场景:
已明确需要哪些ir图且知道这些ir图的名字。

使用效果:
打印时会匹配输入的string,将所有名字包含输入string的ir图打印出来。

三、精简ir打印内容

使用环境变量export MS_DEV_DUMP_IR_FORMAT=0或1。等级含义可见文件顶部粘贴的环境变量文档。

使用场景:
打印内容过多导致打印时间过长,但需要打印所有ir文件。同时不需要所有node信息就可以支撑定位。

使用效果:
设置为0时,ir文件中节点信息将只包含节点的operator和节点的输入。
设置为1是,ir文件中节点信息将比全量保存少了scope,fullname信息和调用栈信息。
通过减少单文件打印内容打到提升打印速度的效果。

四、间隔打印ir

使用环境变量export MS_DEV_DUMP_IR_INTERVAL=想要的打印间隔数

使用场景:
不需要打印所有ir,只需要少量ir定位。

使用效果:
ir打印会间隔输入数字保存。如:export MS_DEV_DUMP_IR_INTERVAL=2,打印的ir将会是第0,2,4个ir文件。

结合使用示例

假如我只需要打印脚本会生成的最后一个ir,但是我不知道打印的ir会叫什么名字。同时全量打印又太耗时,且我也需要ir文件的全部信息定位。

使用步骤:

  1. 设定export MS_DEV_DUMP_IR_FORMAT=0并运行脚本打印所有ir文件。
  2. 进入ir保存目录,使用linux指令find ./ -name '*.ir' | awk --field-separator="_" '{print $(NF) "--->" $0}' | sort -n找到最后一个ir文件,记录ir的名字。
  3. 设定回export MS_DEV_DUMP_IR_FORMAT=2,并设置export MS_DEV_DUMP_IR_PASSES=刚刚记录的ir名字并运行脚本打印指定的单个ir文件。

这样就可以在节省耗时的同时不牺牲定位信息。