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

refine user_guide #410

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions docs/zh/user_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@

### 1.1 断点继续训练

在模型的日常训练中,可能存在机器故障或者用户手动操作而中断训练的情况,针对这种情况 PaddleScience 提供了断点继续训练的功能,即在训练时默认会保存最近一个训练完毕的 epoch 对应的参数,包括以下几个文件
在模型的日常训练中,可能存在机器故障或者用户手动操作而中断训练的情况,针对这种情况 PaddleScience 提供了断点继续训练的功能,即在训练时默认会保存**最近一个训练完毕的 epoch** 对应的各种参数到以下 5 个文件中

1. `latest.pdparams`,该文件保存了模型内所有网络层的参数
2. `latest.pdopt`,该文件保存了优化器所含的所有参数(如 Adam 等一些带有动量记录功能的优化器)
1. `latest.pdparams`,该文件保存了神经网络模型的所有权重参数
2. `latest.pdopt`,该文件保存了优化器(如 Adam 等一些带有动量记录功能的优化器)的所有参数。
3. `latest.pdeqn`,该文件保存了所有方程的参数,在一些逆问题中如果方程本身含有待估计(可学习)的参数,那么该文件就会保存这些参数。
4. `latest.pdstates`,该文件保存了当前 epoch 的最优指标以及当前文件对应的 epoch 数。
4. `latest.pdstates`,该文件保存了 latest 对应 epoch 的所有评估指标以及 epoch 数。
5. `latest.pdscaler`(可选),在开启自动混合精度(AMP)功能时,该文件保存了 `GradScaler` 梯度缩放器内部的参数。

因此我们只需要在 `Solver` 时,手动指定 `pretrained_model_path` 参数,即可自动载入上述的几个文件, `latest` 中记录的 epoch 开始继续训练。
因此我们只需要在 `Solver` 时指定 `pretrained_model_path` 参数为 `latest。*` 的所在路径,即可自动载入上述的几个文件,并从 `latest` 中记录的 epoch 开始继续训练。

``` py hl_lines="9"
import ppsci
Expand All @@ -31,11 +31,11 @@ solver = ppsci.solver.Solver(

???+ Warning "路径填写注意事项"

此处只需将路径填写到 "latest" 为止即可,不需要加上其后缀,程序会自动根据 "/path/to/latest",自动补充所需后缀名来加载 `latest.pdparams`、`latest.pdopt` 等文件。
此处只需将路径填写到 "latest" 为止即可,不需要加上其后缀,程序会根据 "/path/to/latest",自动补充不同文件对应的后缀名来加载 `latest.pdparams`、`latest.pdopt` 等文件。

### 1.2 迁移学习

迁移学习是一种广泛使用、低成本提高模型精度的训练方式。在 PaddleScience 中,只需在 `model` 实例化完毕之后,手动为其载入预训练模型,即可进行迁移学习
迁移学习是一种广泛使用、低成本提高模型精度的训练方式。在 PaddleScience 中,只需在 `model` 实例化完毕之后,手动为其载入预训练模型权重,即可进行迁移学习

``` py hl_lines="9"
import ppsci
Expand All @@ -51,15 +51,15 @@ save_load.load_pretrain(model, "/path/to/pretrain")

???+ Warning "路径填写注意事项"

同样地,此处只需将路径填写到预训练文件的文件名为止即可,不需要加上其后缀,程序会自动根据 "/path/to/pretrain",自动补充所需后缀名来加载 `/path/to/pretrain.pdparams` 文件。
同样地,此处只需将路径填写到预训练文件的文件名为止即可,不需要加上其后缀,程序会根据 "/path/to/pretrain",自动补充 `.pdparams` 后缀名来加载 `/path/to/pretrain.pdparams` 文件。

???+ info "迁移学习注意事项"

在迁移学习时,相对于完全随机初始化的参数而言,载入的预训练模型参数是一个较好的初始化状态,不需要太大的学习率,因此可以将学习率适当调小 2~10 倍以获得更稳定的训练过程和更好的精度。
在迁移学习时,相对于完全随机初始化的参数而言,载入的预训练模型权重参数是一个较好的初始化状态,因此不需要使用太大的学习率,而可以将学习率适当调小 2~10 倍以获得更稳定的训练过程和更好的精度。

### 1.3 模型评估

当模型训练完毕之后,如果我们想手动评估某一个模型在数据集上的精度,则在 `Solver` 实例化时指定参数 `pretrained_model_path` 为模型路径,然后调用 `Solver.eval()` 即可。
当模型训练完毕之后,如果想手动对某一个模型权重文件,评估其在数据集上的精度,则在 `Solver` 实例化时指定参数 `pretrained_model_path` 为该权重文件的路径,然后调用 `Solver.eval()` 即可。

