Description
公告
- 非常欢迎你对飞桨框架做贡献,我们正在运营一个组织——飞桨框架贡献者俱乐部(Paddle Framework Contributor Club, PFCC),会通过定期分享技术知识与发布开发者主导任务的形式持续为飞桨框架做贡献。如果你有意向加入 PFCC,可以提交 PR 至 Paddle,代码合入后,我们会邀请你加入,如果你对某期技术分享的内容感兴趣,也可以通过邮件(ext_paddle_oss@baidu.com)联系我们旁听例会。更多详情见 https://github.com/luotao1 主页说明。
- 如果你是在校的学生,并且有兴趣参加飞桨社区的框架护航项目,非常欢迎你依据这份材料来申请:百度飞桨框架护航计划。2023/7/27晚上19:00-20:00有一个简单的线上介绍会,腾讯会议:544-142-628,点击链接入会。
活动介绍
第六届“中国软件开源创新大赛”在国家自然科学基金委信息科学部的指导下,由中国计算机学会(CCF)主办,西北工业大学、绿色计算产业联盟、CCF开源发展委员会联合承办。联合百度、清华大学等企业单位以及多所高校共同设置赛题,大赛分为“开源项目贡献赛”、“开源任务挑战赛”、“开源案例教学赛”和“开源代码评注赛”四个赛道。
第六届“中国软件开源创新大赛”开源任务挑战赛赛道——飞桨框架任务挑战赛 全新上线,通过比赛机制,鼓励选手了解与参与深度学习开源项目,为中国开源生态建设贡献力量。
本次飞桨框架开源贡献赛以线上比赛的形式进行,参赛选手在规定时间内自由组队选择合适的开发任务,以 Pull Requests 的形式完成贡献,获得相应奖励(开发中遇到问题可以提 Issues),快来组队参赛吧!
赛题列表
赛题详情
赛题一:实现飞桨框架的 python level jit compiler
赛题简介:
飞桨深度学习框架提供了动态图编程的模式来开发深度学习模型(方便开发与调试),以动转静的方式将模型转为静态图来进行推理部署(方便全图优化和高性能运行)。
本赛题,要求为飞桨框架实现一个 python 层的 just-in-time compiler,可以通过在 python 代码执行前通过分析 python bytecode,来产出计算子图,对子图进行图优化,并在某个计算后端上进行执行。在飞桨框架实现既可以动态图灵活开发又可以高效运行的深度学习模型开发方式。
赛题要求:
- 分析用飞桨框架实现的 ResNet 网络的 python bytecode,将其编译成一个计算图。
- 将一个示例的,含有控制流的,用飞桨框架实现的网络,编译成多个计算子图。
- 将编译成的计算子图转为其他后端的计算图表示,并运行推理。(可考虑的计算后端:ONNX RUNTIME,TensorRT,或其他)
产出要求:
- 答辩 PPT
- 书面的技术报告
- 代码提交至:https://github.com/PFCCLab/paddlefx
- 代码运行无误,通过社区 maintainers 的评审并合入代码仓库。
赛题导师:@jzhang533 @gglin001
参考链接:
- 飞桨开源框架:https://github.com/PaddlePaddle/Paddle
- paddlefx项目:https://github.com/PFCCLab/paddlefx
- PEP523: https://peps.python.org/pep-0523/
- Pytorch2.0: https://pytorch.org/get-started/pytorch-2.0/
- ONNX RUNTIME: https://onnxruntime.ai/
- TensorRT: https://github.com/NVIDIA/TensorRT
赛题二:改进 CINN 日志和报错系统
赛题简介:
CINN 当前的日志和报错是使用的 GLOG,通过 VLOG 宏输出日志,通过 CHECK 宏检查正确性。由于 GLOG 本身的缺陷,以及缺乏统一的日志规范,导致 CINN 内冗余日志信息较多,报错内容中有效信息较少。
本赛题,要求为 CINN 改进实现一套完整的日志和报错系统,类似 Paddle 框架中的 PADDLE_ENFORCE 体系,可以在开发时为开发者提供规范的日志指引,在报错时为调试者提供有效的调试信息。从而提供友好的开发体验和调试体验,提升开发和调试效率。
赛题要求:
- 使用 C++,通过宏和模板来实现一套完整的日志和报错系统
- 梳理当前日志相关代码,整理设计一套日志开发规范,逐步替换 CINN 内当前 VLOG 日志
- 改进报错体系和报错内容,参考 PADDLE_ENFORCE,要求报错信息至少包含调用栈、检查内容和出错值,检查最好能包含对 STL 库的支持
- 改进方案应保证易用性和可持续性
产出要求:
- 答辩 PPT
- 书面的技术报告,重点介绍改进后的报错效果,和开发调试体验
- 代码提交至: https://github.com/PaddlePaddle/CINN
- 代码运行无误,通过社区maintainers的评审并合入代码仓库。
赛题导师:@thisjiang
参考链接:
- nGLOG:https://github.com/google/glog
- npaddle:PADDLE_ENFORCE
- npytorch:RFC-0026-logging-system
- ntvm:TVM_RUNTIME_LOGGING
赛题三:Fluid 算子函数式迁移专项
赛题简介:
飞桨深度学习框架在2.3版本发布了高可复用算子库 PHI(Paddle HIgh reusability operator library),支持组合式算子功能复用、Primitive 算子内核复用和插件式加速库复用,可以通过对函数式算子接口组合调用的方式实现新算子。
本赛题要求将飞桨原 Fluid 算子库下的部分重要算子改写成函数式并迁移到 PHI 算子库中,从而使飞桨框架可以借助 PHI 算子库提供的功能特性,统一和低成本地对这些算子做调度优化。
赛题要求:
- 理解给定算子 cpu、gpu 和 xpu kernel 的计算逻辑,对该算子所有 kernel 的实现代码进行改写和迁移
- 对算子 InferShape 函数的张量信息推导进行规范化,补充必要推导信息,并迁移成 PHI 下的 InferMeta
- 将改造后的计算 kernel 和 InferMeta 按算子规范要求注册到 PHI 算子库中
- 任务拆解和详细说明见 tracking issue:[PHI] Functionalization for Fluid kernel #52395
产出要求:
- 代码提交至:https://github.com/PaddlePaddle/Paddle
- 算子迁移后通过所有单测测试,在社区 maintainers评审后合入飞桨主框架仓库
赛题导师:@From00
参考链接:
- 飞桨开源框架:https://github.com/PaddlePaddle/Paddle
- PHI算子库设计文档: https://github.com/PaddlePaddle/docs/blob/develop/docs/design/phi/design_cn.md
- 算子迁移详细要求: https://github.com/PaddlePaddle/community/blob/master/pfcc/call-for-contributions/functionalization_for_fluid_kernel.md
赛题四:在飞桨框架中引入 clang-tidy
赛题简介:
飞桨是集深度学习核心训练和推理部署、基础模型库、端到端开发套件和丰富的工具组件于一体的深度学习框架。百度飞桨在追求高性能的同时,也非常关注框架自身的安全隐患以及健壮性,例如:我们严格且严谨地将一切 warning 视为 error,引入 clang-tidy 有助于增加飞桨的健壮性。
本赛题,要求在飞桨框架中引入 clang-tidy,并希望引入尽可能多的对 paddle 有利的 clang-tidy 的功能。
赛题要求:
- 引入 clang-tidy 至飞桨框架代码中,使其作用于项目全局,即对飞桨所有在 clang-tidy 功能覆盖范围之内的所有文件都应起作用。
- 利用 clang-tidy 使得 paddle 代码更加健壮,例如消除 paddle 尽可能多的编译 warning 等,并可顺利编译使用 paddle。
产出要求:
- 答辩 PPT
- 书面的技术报告
- 代码提交至: https://github.com/PaddlePaddle
- 代码运行无误,通过社区 maintainers 的评审并合入代码仓库。
赛题导师:@Galaxy1458 @zhangbo9674
参考链接:
- 飞桨框架:https://github.com/PaddlePaddle/Paddle
- 飞桨产品:https://www.paddlepaddle.org.cn
- clang-tidy:https://clang.llvm.org/extra/clang-tidy
- cmake:https://cmake.org
- pytorch clang-tidy:https://github.com/pytorch/pytorch/blob/master/.clang-tidy
- clang-tidy代码风格检查工具的调研文档:https://github.com/PaddlePaddle/community/blob/master/pfcc/call-for-contributions/code_style/code_style_clang_tidy.md
赛题五:将 xdoctest 引入到飞桨框架工作流中
赛题简介:
xdoctest 是一个示例代码自动执行和检查工具,可以自动执行 Python docstring 中的示例代码,并对示例代码输出进行检查。
本赛题,要求将 xdoctest 引入到飞桨框架的工作流中,利用 xdoctest 来自动检查示例代码运行正确,且输出结果匹配,以确保示例代码输出的一致性,进一步提高飞桨框架示例代码的质量。
赛题要求:
- 调研 Paddle 现有 CI 流水线中的示例代码检查部分,设计方案以逐步引入 xdoctest,并对现有示例代码检查工具进行替换。
- 更新 Paddle 示例代码以使其符合 xdoctest 要求的格式。
- 设计方案应当充分考虑新旧流水线的更替的问题,并考虑对文档生成流程的影响。
产出要求:
- 答辩 PPT
- 书面的技术报告
- 代码提交至:https://github.com/PaddlePaddle/Paddle
- CI 流水线运行正常,可以按照预期检查示例代码,通过社区 maintainers 的评审并合入代码仓库。
赛题导师:@SigureMo
参考链接:
- 飞桨开源框架:https://github.com/PaddlePaddle/Paddle
- 飞桨框架文档:https://github.com/PaddlePaddle/docs
- xdoctest 文档: https://xdoctest.readthedocs.io/en/latest/
赛题六:飞桨框架 C++ 文档抽取与展示
赛题简介:
飞桨深度学习框架为用户提供了 Python API 官方文档,便于用户查阅 API 对应的源代码、参数、返回值等。
本赛题,要求为飞桨框架自动抽取和展示 C++ 文档,并上线至飞桨官网。
赛题要求:
- 展示对外开放的 C++ 头文件目录结构。
- 自动化抽取并解析 C++ class 和 API 。解析的内容包括但不限于所在文件路径、接口注释、命名空间、 参数、返回值等。
- 上线至飞桨官网。要求官网展示界面对用户友好,设计方案具有可扩展性,未来目录结构、class 和 API 发生变化可自动更新。
赛题说明:
- C++ 头文件所在根目录指 site-packages/paddle/include/paddle
- 解析的 C++ class 和 API 具有前缀 PADDLE_API 标识
产出要求:
- 答辩 PPT
- 书面的技术报告以及设计文档
- 代码提交至:https://github.com/PaddlePaddle/docs
- 代码运行无误,通过社区 maintainers 的评审并合入代码仓库。
赛题导师:@jiahy0825
参考链接:
- 飞桨开源框架:https://github.com/PaddlePaddle/Paddle
- 飞桨官方文档:https://www.paddlepaddle.org.cn/documentation/docs/zh/api/index_cn.html
- Pytorch C++ API:https://pytorch.org/cppdocs/api/library_root.html
赛题七:实现飞桨框架动态图反向图的可视化
赛题简介:
飞桨深度学习框架提供了动态图编程的模式来开发深度学习模型(方便开发与调试),但动态图的反向图调试能力仍存在不足。
本赛题,要求为飞桨动态图框架添加反向节点在 Python 端的访问机制。并在该机制基础上,为飞桨框架扩展反向图可视化能力。
赛题要求:
- 学习动态图框架,有能力为动态图扩展接口。
- 学习 PyTorchViz 使用方法和原理。
- 为飞桨动态图框架扩展 Python 端访问反向节点的能力,包括不限于 grad_fn、next_functions等
- 参考 PyTorchViz 实现飞桨动态图反向图的可视化
- 丰富反向图信息:如 Tensor 名、Tensor dtype、Tensor shape、前向堆栈等
产出要求:
- 答辩 PPT
- 书面的技术报告
- 代码提交至:https://github.com/PaddlePaddle/Paddle
- 代码运行无误,通过社区 maintainers 的评审并合入代码仓库。