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

中国软件开源创新大赛:飞桨框架任务挑战赛(下) #55663

Closed
Ligoml opened this issue Jul 24, 2023 · 22 comments
Closed

中国软件开源创新大赛:飞桨框架任务挑战赛(下) #55663

Ligoml opened this issue Jul 24, 2023 · 22 comments
Assignees
Labels
HappyOpenSource Pro 进阶版快乐开源活动,更具挑战性的任务 status/close 已关闭 type/new-feature 确认的新需求

Comments

@Ligoml
Copy link
Contributor

Ligoml commented Jul 24, 2023

公告

  1. 非常欢迎你对飞桨框架做贡献,我们正在运营一个组织——飞桨框架贡献者俱乐部(Paddle Framework Contributor Club, PFCC),会通过定期分享技术知识与发布开发者主导任务的形式持续为飞桨框架做贡献。如果你有意向加入 PFCC,可以提交 PR 至 Paddle,代码合入后,我们会邀请你加入,如果你对某期技术分享的内容感兴趣,也可以通过邮件(ext_paddle_oss@baidu.com)联系我们旁听例会。更多详情见 https://github.com/luotao1 主页说明。
  2. 如果你是在校的学生,并且有兴趣参加飞桨社区的框架护航项目,非常欢迎你依据这份材料来申请:百度飞桨框架护航计划

活动介绍

第六届“中国软件开源创新大赛”在国家自然科学基金委信息科学部的指导下,由中国计算机学会(CCF)主办,西北工业大学、绿色计算产业联盟、CCF开源发展委员会联合承办。联合百度、清华大学等企业单位以及多所高校共同设置赛题,大赛分为“开源项目贡献赛”、“开源任务挑战赛”、“开源案例教学赛”和“开源代码评注赛”四个赛道。

第六届“中国软件开源创新大赛”开源任务挑战赛赛道——飞桨框架任务挑战赛 全新上线,通过比赛机制,鼓励选手了解与参与深度学习开源项目,为中国开源生态建设贡献力量。
本次飞桨框架开源贡献赛以线上比赛的形式进行,参赛选手在规定时间内自由组队选择合适的开发任务,以 Pull Requests 的形式完成贡献,获得相应奖励(开发中遇到问题可以提 Issues),快来组队参赛吧!

活动已经过半,本 issue 发布下半程挑战赛任务,上半程任务详见:

NEWS:

8月3日晚,导师对赛题进行了在线详解,感兴趣的同学可以查看回放:
主题: PFCC第二十五次会议-软件开源创新大赛赛题讲解
录制文件:https://meeting.tencent.com/v2/cloud-record/share?id=336f340f-9f4d-4bbc-9127-c37f363aae81&from=3

赛题列表

赛题名称 导师 队员 tracking issue
赛题二(更新):改进 CINN 日志和报错系统 @ZzSean
赛题八:paddleviz能力扩展——Tensor信息展示 @wanghuancoder @qiuwenbogdut @Tomoko-hjf #56479
赛题九:优化飞桨开源模型Mask R-CNN训练性能 @zhangting2020 #55907
赛题十:为 PaddleSOT 项目添加 Python 3.11 版本支持 @SigureMo @zrr1999 @gouzil PaddlePaddle/PaddleSOT#360
赛题十一:新 IR 组件及API Python端适配 @YuanRisheng @Aurelius84 @0x45f #55737
赛题十二:新 IR 模型结构的可视化工具建设 @xiaoguoguo626807 @Aurelius84 @qiuwenbogdut @Tomoko-hjf #55599
赛题十三:飞桨支持复数 @GGBond8488
赛题十四:PaddleScience 领域经典论文复现 @HydrogenSulfate @co63oc PaddlePaddle/PaddleScience#535 PaddlePaddle/PaddleScience#502 PaddlePaddle/PaddleScience#511
赛题十五:PaddleScience 领域前沿论文复现 @wangguan1995 @co63oc PaddlePaddle/PaddleScience#536
赛题十六:Fluid 分布式算子迁移到 PHI @hitywt @GhostScreaming @AndSonder @GreatV @BeingGod @huangjiyi @gouzil @yangguohao @zeroRains #55716