``` py hl_lines="10"
import ppsci
Expand All @@ -78,7 +78,7 @@ solver.eval()

???+ Warning "路径填写注意事项"

同样地,此处只需将路径填写到预训练文件的文件名为止即可,不需要加上其后缀,程序会自动根据 "/path/to/model",自动补充所需后缀名来加载 `/path/to/model.pdparams` 文件。
同样地,此处只需将路径填写到预训练权重的文件名为止即可,不需要加上其后缀,程序会根据 "/path/to/model",自动补充所需后缀名来加载 `/path/to/model.pdparams` 文件。

## 2. 进阶功能

Expand Down Expand Up @@ -112,18 +112,18 @@ solver.eval()
evenly=True,
name="EQ",
)
ITERS_PER_EPOCH = len(pde_constraint.data_loader)
ITERS_PER_EPOCH = len(pde_constraint.data_loader) # re-assign to ITERS_PER_EPOCH

# wrap constraints together
constraint = {pde_constraint.name: pde_constraint}

EPOCHS = 3000 if not args.epochs else args.epochs
```

2. 使用分布式训练命令启动训练,以四卡为例
2. 使用分布式训练命令启动训练,以 4 卡数据并行训练为例

``` sh
# 指定 0,1,2,3 张卡启动分布式训练
# 指定 0,1,2,3 张卡启动分布式数据并行训练
export CUDA_VISIBLE_DEVICES=0,1,2,3
python -m paddle.distributed.launch --gpus="0,1,2,3" poiseuille_flow.py
```
Expand All @@ -134,9 +134,9 @@ TODO -->

### 2.2 自动混合精度训练

接下来介绍如何正确使用 PaddleScience 的自动混合精度精度功能。自动混合精度训练细节可以参考:[Paddle-使用指南-性能调优-自动混合精度训练(AMP)](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/performance_improving/amp_cn.html)。
接下来介绍如何正确使用 PaddleScience 的自动混合精度功能。自动混合精度的原理可以参考:[Paddle-使用指南-性能调优-自动混合精度训练(AMP)](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/performance_improving/amp_cn.html#amp)。

实例化 `Solver` 时加上 2 个参数: `use_amp=True`, `amp_level="O1"`(或`amp_level="O2"`)。如代码中黄色高亮行所示,通过指定 `use_amp=True`,开启自动混合精度功能,其次通过设置 `amp_level="O1"`,指定混合精度所用的模式,`O1` 为自动混合精度,`O2` 为更激进的纯 fp16 训练模式,一般推荐使用 `O1`。
实例化 `Solver` 时加上 2 个参数: `use_amp=True`, `amp_level="O1"`(或`amp_level="O2"`)。如代码中黄色高亮行所示,通过指定 `use_amp=True`,开启自动混合精度功能,接着再设置 `amp_level="O1"`,指定混合精度所用的模式,`O1` 为自动混合精度,`O2` 为更激进的纯 fp16 训练模式,一般推荐使用 `O1`。

``` py linenums="1" hl_lines="5 6"
# initialize solver
Expand All @@ -150,9 +150,9 @@ solver = ppsci.solver.Solver(

### 2.3 梯度累加

接下来介绍如何正确使用 PaddleScience 的梯度累加功能。自动混合精度训练细节可以参考:[Paddle-使用指南-性能调优-自动混合精度训练(AMP)-动态图下使用梯度累加](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/performance_improving/amp_cn.html#dongtaituxiashiyongtiduleijia)。
接下来介绍如何正确使用 PaddleScience 的梯度累加功能。梯度累加的原理可以参考:[Paddle-使用指南-性能调优-自动混合精度训练(AMP)-动态图下使用梯度累加](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/performance_improving/amp_cn.html#dongtaituxiashiyongtiduleijia)。

实例化 `Solver` 时加上 1 个参数: `update_freq=N_ACCUMULATE`。如代码中黄色高亮行所示,`N_ACCUMULATE` 可以是 2 或者更大的倍数,推荐使用 2、4、8,此时全局 `batch size` 等于 `update_freq * batch size`。梯度累加对于部分训练任务有一定的性能提升
实例化 `Solver` 时指定 `update_freq` 参数为大于 1 的正整数即可。如代码中黄色高亮行所示,`update_freq` 可以设置为 2 或者更大的整数,推荐使用 2、4、8,此时对于训练任务来说,全局 `batch size` 等价于 `update_freq * batch size`。梯度累加方法在大多数场景中能够让间接地扩大每个 batch 内的样本数量,从而让每个 batch 分布更接近真实数据分布,提升训练任务的性能

``` py linenums="1" hl_lines="5"
# initialize solver
Expand Down