Skip to content

Commit

Permalink
refine user_guide (#410)
Browse files Browse the repository at this point in the history
  • Loading branch information
HydrogenSulfate authored Jun 29, 2023
1 parent 68d3e73 commit 559f307
Showing 1 changed file with 18 additions and 18 deletions.
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 或者更大的整数,推荐使用 248此时对于训练任务来说,全局 `batch size` 等价于 `update_freq * batch size`梯度累加方法在大多数场景中能够让间接地扩大每个 batch 内的样本数量,从而让每个 batch 分布更接近真实数据分布,提升训练任务的性能

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

0 comments on commit 559f307

Please sign in to comment.