赛题详情

赛题二(更新):改进 CINN 日志和报错系统

赛题简介:

Paddle的CINN模块当前的日志和报错是使用的 GLOG,通过 VLOG 宏输出日志,通过 CHECK 宏检查正确性。由于 GLOG 本身的缺陷,以及缺乏统一的日志规范,导致 CINN 内冗余日志信息较多,报错内容中有效信息较少。

本赛题,要求为Paddle的CINN模块改进实现一套完整的日志和报错系统,类似 Paddle 框架中的 PADDLE_ENFORCE 体系,可以在开发时为开发者提供规范的日志指引,在报错时为调试者提供有效的调试信息。从而提供友好的开发体验和调试体验,提升开发和调试效率。

在此简述不能直接使用PADDLE_ENFORCE的原因:

  • Paddle中的enforce.h里有很多代码与phi耦合,无法独立编译CINN
  • 功能和内容对于CINN来说过于冗余,因此希望在CINN中可以更加简洁清晰

赛题要求:

  • 使用 C++,通过宏和模板来实现一套完整的日志和报错系统
  • 梳理当前日志相关代码,整理设计一套日志开发规范,逐步替换 CINN 内当前 VLOG 日志
  • 改进报错体系和报错内容,参考 PADDLE_ENFORCE
  • 改进方案应保证易用性和可持续性

产出要求:

赛题导师:

@ZzSean

参考链接:

赛题八:paddleviz能力扩展——Tensor信息展示

赛题简介:

飞桨深度学习框架提供了动态图编程的模式来开发深度学习模型(方便开发与调试),但动态图的反向图调试能力仍存在不足。@qiuwenbogdut 和 @Tomoko-hjf 两位社区开发者为Paddle开发了反向图可视化工具 paddleviz,很大程度上提升了反向图的调试能力。但我们还希望,在现有 paddleviz 基础上,扩展 paddleviz 的能力,进一步提升反向图的调试能力。

赛题要求:

  • 深入学习Paddle动态图机制,掌握动态图反向图的基础数据结构之间的关系
  • 学习了解 paddleviz 的原理
  • 探索如何在 paddleviz 基础上,扩展反向图边(Tensor)的调试信息,包括不限于Tensor name、shape、dtype、place、stop_gradient 等。
    • 探索以上数据可以通过框架的哪些数据结构中获得,何时、如何获得
    • 探索如何将这些数据在 paddleviz 中展示

产出要求:

赛题导师:

@wanghuancoder

参考链接:

赛题九:优化飞桨开源模型Mask R-CNN训练性能

赛题简介:

飞桨深度学习框架已经发布了很多涵盖多个领域的开源模型,本赛题旨在通过对飞桨深度学习框架支持的开源模型进行优化,提高模型的训练性能,探索飞桨在模型上的性能优化最佳实践。欢迎对深度学习框架和模型优化感兴趣的开发者,展示在模型优化领域的经验和创新性。

赛题要求:

  • 测试环境:可以申请AI Studio资源,使用V100 GPU,latest-dev-cuda11.2-cudnn8.2-trt8.0-gcc82 镜像,进行性能的测试和验证
  • 测试脚本:赛题指定的模型中已包含对训练速度的评测代码,无需参赛者实现
  • 关键内容:
  • 优化前提:不改变模型算法,不修改训练超参数,优化完训练精度指标(如准确率指标)不出现下降
  • 技术手段:可以对训练策略相关的配置进行手动调优(如DataLoader的num workers、训练的data format)、对低效的算子进行优化、对框架执行流程中低效的过程进行改善、实现模型中一些通用的融合模式等。鼓励大家同时对比飞桨和其他开源框架的性能,实现有创新性的优化方案

产出要求:

赛题导师:

@zhangting2020

参考链接:

赛题十:为 PaddleSOT 项目添加 Python3.11 版本支持

赛题简介:

