Skip to content
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

【艾尔登+开源创新大赛】「艾尔登之王 ⚔ 」之 「API 体系升级」 #55737

Closed
Aurelius84 opened this issue Jul 27, 2023 · 1 comment
Assignees
Labels
status/close 已关闭 type/new-feature 确认的新需求

Comments

@Aurelius84
Copy link
Contributor

Aurelius84 commented Jul 27, 2023

一、Background 🎃

详见:🎉 Paddle 之艾尔登(IR Dialect)快乐勇士挑战赛 ⚔

「艾尔登之王」是「艾尔登法环」三大剧情主线之一,成就奖杯🏆「抵达圆桌厅堂」

二、Motivation 🚀

2.1 赛题介绍

随着新IR底层核心逻辑已经成熟,需要进一步推广验证。当前新IR仅限于在 C++ 底层进行操作,为了能够尽快让新 IR 替代现有的 IR 体系,需要打通 Python 端到C++端的新IR链路。其中有一项重要工作是需要在C++端开发新IR的组网用API ,并且暴露到 Python 端,从而为大规模验证新 IR 体系奠定基础。

2.2 赛题要求

  • 了解新 Paddle 中新 IR 的设计
  • 参照已实现新 IR 组网API,实现自动化生成C++端组网API,并绑定到 Python 端
  • Python 端高频 API 升级适配新 IR 组网API
  • 单测框架适配新 IR 组网
  • 所需 IR 核心组件接口绑定到 Python 端

2.3 参考链接

三、任务总览

自动代码生成介绍:#56849

3.1 RFC

image

3.2 子任务

序号 模块 任务描述 PR 贡献者
1.1 ✅ C++ dialect api生成 根据yaml文件生成C++端pd_api.h/cc文件:以白名单形式生成部分API #56241 #56291 @0x45f
1.2 ✅ C++ dialect api生成 根据yaml文件生成C++端pd_api.h/cc文件:移除白名单支持绝大部分API的生成 #56526 @0x45f
2.1 ✅ python c api生成 根据yaml文件生成static_op_function.h/cc文件 #56571 @0x45f
3.1 ✅ pybind 逻辑生成 根据yaml文件生成ops_api.cc文件:生成静态图分支 #56653 @0x45f
3.2 ✅ pybind 逻辑生成 根据yaml文件生成ops_api.cc文件:下沉动静态图选择逻辑,统一python端调用逻辑 #56653 @0x45f
4.1 ✅ 单测验证推全 python api正确性验证:合入样例PR,确保全流程能够正确跑通 #56935 @0x45f
4.2 ✅ API 推全 【开源任务】新 IR API 推全升级 48/48
4.3 动转静验证 开源任务 issue @yangguohao


@Aurelius84 Aurelius84 changed the title 【艾尔登】任务线四:「艾尔登之王 ⚔ 」之 「API 体系升级」 【艾尔登+开源创新大赛】任务线四:「艾尔登之王 ⚔ 」之 「API 体系升级」 Jul 27, 2023
@Aurelius84 Aurelius84 changed the title 【艾尔登+开源创新大赛】任务线四:「艾尔登之王 ⚔ 」之 「API 体系升级」 【艾尔登+开源创新大赛】「艾尔登之王 ⚔ 」之 「API 体系升级」 Jul 27, 2023
@luotao1 luotao1 moved this to In Progress in Call for Contributions Jul 27, 2023
@YuanRisheng
Copy link
Contributor

YuanRisheng commented Jul 28, 2023

总目标详解

image

简单来说,我们的整体目标是通过对Python端的API进行升级(红色区域代码),实现在新IR下进行组网:
image

上述可参见stat.py中mean的实现:

  • 蓝色区域表示调用动态图C++底层api
  • 绿色区域表示调用静态图旧IR接口组网
  • 红色区域表示调用静态图新IR API组网

(上图中的代码形式是为了大家方便理解的中间状态,最终的理想状态我们会将红色区域与蓝色区域进行统一合并,一个接口既可以走动态图,也可以走新IR静态图)

上图中Python端调用的API接口在C++端实现如下所示(static_op_function.cc):
image

其中蓝框内是绑定代码,通过这一步,可实现在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展开,可看到其中核心调用代码如下图:
image
该代码目录:paddle/fluid/ir/dialect/pd_api.cc,实现如下:
image

这个代码是核心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升级后能够使用现有单测测试的目标)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
status/close 已关闭 type/new-feature 确认的新需求
Projects
Development

No branches or pull requests

6 participants