You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
随着新IR底层核心逻辑已经成熟,需要进一步推广验证。当前新IR仅限于在 C++ 底层进行操作,为了能够尽快让新 IR 替代现有的 IR 体系,需要打通 Python 端到C++端的新IR链路。其中有一项重要工作是需要在C++端开发新IR的组网用API ,并且暴露到 Python 端,从而为大规模验证新 IR 体系奠定基础。
Activity
[-]【艾尔登】任务线四:「艾尔登之王 ⚔ 」之 「API 体系升级」[/-][+]【艾尔登+开源创新大赛】任务线四:「艾尔登之王 ⚔ 」之 「API 体系升级」[/+][-]【艾尔登+开源创新大赛】任务线四:「艾尔登之王 ⚔ 」之 「API 体系升级」[/-][+]【艾尔登+开源创新大赛】「艾尔登之王 ⚔ 」之 「API 体系升级」[/+]YuanRisheng commentedon Jul 28, 2023
总目标详解
简单来说,我们的整体目标是通过对Python端的API进行升级(红色区域代码),实现在新IR下进行组网:

上述可参见
stat.py中mean的实现:(上图中的代码形式是为了大家方便理解的中间状态,最终的理想状态我们会将红色区域与蓝色区域进行统一合并,一个接口既可以走动态图,也可以走新IR静态图)
上图中Python端调用的API接口在C++端实现如下所示(

static_op_function.cc):其中蓝框内是绑定代码,通过这一步,可实现在Python端调用C++的接口,红框是C++ API的实现。
由于每个Python API都需要对应的一个C++ API的组网实现,所以我们不会手动去实现这些代码,我们需要自动化将这些C++ API代码生成。
这些C++ API的自动代码生成可参考:
paddle/fluid/eager/auto_code_generator/generator/python_c_gen.py,该文件是动态图的自动代码生成器源码,生成的文件为paddle/fluid/pybind/eager_op_function.cc(编译后才能看到)对


static_api_mean展开,可看到其中核心调用代码如下图:该代码目录:
paddle/fluid/ir/dialect/pd_api.cc,实现如下:这个代码是核心IR组网的API,也需要代码自动实现,生成前反向组网API都需要生成,由于其用到了
pd_op.h(自动代码生成)里的算子,可参考pd_op.h里算子生成的方式:paddle/fluid/ir/dialect/op_generator/op_gen.py在完成C++API自动生成的基础上,如前所示的mean在Python端的写法,需要对高频API(后续会整理发布)进行适配升级,完成相关验证。
在以上核心目标完成中,还可能会遇到其他需要完成的任务:
IR核心组件绑定:在整个任务的实现过程中,如果遇到IR核心组件需要在Python端使用,需要使用pybind进行绑定
单测框架适配:如果遇到单测框架有什么问题,需要反馈或者解决(当前有同学会负责单测框架适配API升级,满足API升级后能够使用现有单测测试的目标)