PaddleSOT 是一个 Opcode-Based 的动转静孵化项目,借助 Symbolic Opcode Translator(简称:SOT)在运行时将 PaddlePaddle 动态图组网代码转换为静态图组网代码,具体设计参见:PaddleSOT 项目介绍

PaddleSOT 从一开始是基于 Python 3.8 开发的,并分别在 PaddlePaddle/PaddleSOT#109PaddlePaddle/PaddleSOT#112 支持了 3.9 和 3.10,但 3.11 还是不支持的。因为 3.11 的字节码和 3.8-3.10 的字节码有较大的差异,而 PaddleSOT 是依赖于字节码进行模拟执行的,因此 3.11 的支持需要对 PaddleSOT 进行较多的改动。

本赛题要求为 PaddleSOT 增加 Python 3.11 的支持,使 PaddleSOT 能够正确地进行模拟执行、CodeGen 等流程。并在 PaddleSOT 添加 Python 3.11 流水线,使其能够在 CI 中进行测试。

赛题要求:

  • 为 PaddleSOT 适配 Python 3.11,包括模拟执行过程中的字节码支持、CodeGen 过程中的字节码生成等,使其能够在 Python 3.11 的环境下通过全量单测;
  • 为 PaddleSOT 添加 Python 3.11 的 CI 流水线,使其能够在 CI 中进行测试。

产出要求:

赛题导师:

@SigureMo

参考链接:

赛题十一:新 IR 组件及 API Python 端适配

赛题简介:

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

赛题要求:

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

产出要求:

赛题导师:

@YuanRisheng

参考链接:

赛题十二:新ir模型结构的可视化工具建设

赛题简介:

飞桨深度学习框架近期在重构底层的中间表示(下称:IR),替换原来的 ProgramDesc 为新的 MLIR。具体技术设计详见:IR Dialect。此项目处于高效迭代期,为了加速开发者们对模型、子图级别下新 IR 表示的熟悉,降低功能开发中的调试成本,希望能够给 IR Dialect 添加「可视化」功能.

赛题要求:

产出要求:

赛题导师:

@Aurelius84 @xiaoguoguo626807

参考链接:

赛题十三:飞桨支持复数

赛题简介:

现有的深度学习框架主要是基于对实数函数的优化设计的,在主流的深度学习应用场景中,网络的输入变量,中间变量,输出变量都是实数,与此相关的基础设施,比如数组,优化器等组件也都是适用于实数类型。

但随着深度学习应用的扩展,也出现对复数支持的需求,比如图像,语音等领域的傅里叶变换,量子物理领域,其理论体系都是基于复数建立的。虽然并非不能用实数表示复数运算,但稍显繁琐,深度学习框架有原生的复数支持,可以使建模更接近其理论。

目前飞桨已经完成复数基础设施的建设,包括复数 Attribute 的支持、复数自动微分、数值微分和梯度检测功能,这是实现支持复数的算子的基础。在此基础上需要渐进式添加 & 增强飞桨复数功能,包括新增支持复数的算子、为已有算子添加复数 kernel、以及为相关 API 添加复数支持等。

赛题要求:

完成 paddlepaddle 支持复数 中的67个子任务。

产出要求:

赛题导师:

@GGBond8488

参考链接:

赛题十四:PaddleScience 领域经典论文复现

赛题简介:

PaddleScience 作为开源科学计算套件,希望通过复现各类领域内的相关论文,提高该套件的领域覆盖度,验证套件和框架 API 的正确性和完备性,最终提升用户体验,助力科学计算开发者的开发实验。

赛题要求:

完成三篇论文的复现如下(复现两篇有资格进入答辩环节)

论文一

题目:Extended Physics-Informed Neural Networks (XPINNs): A Generalized Space-Time Domain Decomposition Based Deep Learning Framework for Nonlinear Partial Differential Equations

论文地址:https://github.com/AmeyaJagtap/XPINNs/blob/master/XPINNs_Paper.pdf

参考源码:https://github.com/AmeyaJagtap/XPINNs (基于tensorflow)

