Skip to content

Commit aa85dec

Browse files
Merge pull request #287 from HydrogenSulfate/add_overview
Add overview & optimize home page
2 parents 223f746 + 1670e18 commit aa85dec

File tree

12 files changed

+223
-89
lines changed

12 files changed

+223
-89
lines changed

docs/images/overview/constraint.jpg

92.1 KB
Loading

docs/images/overview/equation.jpg

132 KB
Loading

docs/images/overview/geometry.jpg

108 KB
Loading

docs/images/overview/workflow.jpg

219 KB
Loading

docs/index.md

Lines changed: 16 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,26 @@
1-
# 欢迎使用 PaddleScience
1+
# PaddleScience
22

3-
## 1. 开始安装
3+
> *Developed with [PaddlePaddle](https://www.paddlepaddle.org.cn/)*
44
5-
### 1.1 安装 PaddlePaddle
5+
PaddleScience 是一个基于深度学习框架 PaddlePaddle 开发的科学计算套件,利用深度神经网络的学习能力和 PaddlePaddle 框架的自动(高阶)微分机制,解决物理、化学、气象等领域的问题。支持物理机理驱动、数据驱动、数理融合三种求解方式,并提供了基础 API 和详尽文档供用户使用与二次开发。
66

7-
请在 [PaddlePaddle](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/develop/install/pip/linux-pip.html) 官网按照您的运行环境,安装 **develop** 版的 PaddlePaddle
7+
## 特性
88

9-
### 1.2 安装 PaddleScience
9+
- 支持简单几何和复杂 STL 几何的采样与布尔运算。
10+
- 支持包括 Dirichlet、Neumann、Robin 以及自定义边界条件。
11+
- 支持物理机理驱动、数据驱动、数理融合三种问题求解方式。涵盖流体、结构、气象等领域 8+ 案例。
12+
- 支持结果可视化输出与日志结构化保存。
13+
- 完善的 type hints,用户使用和代码贡献全流程文档,所有经典案例 AI studio 一键运行,降低使用门槛,提高开发效率。
14+
- 更多特性正在开发中...
1015

11-
[1.2.1 git 安装](#121-git)[1.2.2 pip 安装](#122-pip) 任选一种安装方式即可
16+
## 支持
1217

13-
#### 1.2.1 git 安装
18+
- 如使用过程中遇到问题或想提出开发建议,欢迎在 [Issue](https://github.com/PaddlePaddle/PaddleScience/issues/new) 页面新建 issue。
1419

15-
1. 执行以下命令,从 github 上克隆 PaddleScience 项目,进入 PaddleScience 目录,并将该目录添加到系统环境变量中
20+
## 贡献代码
1621

17-
``` shell
18-
git clone https://github.com/PaddlePaddle/PaddleScience.git
19-
cd PaddleScience
20-
export PYTHONPATH=$PWD:$PYTHONPATH
21-
```
22+
PaddleScience 项目欢迎并依赖开发人员和开源社区中的用户,请参阅 [贡献指南](https://paddlescience-docs.readthedocs.io/zh/latest/zh/contribute/)
2223

23-
2. 安装必要的依赖包
24+
## 证书
2425

25-
``` shell
26-
pip install -r requirements.txt
27-
28-
# 安装较慢时可以加上-i选项,提升下载速度
29-
# pip install -r requirements.txt -i https://pypi.douban.com/simple/
30-
```
31-
32-
???+ Info "安装注意事项"
33-
34-
如需使用外部导入STL文件来构建几何,以及使用加密采样等功能,还需额外安装 [pymesh](https://pymesh.readthedocs.io/en/latest/installation.html#download-the-source)(推荐编译安装) 和 [open3d](https://github.com/isl-org/Open3D/tree/master#python-quick-start)(推荐pip安装)
35-
36-
#### 1.2.2 pip 安装
37-
38-
**coming soon**
39-
40-
<div style='display: none'>
41-
执行以下命令进行 pip 安装
42-
43-
``` shell
44-
pip install -i https://pypi.org/simple/ paddlesci
45-
```
46-
47-
</div>
48-
49-
## 2. 验证安装
50-
51-
执行以下代码,验证安装的 PaddleScience 基础功能是否正常
52-
53-
``` py
54-
import ppsci
55-
ppsci.utils.run_check()
56-
```
57-
58-
如果出现 `PaddleScience is installed successfully.✨ 🍰 ✨`,则说明安装验证成功。
59-
60-
## 3. 开始使用
61-
62-
- 运行内置的案例(以 **ldc2d_unsteady_Re10.py** 为例)
63-
64-
``` shell
65-
cd examples/ldc/
66-
python ./ldc2d_unsteady_Re10.py
67-
```
68-
69-
- 编写自己的案例(假设案例名为demo)
70-
71-
推荐在 `examples/` 下新建 `demo` 文件夹,然后在 `demo` 文件夹下新建 `demo.py`,最后在 `demo.py` 文件中使用 PaddleScience 提供的 [API](./zh/api/arch.md) 编写代码
72-
73-
``` py linenums="1" title="examples/demo/demo.py"
74-
import ppsci
75-
76-
# write your code here...
77-
```
78-
79-
编写完毕后运行你的代码
80-
81-
``` shell
82-
cd examples/demo
83-
python ./demo.py
84-
```
26+
[Apache License 2.0](https://github.com/PaddlePaddle/PaddleScience/blob/develop/LICENSE)

docs/install_setup.md

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# 欢迎使用 PaddleScience
2+
3+
## 1. 开始安装
4+
5+
### 1.1 安装 PaddlePaddle
6+
7+
请在 [PaddlePaddle](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/develop/install/pip/linux-pip.html) 官网按照您的运行环境,安装 **develop** 版的 PaddlePaddle
8+
9+
### 1.2 安装 PaddleScience
10+
11+
[1.2.1 git 安装](#121-git)[1.2.2 pip 安装](#122-pip) 任选一种安装方式即可
12+
13+
#### 1.2.1 git 安装
14+
15+
1. 执行以下命令,从 github 上克隆 PaddleScience 项目,进入 PaddleScience 目录,并将该目录添加到系统环境变量中
16+
17+
``` shell
18+
git clone https://github.com/PaddlePaddle/PaddleScience.git
19+
cd PaddleScience
20+
export PYTHONPATH=$PWD:$PYTHONPATH
21+
```
22+
23+
2. 安装必要的依赖包
24+
25+
``` shell
26+
pip install -r requirements.txt
27+
```
28+
29+
???+ Info "安装注意事项"
30+
31+
如需使用外部导入STL文件来构建几何,以及使用加密采样等功能,还需额外安装 [pymesh](https://pymesh.readthedocs.io/en/latest/installation.html#download-the-source)(推荐编译安装) 和 [open3d](https://github.com/isl-org/Open3D/tree/master#python-quick-start)(推荐pip安装)
32+
33+
#### 1.2.2 pip 安装
34+
35+
coming soon
36+
37+
<div style='display: none'>
38+
执行以下命令进行 pip 安装
39+
40+
``` shell
41+
pip install -i https://pypi.org/simple/ paddlesci
42+
```
43+
44+
</div>
45+
46+
## 2. 验证安装
47+
48+
执行以下代码,验证安装的 PaddleScience 基础功能是否正常
49+
50+
``` py
51+
import ppsci
52+
ppsci.utils.run_check()
53+
```
54+
55+
如果出现 `PaddleScience is installed successfully.✨ 🍰 ✨`,则说明安装验证成功。
56+
57+
## 3. 开始使用
58+
59+
- 运行内置的案例(以 **ldc2d_unsteady_Re10.py** 为例)
60+
61+
``` shell
62+
cd examples/ldc/
63+
python ./ldc2d_unsteady_Re10.py
64+
```
65+
66+
- 编写自己的案例(假设案例名为demo)
67+
68+
推荐在 `examples/` 下新建 `demo` 文件夹,然后在 `demo` 文件夹下新建 `demo.py`,最后在 `demo.py` 文件中使用 PaddleScience 提供的 [API](./zh/api/arch.md) 编写代码
69+
70+
``` py linenums="1" title="examples/demo/demo.py"
71+
import ppsci
72+
73+
# write your code here...
74+
```
75+
76+
编写完毕后运行你的代码
77+
78+
``` shell
79+
cd examples/demo
80+
python ./demo.py
81+
```

docs/overview.md

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# PaddleScience 模块介绍
2+
3+
PaddleScience 在代码结构上划分为 12 个模块。从一般深度学习工作流的角度来看,这 12 个模块分别负责构建输入数据、构建神经网络模型、构建损失函数、构建优化器,训练、评估、可视化等功能。从科学计算角度来看,部分模块承担了不同于 CV、NLP 任务的功能,比如用于物理机理驱动的 Equation 模块,定义方程公式和辅助高阶微分计算;用于涉及几何场景采样的 Geometry 模块,定义简单、复杂几何形状并在其内部、边界采样构造数据;Constraint 模块将不同的优化目标视为一种“约束”,使得套件能用一套训练代码统一物理机理驱动、数据驱动、数理融合三种不同的求解流程。
4+
5+
## 1. 整体工作流
6+
7+
<figure markdown>
8+
![workflow](./images/overview/workflow.jpg){ loading=lazy style="height:80%;width:80%"}
9+
</figure>
10+
11+
上图是 PaddleScience 的 workflow 示意图(以基于几何的问题求解为例),流程描述如下
12+
13+
1. Geometry 负责构建几何并在几何上采样,完成数据构建;
14+
2. 用 Model 模块接受输入,得到模型输出;
15+
3. 科学计算任务具有特殊性,模型输出往往并不是前向计算的终点,还需要进一步按照 Equation,计算出方程公式所需的变量;
16+
4. 计算损失函数,并利用框架的自动微分机制,求出所有参数的梯度;
17+
5. 上述的优化目标可以施加在几何的不同区域上,比如interior、boundary区域,因此上图中的 Constraint 可以有多个;
18+
6. 将所有 Constraint 贡献的梯度累加,并用于更新模型参数;
19+
7. 训练过程中如果开启了评估和可视化功能,则会按一定频率自动对当前模型进行评估和预测结果可视化;
20+
8. Solver 是整个套件运行的全局调度模块,负责将上述过程按用户指定的轮数和频率重复运行。
21+
22+
## 2. 模块简介
23+
24+
### 2.1 [Arch](./zh/api/arch.md)
25+
26+
Arch 模块负责各种神经网络模型的组网、参数初始化、前向计算等功能,内置了多种模型供用户使用。
27+
28+
### 2.2 [AutoDiff](./zh/api/autodiff.md)
29+
30+
AutoDiff 模块负责计算高阶微分功能,内置基于 Paddle 自动微分机制的全局单例 `jacobian``hessian` 供用户使用。
31+
32+
### 2.3 [Constraint](./zh/api/constraint.md)
33+
34+
<figure markdown>
35+
![constraint](./images/overview/constraint.jpg){ loading=lazy style="height:50%;width:50%"}
36+
</figure>
37+
38+
为了在套件中统一物理信息驱动、数据驱动、数理融合三种求解方式,我们将数据构造、输入到输出的计算过程、损失函数等必要接口在其定义完毕之后,统一记录在 Constraint 这一模块中,有了这些接口,Constraint 就能表示不同的训练目标,如:
39+
40+
- `InteriorConstraint` 定义了在给定的几何区域内部,按照给定输入到输出的计算过程,利用损失函数优化模型参数,使得模型输出满足给定的条件;
41+
- `BoundaryConstraint` 定义了在给定的几何区域边界上,按照给定输入到输出的计算过程,利用损失函数优化模型参数,使得模型输出满足给定的条件;
42+
- `SupervisedConstraint` 定义了在给定的监督数据(相当于CV、NLP中的监督训练)上,按照给定输入到输出的计算过程,利用损失函数优化模型参数,使得模型输出满足给定的条件。
43+
- ...
44+
45+
这一模块有两个主要作用,一是在代码流程上统一了物理信息驱动、数据驱动两个不同的优化范式(前者类似监督训练方式,后者类似无监督训练方式),二是使得套件能应用在数理融合的场景中,只需分别构造不同的 Constraint 并让它们共同参与训练即可。
46+
47+
### 2.4 Data
48+
49+
Data 模块负责数据的读取、包装和预处理,由以下 3 个子模块分别负责。
50+
51+
#### 2.4.1 [Dataset](./zh/api/data/dataset.md)
52+
53+
Dataset 模块存放各种数据集的包装类,将数据包装成统一的结构再用于读取。
54+
55+
#### 2.4.2 [Transform](./zh/api/data/process/transform.md)
56+
57+
Transform 模块存放各种基于单样本的数据预处理方法,包括数据平移 `Translate` 和数据缩放 `Scale`,一般与 `data.dataset` 结合使用。
58+
59+
#### 2.4.3 [BatchTransform](./zh/api/data/process/batch_transform.md)
60+
61+
BatchTransform 模块存放各种基于批样本的数据预处理方法。
62+
63+
### 2.5 [Equation](./zh/api/equation.md)
64+
65+
<figure markdown>
66+
![equation](./images/overview/equation.jpg){ loading=lazy style="height:80%;width:80%" align="center" }
67+
</figure>
68+
69+
Equation 模块负责定义各种常见方程的计算函数,如 `NavierStokes` 表示 N-S 方程,`Vibration` 表示振动方程,每个方程内部含有相关变量的计算函数。
70+
71+
### 2.6 [Geometry](./zh/api/geometry.md)
72+
73+
<figure markdown>
74+
![geometry](./images/overview/geometry.jpg#center){ loading=lazy style="height:50%;width:50%" }
75+
</figure>
76+
77+
Geometry 模块负责定义各种常见的几何形状,如 `Interval` 线段几何、`Rectangle` 矩形几何、`Sphere` 球面几何。
78+
79+
### 2.7 [Loss](./zh/api/loss.md)
80+
81+
Loss 模块负责定义各种损失函数,在模型前向与方程计算完毕后,将结果与参考值计算损失值,供后续的梯度优化算法使用。
82+
83+
### 2.8 [Optimizer](./zh/api/optimizer.md)
84+
85+
Optimizer 模块负责定义各种优化器,如 `SGD``Adam``LBFGS`
86+
87+
### 2.9 [Solver](./zh/api/solver.md)
88+
89+
Solver 模块负责定义求解器,作为训练、评估、推理、可视化的启动和管理引擎。
90+
91+
### 2.10 [Utils](./zh/api/utils.md)
92+
93+
Utils 模块内部存放了一些适用于多种场景下的工具类、函数,如在 `reader.py` 下的数据读取函数,在 `logger.py` 下的日志打印函数,以及在 `expression.py` 下的方程计算类。
94+
95+
### 2.11 [Validate](./zh/api/validate.md)
96+
97+
Validator 模块负责定义各种评估器,用于模型训练完一个 epoch 后自动在指定数据上进行评估(可选,默认不开启训练时评估)并得到评估指标。
98+
99+
### 2.12 [Visualize](./zh/api/visualize.md)
100+
101+
Visualizer 模块负责定义各种可视化器,用于模型评估完后在指定数据上进行预测(可选,默认不开启训练时可视化)并将结果保存成可视化的文件。

mkdocs.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ copyright: Copyright &copy; 2022 - 2023 PaddlePaddle
2828

2929
# Page tree
3030
nav:
31-
- 安装使用: index.md
31+
- PaddleScience:
32+
- 主页: index.md
33+
- 功能介绍: overview.md
34+
- 安装使用: install_setup.md
3235
- 经典案例:
3336
- PINNs:
3437
- ViV: zh/examples/viv.md
@@ -81,6 +84,7 @@ theme:
8184
- navigation.sections
8285
- navigation.prune
8386
- navigation.top
87+
- search.suggest
8488
- navigation.instant
8589
- navigation.expand
8690
- content.code.copy
@@ -121,7 +125,7 @@ markdown_extensions:
121125
- pymdownx.arithmatex:
122126
generic: true
123127
- toc:
124-
permalink: ⚓︎
128+
permalink: true
125129
- pymdownx.inlinehilite
126130
- pymdownx.superfences
127131
- admonition
@@ -139,7 +143,6 @@ extra_javascript:
139143
# Extra css
140144
extra_css:
141145
- stylesheets/extra.css
142-
- stylesheets/monokai.css
143146

144147
# Extra
145148
extra:

ppsci/solver/eval.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
from ppsci.utils import profiler
2525

2626

27-
def eval_func(solver, epoch_id, log_freq) -> float:
27+
def eval_func(solver, epoch_id: int, log_freq: int) -> float:
2828
"""Evaluation program
2929
3030
Args:
31-
solver (Solver): Main Solver.
31+
solver (solver.Solver): Main Solver.
3232
epoch_id (int): Epoch id.
3333
log_freq (int): Log evaluation information every `log_freq` steps.
3434

ppsci/solver/solver.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ def train(self):
392392
if self.vdl_writer is not None:
393393
self.vdl_writer.close()
394394

395-
def eval(self, epoch_id=0):
395+
def eval(self, epoch_id: int = 0):
396396
"""Evaluation"""
397397
train_state = self.model.training
398398
if train_state:
@@ -412,7 +412,7 @@ def eval(self, epoch_id=0):
412412
self.model.train()
413413
return result
414414

415-
def visualize(self, epoch_id=0):
415+
def visualize(self, epoch_id: int = 0):
416416
"""Visualization"""
417417
train_state = self.model.training
418418
if train_state:
@@ -461,7 +461,9 @@ def predict(
461461
# prepare batch input dict
462462
for key in input_dict:
463463
if not paddle.is_tensor(input_dict[key]):
464-
batch_input_dict[key] = paddle.to_tensor(input_dict[key][st:ed])
464+
batch_input_dict[key] = paddle.to_tensor(
465+
input_dict[key][st:ed], paddle.get_default_dtype()
466+
)
465467
else:
466468
batch_input_dict[key] = input_dict[key][st:ed]
467469
batch_input_dict[key].stop_gradient = False

0 commit comments

Comments
 (0)