【PIR】Dygraph_to_static 下需要修复 PIR 的用例。 #56607
Labels
PFCC
Paddle Framework Contributor Club,https://github.com/PaddlePaddle/community/tree/master/pfcc
status/close
已关闭
问题描述 Please describe your issue
子图验证&核心机制完善
本项目是新IR推全测试,兼容现有动转静执行逻辑的重要环节。目前我们通过动态图组网 -> AST翻译 ->
静态图表示 -> ProgramTranslator -> 新IR下的静态图表示 -> NewIRInterpreter 这样的路径支持了在新IR下飞桨的动转静功能。
目前从旧静态图到新静态图下存在某些问题,需要经过充分的测试。
我们希望通过复用现有的子图级别的测试(即test/dygraph_to_static目录下的测试)验证新IR的功能完备性和正确性。
目前动转静测试中存在问题的内容有:
修复
为新 IR 添加算子
对于缺少对应的算子,报错信息类似于
Op xxx should have corresponding OpInfo pd_op.xxx
以下几个步骤对应来解决
1. 配置 ops.yaml 和 backward.yaml
旧 IR 的 Op 定义文件名称一般都为 xxx_op.cc,我们可以直接看到 xxxOpMaker 下的 make 来查看 input、output等信息。
如果该 Op 有反向过程,就需要对前反向同时进行补充。
paddle/fluid/pir/dialect/operator/ir/ops.yaml
和paddle/fluid/pir/dialect/operator/ir/backward.yaml
yaml 文件的前反向规则可以参考 C++算子开发文档的3.1 算子 Yaml 文件配置
2. 配置 op_compat.yaml
3.配置 infermeta 信息
一般情况下根据上面几步骤就能解决问题,有较为特殊的算子需要具体分析。
转译过程中的特殊处理
转译的过程一般通过 ProgramTranslator 来执行,在文件 paddle/fluid/ir_adaptor/translator/program_translator.cc
TranslateBlock 负责 BlockDesc 的转译,而 BlockDesc 内包含的 OpDesc 则是由 OpTranslator 负责,在文件 paddle/fluid/ir_adaptor/translator/op_translator.cc 下
通用的翻译规则一般是以下几步
在分析了特殊的情况后,可以根据定位的报错信息来具体改写相对应的函数。
验收标准
Q&A
无
待修复的测试内容
经过测试,以下的案例在 new IR 下未通过测试。
以下的测试用例不会运行到转译和 PIR 执行器中,或是无需进行测试,在此记录。
The text was updated successfully, but these errors were encountered: