PaddlePaddle / PaddleScience

PaddleScience is SDK and library for developing AI-driven scientific computing applications based on PaddlePaddle.
http://paddlescience-docs.rtfd.io/
Apache License 2.0
260 stars 147 forks source link

【快乐开源】基于hydra的案例改造计划 #571

Closed HydrogenSulfate closed 9 months ago

HydrogenSulfate commented 10 months ago

This project will be mentored by @HydrogenSulfate

报名格式参考:【报名】:2、3,多个任务之间需要使用中文顿号分隔,报名多个连续任务可用横线表示,如 2-5 PR 提交格式:在 PR 的标题中以 【hydra No.xxx】 开头,注明任务编号

1. 背景

PaddleScience 现有案例只提供了训练代码,没有显式地给出训练命令,也没有提供预训练模型供用户快速进行推理体验;同时现有案例的超参数与代码文件耦合,在实验管理上并不方便。因此为了提升用户体验,期望在案例文档开头,提供训练命令;另外经过调研,引入了 facebook/hydra 配置管理和解析库,方便实验管理和解析。

1.1 Hydra 是什么

Hydra是漫威漫画旗下的超级反派组织,初次登场于《Strange Tales》第135期。该组织的起源可以追溯到一位名叫蜂巢的异人,因其能力过强而被送往遥远的星球。Hydra的标志为骷髅头与下方的蛇足,口号是“砍掉一个头,再长出两个头取而代之”,与神话中的九头蛇海德拉形象相契合。该组织以其无穷无尽的杂兵和强大的再生能力实现这一口号。在现代,一般是将分支NAZI Hydra作为九头蛇组织的主要代表,但并非正统的Hydra。该组织曾隶属于二战中的纳粹德国,并在纳粹政权倒台后渗透进神盾局中,利用神盾局的旗号制造恐慌混乱,从战争中获得利益。- 来自文心一言

Hydra是一个开源的Python框架,简化了研究和其他复杂应用程序的开发。 关键功能是能够按组合动态创建分层配置,并通过配置文件和命令行覆盖它。 Hydra这个名字来自于它能够运行多个类似的工作 - 很像具有多个头的Hydra

Hydra 是一个基于 YAML 格式配置文件和 Omegaconf 分层配置系统的实验管理工具。

1.2 如何利用 Hydra 如何提升实验效率

由于 hydra 功能丰富而开发者并不需要完全了解这些功能,因此 PaddleScience 提供了简要的说明:https://paddlescience-docs.readthedocs.io/zh/latest/zh/user_guide/#111。 可参考该文档了解在 PaddleScience 中如何使用 hydra 的基本功能。

2. 收益

了解开源组合配置管理工具 hydra 及其基本语法,提升实验效率。

3. 开发流程

3.1 安装 PaddleScience

下载安装 PaddleScience 套件:https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/#121-git

3.2 参考教程,改造案例代码

  1. 参考 PaddleScience + hydra 的使用教程:https://paddlescience-docs.readthedocs.io/zh/latest/zh/user_guide/#11-yaml-hydra
  2. 改造现有案例代码:将原来的 __main__下面的代码移动至 train(cfg)中,然后将 train 部分的评估/推理代码放至新建的 evaluate(cfg)函数中,最后在__main__中通过 def main(cfg: DictConfig)启动案例代码
  3. 修改对应文档中引用代码块的起始位置和终止位置,并在文档开头添加训练命令(考虑到快乐开源开发者可能没有算力,无需添加对应的预训练模型和推理命令,如需数据集则需要加上下载、解压命令)

整体代码可参考 bracket 案例改造 PR 中的 bracket.pybracket.yamlbracket.md 三个文件:https://github.com/PaddlePaddle/PaddleScience/pull/569/files#diff-66a907ab8353125bfd79670b3892e23360967493faf6fd74c2b8aa9bc99b7b6b。 文档改造效果可以参考 bracket 文档:https://paddlescience-docs.readthedocs.io/zh/latest/zh/examples/bracket/

序号 案例 认领人/状态/PR号
1 examples/volterra_ide.md @enkilee
@HydrogenSulfate #572
2 examples/laplace2d.md @xusuyong #572 #575
@HydrogenSulfate
3 examples/viv.md @dddlli
@GreatV #622
4 examples/aneurysm.md @enkilee #607
5 examples/shock_wave.md @DrRyanHuang #627
6 examples/cylinder2d_unsteady.md @zbt78 #624
7 examples/ldc2d_unsteady.md @lknt #580
8 examples/ldc2d_steady.md @lknt #599
9 examples/darcy2d.md @co63oc #590
10 examples/labelfree_DNN_surrogate.md @co63oc #591
11 examples/hpinns.md @co63oc #582
12 examples/deephpms.md @co63oc #603
13 examples/lorenz.md @co63oc #587 #602
14 examples/rossler.md @co63oc #588 #602
15 examples/deeponet.md @co63oc #589
16 examples/cylinder2d_unsteady_transformer_physx.md @co63oc #602
17 examples/tempoGAN.md @co63oc #592
18 examples/deepcfd.md @MayYouBeProsperous #583
19 examples/phylstm.md @co63oc #579
20 examples/bubble.md @co63oc #581

3.3 整理代码并提交PR

参考 PaddleScience文档-贡献指南-整理代码并提交

4. 参考资料

5. 奖励

统计信息

排名不分先后 @HydrogenSulfate (1) @xusuyong (1) @GreatV (1) @enkilee (1) @DrRyanHuang (1) @zbt78 (1) @lknt (2) @co63oc (11) @MayYouBeProsperous (1)

enkilee commented 10 months ago

【报名】:1

MayYouBeProsperous commented 10 months ago

【报名】:18

lknt commented 10 months ago

【报名】:7、8

HydrogenSulfate commented 10 months ago

【报名】:1、2

DrRyanHuang commented 10 months ago

【报名】:5 (11月6号之前没见到PR就释放🧐😆😆😆)

GreatV commented 10 months ago

【报名】:3

zbt78 commented 10 months ago

【报名】:6

luotao1 commented 9 months ago

基于hydra的案例改造计划 已全部完成,感谢参与的小伙伴们!

排名不分先后 @HydrogenSulfate (1) @xusuyong (1) @GreatV (1) @enkilee (1) @DrRyanHuang (1) @zbt78 (1) @lknt (2) @co63oc (11) @MayYouBeProsperous (1)

欢迎继续参与快乐开源的其他任务