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

[WIP] Code merge | Merge CINN into Paddle #54405

Conversation

chenwhql
Copy link
Contributor

@chenwhql chenwhql commented Jun 7, 2023

PR types

Breaking changes

PR changes

Others

Description

CINN编译器后续将作为Paddle训练推理的一个主要后端,出于以下几点考虑现将CINN合入Paddle repo:

  1. 解决两个Repo CI监控不同步,CI单测相互依赖导致的研发效率低下的问题
  2. 减少重复建设,整合CINN中cmake组件、第三方库依赖、报错检查、Profiler等基础设施,复用Paddle中实现
  3. 为后续与新IR、新执行器等框架核心体系整合做好准备

CINN长久以来一直与Paddle分离研发,人力有限,在代码质量、规范检查等方面已与Paddle有较大差距,且cmake与thrid_party也存在诸多重复实现,因此两者整合很难一步到位,本PR仅做了最初级的整合工作,本PR合入后,后续剩余的整合与规范化工作可以适当并行开展加速

本PR当前工作

1. 将CINN主体代码按以下结构整合到Paddle中

CINN/cinn -> Paddle/paddle/cinn # cinn后续作为框架重要训练后端,与fluid,phi属于同一层级
CINN/python/cinn -> Paddle/python/cinn
CINN/python/tests-> Paddle/test/cinn
CINN/infrt # 不移动,主框架已删除,属于废弃代码
CINN/cmake -> Paddle/cmake/cinn
CINN/tests -> Paddle/paddle/cinn/tests # 后续还需要移到Paddle/test/cpp/cinn,符合当前规范
CINN/tools -> Paddle/tools/cinn
CINN/docs,tutorials -> docs/cinn # 应该统一移到docs repo

2. 添加CINN_ONLY编译选项,按照以上目录结构编译通过,原单测可执行

将cinn根目录的CMakeLists.txt放置到Paddle/cmake/cinn.cmake中,原cinn的编译选项与Paddle编译选项有映射关系,不需要再单独保留,复用Paddle编译选项即可

为了避免前期冲突,PR中将cinn core.cmake的cc_library, nv_library等添加了cinn前缀,但这是不必要的,后续需要与paddle generic.cmake中的函数整合

单独编译CINN的编译:
cmake .. -DWITH_CINN=ON -DCINN_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=ON -DPY_VERSION=3.7

处于以下考虑保留CINN独立编译:

  • 由于CINN还有仅基于自身的单元测试,如果要联合整个paddle编译的话,后续开发效率会比较低,所以保留CINN独立编译
  • CINN与Paddle耦合会有诸多问题:
    • 整体so体积超限导致发包困难
    • 代码耦合后拆分非常困难

后续各组件的简要关系如下:
image

并不完美,应该将errors,profiler从phi中进一步拆解为libutils.so供cinn、phi和ir共同依赖,依赖phi过于沉重

后续TODO

  1. Paddle+CINN联合编译通过,达到原先两个repo联合研发的状态
    a. 逐个对比generic.cmake和cinn.cmake中的funciton,将cinn.cmake整合到generic.cmake
    b. glog,gflags,gtest,mkldnn等基础组件要和单机整合
    c. 移除Paddle原先ExternalProject_Add的cinn整合代码,改为dep动态链接库
    d. WITH_CINN编译通过,联合的单测可以执行
    e. Paddle+CINN联合编译:cmake .. -DWITH_CINN=ON -DWITH_GPU=ON -DWITH_TESTING=ON -DPY_VERSION=3.7
  2. 先整体合入Paddle(需要先强制合入,有很多检查会失败,但无法都事先修完,此事优先级较高,合入后才能并行加速)
  3. CINN C++代码规范、Python代码规范问题梳理(可以考虑和社区同学共建)
  4. 协同支持Paddle离线编译,配合进行必要升级(可以考虑和社区同学共建)
  5. CI流水线整合
  6. 基础功能性组件的整合复用(可以考虑和社区同学共建)
    a. CINN的profiler可以复用Paddle的Profiler
    b. CINN的报错检查可以复用PADDLE_ENFORCE
    c. 涉及到动态库依赖关系梳理

注:本PR使用的paddle和cinn commit已较旧,一些冲突在最新代码需要解决,例如Paddle升级了C++17,cmake需要升级至18,可能会有C++编译问题

@paddle-bot
Copy link

paddle-bot bot commented Jun 7, 2023

你的PR提交成功,感谢你对开源项目的贡献!
请关注后续CI自动化测试结果,详情请参考Paddle-CI手册
Your PR has been submitted. Thanks for your contribution!
Please wait for the result of CI firstly. See Paddle CI Manual for details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants