|
| 1 | +> 本文档为 PaddleScience 开发者任务 RFC(**R**equest **F**or **C**omment) 模板 |
| 2 | +
|
| 3 | +# 任务名 |
| 4 | + |
| 5 | +> RFC 文档相关记录信息 |
| 6 | +
|
| 7 | +| | | |
| 8 | +| ------------ | ----------------- | |
| 9 | +| 提交作者 | jiamingkong | |
| 10 | +| 提交时间 | 2024-03-28 | |
| 11 | +| RFC 版本号 | v1.0 | |
| 12 | +| 依赖飞桨版本 | release 2.6.0 版本 | |
| 13 | +| 文件名 | 20240328_SDGD_optimizer.md | |
| 14 | + |
| 15 | +## 1. 概述 |
| 16 | + |
| 17 | +### 1.1 相关背景 |
| 18 | + |
| 19 | +[community/hackathon/hackathon_6th/【Hackathon 6th】开源贡献个人挑战赛科学计算任务合集.md at master · PaddlePaddle/community (github.com)](https://github.com/PaddlePaddle/community/blob/master/hackathon/hackathon_6th/【Hackathon 6th】开源贡献个人挑战赛科学计算任务合集.md#no40-sdgd-优化器实现) |
| 20 | + |
| 21 | +根据原始论文https://arxiv.org/pdf/2307.12306.pdf的公式和实验条件,用 paddle 实现 SDGD 优化器,支持单机训练和多卡并行训练,最终在 Allen-Cahn 问题上,复现出红框中的四个精度。 |
| 22 | + |
| 23 | +### 1.2 功能目标 |
| 24 | + |
| 25 | +> 具体需要实现的功能点。 |
| 26 | +
|
| 27 | +1. (任务要求目标)复现SDGD的优化器,使其可以在PaddleScience中直接应用,求解PINN偏微分方程。 |
| 28 | + |
| 29 | +### 1.3 意义 |
| 30 | + |
| 31 | +该任务的顺利完成,将会为PaddleScience和PaddlePaddle贡献一个全新的optimizer,让一些高维度的高参数量的优化问题求解所需的显存量显著减少。 |
| 32 | + |
| 33 | +## 2. PaddleScience 现状 |
| 34 | + |
| 35 | +当前的PaddleScience中仅实现了常见的神经网络优化器,例如SGD、Adam等,没有该论文中提到的全新的优化器。 |
| 36 | + |
| 37 | +## 3. 目标调研 |
| 38 | + |
| 39 | +> 如果是论文复现任务,则需说明复现论文解决的问题、所提出的方法以、复现目标以及可能存在的难点;如果是 API 开发类任务,则需说明已有开源代码中类似功能的实现方法,并总结优缺点。 |
| 40 | +
|
| 41 | +该任务是论文复现任务,论文中提到的问题是一些输入维度高的PINN模型,在求解的时候通常会因为求导项目过多,导致显存占用非常巨大,难以训练。论文中提出的方法是通过每次采样不同的输入维度,降低每个批次中显存的占用,同时通过其他技术手段保证估算的梯度仍然是完整的、无偏的梯度。 |
| 42 | + |
| 43 | +复现目标:实现与论文中参考案例一致的内存占用量、训练速度,和最后收敛精度。 |
| 44 | + |
| 45 | +可能存在的难点:由于作者没有释放官方代码,所以我们按照论文中重新构建的代码在实现细节上无法和作者设想、和当时的实验环境完全统一。 |
| 46 | + |
| 47 | +## 4. 设计思路与实现方案 |
| 48 | + |
| 49 | +思路: |
| 50 | + |
| 51 | +优化器在ppsci的大多数问题求解的例子中,都是一个独立可调整的超参数,我们打算使用ppsci作为实验环境,重现文中的例子。并且将优化器的实现也放在ppsci里面。 |
| 52 | + |
| 53 | +实现方案: |
| 54 | + |
| 55 | +1. 通过在`ppsci/optimizer/optimizer.py` 中补充优化器的实现,使其全局可用 |
| 56 | +2. 补充相应的examples,证明该优化器实现细节与原文一致或足够接近。 |
| 57 | + |
| 58 | +### 4.1 补充说明[可选] |
| 59 | + |
| 60 | +> 可以是对设计方案中的名词、概念等内容的详细解释。 |
| 61 | +
|
| 62 | +## 5. 测试和验收的考量 |
| 63 | + |
| 64 | +> 说明如何对复现代码/开发API进行测试,以及验收标准,保障任务完成质量。 |
| 65 | +
|
| 66 | +依据论文的构造方法,在examples文件夹中补充相应的例子和配置,并调用sdgd优化器求解,记录精度、耗时等信息,与原文对比。 |
| 67 | + |
| 68 | +标准:与原文一致。 |
| 69 | + |
| 70 | +## 6. 可行性分析和排期规划 |
| 71 | + |
| 72 | +> 可以以里程碑列表的方式,细化开发过程,并给出排期规划。 |
| 73 | +
|
| 74 | +- 2024/3/28 提交RFC |
| 75 | +- 2024/4/1 利用ppsci已有框架构造实验环境 |
| 76 | +- 2024/4/5 初步实现计算逻辑与原文一致的sdgd optimizer |
| 77 | +- 2024/4/12 性能调优完成 |
| 78 | + |
| 79 | +总耗时:两周 |
| 80 | + |
| 81 | +## 7. 影响面 |
| 82 | + |
| 83 | +- 影响到`ppsci/optimizer/optimizer.py`,在其中新增SDGD的定义; |
| 84 | +- 影响到`examples`,在其中新增一个与原文接近的试验配置。 |
0 commit comments