论文二

题目:Deep Spatio-Temporal Wind Power Forecasting

论文地址:https://arxiv.org/abs/2109.14530

参考源码:https://github.com/jiangyuan-li/Deep-Spatio-Temporal/tree/main (基于torch)

论文三 (换题说明:#55663 (comment)

题目:An a priori evaluation of a principal component and artificial neural network based combustion model in diesel engine conditions

论文地址:https://www.sciencedirect.com/science/article/abs/pii/S1540748920303552?via%3Dihub

参考源码:https://github.com/deepakdalakoti/PCA-ANN/tree/master (基于keras)

题目:Deep learning based denoising process

论文地址:https://arxiv.org/abs/2208.12544

参考源码:https://github.com/ytg7146/DU_CNN

产出要求:

赛题导师:

@HydrogenSulfate

参考链接:

赛题十五:PaddleScience 领域前沿论文复现

赛题简介:

物理信息神经网络(PINN)在计算力学方向有越来越多的进展。首先通过神经正切核(NTK)理论研究 PINN 的训练动态。 根据数值实验,Queensland University of Technology LAMSE实验室发现:

  • PINN 在训练期间往往是局部逼近器
  • 对于无法成为局部近似器的 PINN,物理信息损失很难通过训练最小化
    受其他研究结果的启发, 该实验室创新性的提出一种新架构:physics-informed radial basis network(PIRBN),它可以:
  • 创新评价指标:直观地展示PINNs收敛的程度
  • 已经证明NTK理论适用于PIRBN。 此外,其他 PINN 技术可以直接迁移到 PIRBN。
  • 创新性使用单层RB神经网络
    image

关于单层RB神经网络:

  • radial basis network由Broomhead 和 Lowe提出
  • 使用radial basis function (RBF)作为激活函数
  • 使用单层神经网络

赛题要求:

完成论文 PIRBN 的复现
题目:Physics-informed radial basis network (PIRBN): A local approximation neural network for solving nonlinear PDEs
论文地址:https://arxiv.org/abs/2304.06234
参考源码:https://github.com/JinshuaiBai/PIRBN (基于 tensorflow)

产出要求:

  • 答辩 PPT
  • 论文阅读总结 PPT 和复现技术点总结 PPT
  • 代码提交至:https://github.com/PaddlePaddle/PaddleScience (develop分支)
  • 代码运行无误、精度与原论文在数量级上保持一致、可视化结果与源代码结果在视觉上基本相同,通过社区 maintainers 的评审并合入代码仓库

赛题导师:

@wangguan1995

参考链接:

赛题十六:Fluid 分布式算子迁移到 PHI

赛题简介:

当前 Fluid 下分布式算子由于未完全迁移到新的 PHI 算子体系,无法具备 PHI 下函数式算子注册时"记录自身输入输出属性“的能力,在分布式场景也就无法使用框架新的通信模块和调度系统,给分布式训练调试、优化等工作带来较大的负担。我们一共收集了17个需要迁移的算子,欢迎大家提交PR一起对这些算子做迁移改造。

赛题要求:

将17个 Fluid 分布式算子的迁移到PHI,完成算子的 cpu/gpu/xpu kernel 以及 InferShape函数的迁移。任务拆解和详细说明见 tracking issue:

产出要求:

赛题导师:

@hitywt @GhostScreaming

参考链接:

@Ligoml Ligoml pinned this issue Jul 24, 2023
@Liyulingyue
Copy link
Contributor

那么,该如何报名赛题9呢/doge

@qiuwenbogdut
Copy link
Contributor

【队名】:小馒头
【序号】:赛题八
【状态】:报名
【链接】:None

@Ligoml
Copy link
Contributor Author

Ligoml commented Jul 25, 2023

下周四(8.3)晚上7:00会邀请各位研发导师对赛题做详解与答疑,预计周三(8.2)会公布会议链接,请大家关注~

@greasebig
Copy link

【队名】:lujunda
【序号】:赛题九
【状态】:报名
【链接】:None

@njjtan
Copy link

njjtan commented Jul 31, 2023

【队名】:costan
【序号】:赛题十四
【状态】:报名
【链接】:无

@zrr1999
Copy link
Member

zrr1999 commented Aug 1, 2023

【队名】:六个骨头
【序号】:赛题十
【状态】:报名
【链接】:无

@luotao1
Copy link
Contributor

luotao1 commented Aug 2, 2023

8.3日晚上7-9点邀请了飞桨研发进行中国软件开源创新大赛赛题讲解,这次会议时间较长(预计两小时),有兴趣的同学可以来参加~

议程:https://github.com/PaddlePaddle/community/blob/master/pfcc/meetings/2023/2023-08-03-meeting-agenda.md

会议时间:2023/08/03 19:00-21:00 (GMT+08:00) 中国标准时间 - 北京

👇 点击链接入会,或添加至会议列表:
https://meeting.tencent.com/dm/VojjLHgcOv2S

#腾讯会议:983-161-320
会议密码:0803

@greasebig @njjtan @sususama

@ximlel
Copy link

ximlel commented Aug 7, 2023

【队名】:PIRBN-NO1
【序号】:赛题十五
【状态】:报名
【链接】:无

@172w
Copy link

172w commented Aug 22, 2023

【队名】:TWSQ
【序号】:赛题十四
【状态】:报名
【链接】:无

@co63oc
Copy link
Contributor

co63oc commented Aug 24, 2023

赛题十四
论文三
题目:An a priori evaluation of a principal component and artificial neural network based combustion model in diesel engine conditions
https://github.com/deepakdalakoti/PCA-ANN/tree/master

源码中没有配置文件和数据集下载地址

图片

图片
图片

下载地址为pdf文件无数据
图片

@HydrogenSulfate
Copy link
Contributor

HydrogenSulfate commented Aug 24, 2023

赛题十四 论文三 题目:An a priori evaluation of a principal component and artificial neural network based combustion model in diesel engine conditions https://github.com/deepakdalakoti/PCA-ANN/tree/master

源码中没有配置文件和数据集下载地址

图片

图片 图片

下载地址为pdf文件无数据 图片

看了一下论文三确实没有给出数据和配置文件,可以考虑做赛题一的XPINNs,@172w @njjtan @co63oc

@luotao1
Copy link
Contributor

luotao1 commented Aug 28, 2023

@co63oc 赛题14的论文3已经换题了,可以看下最新题目。

@co63oc
Copy link
Contributor

co63oc commented Aug 28, 2023

@co63oc 赛题14的论文3已经换题了,可以看下最新题目。

ok

@qiuwenbogdut
Copy link
Contributor

【队名】:小馒头
【序号】:赛题十二
【状态】:报名
【链接】:None

@jiamingkong
Copy link

【队名】:什么是惊喜
【序号】:赛题十五
【状态】:报名
【链接】:None

@Difers
Copy link
Contributor

Difers commented Sep 6, 2023

【队名】:Difers
【序号】:赛题十二
【状态】:报名
【链接】:None

@co63oc
Copy link
Contributor

co63oc commented Sep 9, 2023

@HydrogenSulfate 赛题14的论文一 对paddle.cos求多次导数,但是paddle.cos有错误,使用paddle.sin是可以运行,运行的代码

import paddle

# sin
x = paddle.to_tensor([1.0,2,3], stop_gradient=False, dtype=paddle.float64)
y = paddle.sin(x)
dx = paddle.grad(y, x, retain_graph=False, create_graph=True)[0]
d2x = paddle.grad(dx, x)
print(d2x)

paddle.sin结果
图片

import paddle

# cos 
x = paddle.to_tensor([1.0,2,3], stop_gradient=False, dtype=paddle.float64)
y = paddle.cos(x)
dx = paddle.grad(y, x, retain_graph=False, create_graph=True)[0]
d2x = paddle.grad(dx, x)
print(d2x)

paddle.cos为错误 Unable to get phi::DenseTensor data of Output d2d1y in operator CosDoubleGrad
图片

PaddlePaddle版本2.5.1
图片

@HydrogenSulfate
Copy link
Contributor

@HydrogenSulfate 赛题14的论文一 对paddle.cos求多次导数,但是paddle.cos有错误,使用paddle.sin是可以运行,运行的代码

import paddle

# sin
x = paddle.to_tensor([1.0,2,3], stop_gradient=False, dtype=paddle.float64)
y = paddle.sin(x)
dx = paddle.grad(y, x, retain_graph=False, create_graph=True)[0]
d2x = paddle.grad(dx, x)
print(d2x)

paddle.sin结果 图片

import paddle

# cos 
x = paddle.to_tensor([1.0,2,3], stop_gradient=False, dtype=paddle.float64)
y = paddle.cos(x)
dx = paddle.grad(y, x, retain_graph=False, create_graph=True)[0]
d2x = paddle.grad(dx, x)
print(d2x)

paddle.cos为错误 Unable to get phi::DenseTensor data of Output d2d1y in operator CosDoubleGrad 图片

PaddlePaddle版本2.5.1 图片

根据 $cos(x) = sin(\dfrac{2}{\pi} + \alpha)$,可以这样用sin模拟cos绕过吧?

half_pi = np.pi / 2
def cos(x):
    return paddle.sin(half_pi + x)

@co63oc
Copy link
Contributor

co63oc commented Sep 9, 2023

@HydrogenSulfate
三次方求二阶导数错误,可能多次导数这部分不适合转换
ddout should not be null

import paddle
import numpy as np

x = paddle.to_tensor([1.0,2,3], stop_gradient=False, dtype=paddle.float64)
y = x ** 3
dx = paddle.grad(y, x, retain_graph=True, create_graph=True)[0]
d2x = paddle.grad(dx, x, retain_graph=True, create_graph=True)[0]

图片

@co63oc
Copy link
Contributor

co63oc commented Sep 9, 2023

paddle.exp错误

import paddle
import numpy as np

x = paddle.to_tensor([1.0,2,3], stop_gradient=False, dtype=paddle.float64)
y = paddle.exp(x)
dx = paddle.grad(y, x, retain_graph=True, create_graph=True)[0]
d2x = paddle.grad(dx, x, retain_graph=True, create_graph=True)[0]

图片

@HydrogenSulfate
Copy link
Contributor

@HydrogenSulfate 三次方求二阶导数错误,可能多次导数这部分不适合转换 ddout should not be null

import paddle
import numpy as np

x = paddle.to_tensor([1.0,2,3], stop_gradient=False, dtype=paddle.float64)
y = x ** 3
dx = paddle.grad(y, x, retain_graph=True, create_graph=True)[0]
d2x = paddle.grad(dx, x, retain_graph=True, create_graph=True)[0]

图片

可以先用 x*x*x 代替

paddle.exp错误

import paddle
import numpy as np

x = paddle.to_tensor([1.0,2,3], stop_gradient=False, dtype=paddle.float64)
y = paddle.exp(x)
dx = paddle.grad(y, x, retain_graph=True, create_graph=True)[0]
d2x = paddle.grad(dx, x, retain_graph=True, create_graph=True)[0]

图片

程序运行开头设置一下:paddle.framework.core.set_prim_eager_enabled(True)

@Ligoml
Copy link
Contributor Author

Ligoml commented Oct 10, 2023

本赛道开发成果征集与评审工作已完成,向大赛主办方推选14名优秀开发者进入预赛评审和决赛答辩,具体结果请关注大赛主办方通知,或各赛题群内通知,赛事评审通知详见:https://mp.weixin.qq.com/s/3QIJT7673cAEpd3VJPbiBg

注:各赛题未完成的开发任务可继续进行,成果计入飞桨日常开源活动 #56689 ,have fun~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
HappyOpenSource Pro 进阶版快乐开源活动,更具挑战性的任务 status/close 已关闭 type/new-feature 确认的新需求
Projects
None yet
Development

No branches or pull requests