-
Notifications
You must be signed in to change notification settings - Fork 5.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[NewIR] 动静Op定义的参数名映射修复 #55334
Labels
Comments
This was referenced Jul 13, 2023
开发流程可以参考该 pr 描述,提供了简易版教程 |
9 转给 @RedContritio |
9 |
[NewIR] 动静Op定义的参数名映射修复 已全部完成,感谢参与的小伙伴们!
欢迎继续参与快乐开源的其他任务! |
github-project-automation
bot
moved this from In Progress
to Done
in Call for Contributions
Jul 31, 2023
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
需求描述 Feature Description
需求背景
目前飞桨的算子已十分丰富,能够满足众多用户需求,但另一方面,繁多的算子给框架的维护和开发带来了困难。飞桨目前分别支持动态图和静态图执行,因为历史原因,动态图的算子和静态图算子的定义并不完全一致。
而在飞桨新一代IR的开发过程中,我们基于动态图的更规范的算子定义(ops.yaml、legacy_ops.yaml)生成了新IR体系下的算子。但是出于兼容旧IR体系的考虑,我们开发了ProgramTranslator(相关代码位于
paddle/fluid/ir_adaptor/translator/
),用于将定义在旧IR下的计算图转化为新IR表示。在这种情况下,我们就遇到了动静算子定义不一致的问题。举例来说,对于算子
atan2
而言,它的静态图定义是可以看到,有两个名叫
X1
X2
的输入,一个名叫Out
的输出。但是其动态图定义如下:
输入输出分别是
x
y
out
。进而新IR在生成Op定义时,生成的定义如下:这种差异在ProgramTranslator工作时会带来一些问题,因为ProgramTranslator需要确定,应该将旧IR的哪个参数对应到新IR的哪个参数?一般来说,这种映射定义在
paddle/phi/api/yaml/op_compat.yaml
中,然而,该文件并未包含所有的映射,有少量的映射并未补充到里面。ProgramTranslator中目前采用这样的参数转换逻辑,该逻辑会将下划线风格命名的参数默认转为驼峰风格(即静态图参数命名风格),进而导致新定义的算子(采用了下划线命名风格)找不到映射,进而在
paddle/phi/api/yaml/op_compat.yaml
,不得不添加下面这样冗余的映射。本项目的最终目的就是添加必要的参数映射, 去除上面的冗余映射。
攻略方式 (整体进展:18/18)
补全以下Op参数在
paddle/phi/api/yaml/op_compat.yaml
的映射:修复代码逻辑
注意,由于种种原因,即便补全了上述单测,可能依然有部分Op的映射没有加入,这时候只要确定失败的单测是哪个,对于OpTest相关单测,可以确认是否在
paddle/phi/api/yaml/op_compat.yaml
加入了对应Op的映射。对于更复杂的问题,可以咨询 @kangguangli 。
去除现存冗余映射
paddle/phi/api/yaml/op_compat.yaml
中类似warprnnt
的映射逻辑一个可能的方案是 通过脚本检测所有的映射列表,如果某个映射的key和value完全一致,就应当去除。
奖励
一颗【夏玻利利葡萄】
替代实现 Alternatives
No response
The text was updated successfully, but these errors were encountered: