功能背景:
在使用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文件的全部信息定位。
使用步骤:
- 设定
export MS_DEV_DUMP_IR_FORMAT=0
并运行脚本打印所有ir文件。 - 进入ir保存目录,使用linux指令
find ./ -name '*.ir' | awk --field-separator="_" '{print $(NF) "--->" $0}' | sort -n
找到最后一个ir文件,记录ir的名字。 - 设定回
export MS_DEV_DUMP_IR_FORMAT=2
,并设置export MS_DEV_DUMP_IR_PASSES=刚刚记录的ir名字
并运行脚本打印指定的单个ir文件。
这样就可以在节省耗时的同时不牺牲定位信息。