Skip to content

Commit 04d54dd

Browse files
[Doc] Refine user guide (#922)
* fix code and refine userguide * print log when reach the training max_steps * update docs
1 parent bf17f68 commit 04d54dd

File tree

6 files changed

+178
-86
lines changed

6 files changed

+178
-86
lines changed

docs/index.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -178,16 +178,18 @@
178178
<br><span class="text-large">全量支持</span></br>
179179
</div>
180180
</a>
181-
<a href="https://github.com/deepmodeling/deepmd-kit/tree/paddle2?tab=readme-ov-file#deepmd-kitpaddlepaddle-backend">
181+
<a href="https://github.com/deepmodeling/deepmd-kit/tree/paddle?tab=readme-ov-file#deepmd-kitpaddlepaddle-backend">
182182
<div class="card card-modulus">
183183
DeepMD
184184
<br><span class="text-large">适配中</span></br>
185185
</div>
186186
</a>
187-
<div class="card card-deepmd">
188-
Modulus
189-
<br><span class="text-large">适配中</span></br>
190-
</div>
187+
<a href="https://github.com/PaddlePaddle/modulus-sym/tree/paddle?tab=readme-ov-file#modulus-symbolic-betapaddle-backend">
188+
<div class="card card-deepmd">
189+
Modulus
190+
<br><span class="text-large">适配中</span></br>
191+
</div>
192+
</a>
191193
</div>
192194

193195
--8<--

docs/zh/install_setup.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ pybind11、pysdf、PyMesh 四个依赖库(上述**1.1 从 docker 镜像启动*
144144
PyMesh 库需要以 setup 的方式进行安装,命令如下:
145145

146146
``` sh
147-
wget https://paddle-org.bj.bcebos.com/paddlescience/PyMesh.tar.gz
147+
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/PyMesh.tar.gz
148148
tar -zxvf PyMesh.tar.gz
149149
150150
# 也可以使用 git 命令下载,速度可能会比较慢

docs/zh/user_guide.md

Lines changed: 155 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ PaddleScience/examples/bracket/outputs_bracket/
183183
184184
!!! warning
185185
186-
目前 PaddleScience 的模型导出功能处于实验阶段,正在开发和适配中,目前仅支持 [Aneurysm](./examples/aneurysm.md) 等案例的一键导出
186+
少数案例尚未支持导出功能,因此对应文档中未给出导出命令
187187
188188
在训练完毕后,我们通常需要将模型导出为 `*.pdmodel`, `*.pdiparams`, `*.pdiparams.info` 三个文件,以便后续推理部署使用。以 [Aneurysm](./examples/aneurysm.md) 案例为例,导出模型的通用命令如下。
189189
@@ -334,11 +334,11 @@ pip install paddle2onnx
334334
335335
!!! warning
336336
337-
目前 PaddleScience 的 Inference 推理(python) 功能处于实验阶段,正在开发和适配中,目前仅支持 [Aneurysm](./examples/aneurysm.md) 等案例的一键推理
337+
少数案例尚未支持导出、推理功能,因此对应文档中未给出导出、推理命令
338338
339339
首先需参考 [1.2 模型导出](#12) 章节,从 `*.pdparams` 文件导出 `*.pdmodel`, `*.pdiparams` 两个文件。
340340
341-
以 [Aneurysm](./examples/aneurysm.md) 案例为例,假设导出后的模型文件保存在 `./inference/aneurysm` 文件夹下,则推理代码示例如下。
341+
以 [Aneurysm](./examples/aneurysm.md) 案例为例,假设导出后的模型文件以 `./inference/aneurysm.*` 的形式保存,则推理代码示例如下。
342342
343343
``` sh
344344
# linux
@@ -482,18 +482,28 @@ PaddleScience 提供了多种推理配置组合,可通过命令行进行组合
482482
4. `latest.pdstates`,该文件保存了 latest 对应 epoch 的所有评估指标以及 epoch 数。
483483
5. `latest.pdscaler`(可选),在开启自动混合精度(AMP)功能时,该文件保存了 `GradScaler` 梯度缩放器内部的参数。
484484
485-
因此我们只需要在 `Solver` 时指定 `checkpoint_path` 参数为 `latest.*` 的所在路径,即可自动载入上述的几个文件,并从 `latest` 中记录的 epoch 开始继续训练。
485+
=== "方式1: 命令行指定[推荐]"
486486
487-
``` py hl_lines="7"
488-
import ppsci
487+
若在案例代码中,为 `Solver` 构建时传递了 `cfg` 参数,则可以通过命令行指定 `TRAIN.checkpoint_path` 为 `latest.*` 的所在路径(建议用`\'`包裹),再执行训练命令即可,免去修改案例代码。
489488
490-
...
489+
``` sh
490+
python example.py {++TRAIN.checkpoint_path=\'/path/to/latest\'++}
491+
```
491492
492-
solver = ppsci.solver.Solver(
493-
...,
494-
checkpoint_path="/path/to/latest"
495-
)
496-
```
493+
=== "方式2: 修改代码"
494+
495+
因此我们只需要在 `Solver` 时指定 `checkpoint_path` 参数为 `latest.*` 的所在路径,即可自动载入上述的几个文件,并从 `latest` 中记录的 epoch 开始继续训练。
496+
497+
``` py hl_lines="7"
498+
import ppsci
499+
500+
...
501+
502+
solver = ppsci.solver.Solver(
503+
...,
504+
checkpoint_path="/path/to/latest"
505+
)
506+
```
497507
498508
!!! Warning "路径填写注意事项"
499509
@@ -503,7 +513,15 @@ solver = ppsci.solver.Solver(
503513
504514
迁移学习是一种广泛使用、低成本提高模型精度的训练方式。在 PaddleScience 中,可以通过在 `model` 实例化完毕之后,手动为其载入预训练模型权重后开始微调训练;也可以调用 `Solver.finetune` 接口并指定 `pretrained_model_path` 参数,自动载入预训练模型权重并开始微调训练。
505515
506-
=== "手动载入预训练模型"
516+
=== "方式1: 命令行指定[推荐]"
517+
518+
若在案例代码中,为 `Solver` 构建时传递了 `cfg` 参数,则可以通过命令行指定 `TRAIN.pretrained_model_path` 为预训练权重的所在路径(建议用`\'`包裹),再执行训练命令即可,免去修改案例代码。
519+
520+
``` sh
521+
python example.py {++TRAIN.pretrained_model_path=\'/path/to/pretrain\'++}
522+
```
523+
524+
=== "方式2: 手动载入预训练模型"
507525
508526
``` py hl_lines="8 12"
509527
import ppsci
@@ -520,7 +538,7 @@ solver = ppsci.solver.Solver(
520538
solver.train()
521539
```
522540
523-
=== "调用 `Solver.finetune` 接口"
541+
=== "方式3: 调用 `Solver.finetune` 接口"
524542
525543
``` py hl_lines="11"
526544
import ppsci
@@ -542,22 +560,34 @@ solver = ppsci.solver.Solver(
542560
543561
### 1.6 模型评估
544562
545-
当模型训练完毕之后,如果想手动对某一个模型权重文件,评估其在数据集上的精度,则在 `Solver` 实例化时指定参数 `pretrained_model_path` 为该权重文件的路径,然后调用 `Solver.eval()` 即可
563+
当模型训练完毕之后,如果想手动对某一个模型权重文件,评估其在数据集上的精度,则可以选择下面的几种方式之一进行评估
546564
547-
``` py hl_lines="10"
548-
import ppsci
549-
import ppsci.utils
565+
=== "方式1: 命令行指定[推荐]"
550566
551-
...
552-
...
567+
若在案例代码中,为 `Solver` 构建时传递了 `cfg` 参数,则可以通过命令行指定 `EVAL.pretrained_model_path` 为待评估模型权重的所在路径(建议用`\'`包裹),并指定模式为`eval`后,执行评估命令即可,免去修改案例代码。
553568
554-
solver = ppsci.solver.Solver(
555-
...,
556-
...,
557-
pretrained_model_path="/path/to/model"
558-
)
559-
solver.eval()
560-
```
569+
``` sh
570+
python example.py {++mode=eval EVAL.pretrained_model_path=\'/path/to/pretrain\'++}
571+
```
572+
573+
=== "方式2: 修改代码"
574+
575+
在 `Solver` 实例化时指定参数 `pretrained_model_path` 为该权重文件的路径,然后调用 `Solver.eval()` 即可。
576+
577+
``` py hl_lines="10"
578+
import ppsci
579+
import ppsci.utils
580+
581+
...
582+
...
583+
584+
solver = ppsci.solver.Solver(
585+
...,
586+
...,
587+
pretrained_model_path="/path/to/model"
588+
)
589+
solver.eval()
590+
```
561591
562592
### 1.7 实验过程可视化
563593
@@ -573,14 +603,24 @@ solver.eval()
573603
pip install tensorboard tensorboardX
574604
```
575605
576-
2. 在案例代码的 `Solver` 实例化时指定 `use_tbd=True`,然后再启动案例训练
606+
2. 在案例中启用 tensorboardX
577607
578-
``` py hl_lines="3"
579-
solver = ppsci.solver.Solver(
580-
...,
581-
use_tbd=True,
582-
)
583-
```
608+
=== "方式1: 命令行指定[推荐]"
609+
610+
若在案例代码中,为 `Solver` 构建时传递了 `cfg` 参数,则可以通过命令行指定 `use_tbd` 再执行训练命令即可,免去修改案例代码。
611+
612+
``` sh
613+
python example.py {++use_tbd=True++}
614+
```
615+
616+
=== "方式2: 修改代码"
617+
618+
``` py hl_lines="3"
619+
solver = ppsci.solver.Solver(
620+
...,
621+
use_tbd=True,
622+
)
623+
```
584624
585625
3. 可视化记录数据
586626
@@ -611,14 +651,24 @@ solver.eval()
611651
pip install -U visualdl
612652
```
613653
614-
2. 在案例代码的 `Solver` 实例化时指定 `use_vdl=True`,然后再启动案例训练
654+
2. 在案例中启用 visualDL
615655
616-
``` py hl_lines="3"
617-
solver = ppsci.solver.Solver(
618-
...,
619-
use_vdl=True,
620-
)
621-
```
656+
=== "方式1: 命令行指定[推荐]"
657+
658+
若在案例代码中,为 `Solver` 构建时传递了 `cfg` 参数,则可以通过命令行指定 `use_vdl` 再执行训练命令即可,免去修改案例代码。
659+
660+
``` sh
661+
python example.py {++use_vdl=True++}
662+
```
663+
664+
=== "方式2: 修改代码"
665+
666+
``` py hl_lines="3"
667+
solver = ppsci.solver.Solver(
668+
...,
669+
use_vdl=True,
670+
)
671+
```
622672
623673
3. 可视化记录数据
624674
@@ -655,21 +705,31 @@ solver.eval()
655705
# 根据 login 提示,输入 API key 并回车确认
656706
```
657707
658-
3. 在案例中开启 wandb
708+
3. 在案例中启用 wandb
659709
660-
``` py hl_lines="3 4 5 6 7 8"
661-
solver = ppsci.solver.Solver(
662-
...,
663-
use_wandb=True,
664-
wandb_config={
665-
"project": "PaddleScience",
666-
"name": "Laplace2D",
667-
"dir": OUTPUT_DIR,
668-
},
669-
...
670-
)
671-
solver.train()
672-
```
710+
=== "方式1: 命令行指定[推荐]"
711+
712+
若在案例代码中,为 `Solver` 构建时传递了 `cfg` 参数,则可以通过命令行指定 `use_wandb` 再执行训练命令即可,免去修改案例代码。
713+
714+
``` sh
715+
python example.py {++use_wandb=True++}
716+
```
717+
718+
=== "方式2: 修改代码"
719+
720+
``` py hl_lines="3 4 5 6 7 8"
721+
solver = ppsci.solver.Solver(
722+
...,
723+
use_wandb=True,
724+
wandb_config={
725+
"project": "PaddleScience",
726+
"name": "Laplace2D",
727+
"dir": OUTPUT_DIR,
728+
},
729+
...
730+
)
731+
solver.train()
732+
```
673733
674734
如上述代码所示,指定 `use_wandb=True`,并且设置 `wandb_config` 配置字典中的 `project`、`name`、`dir` 三个字段,然后启动训练即可。训练过程会实时上传记录数据至 wandb 服务器,训练结束后可以进入终端打印的预览地址在网页端查看完整训练记录曲线。
675735
@@ -819,8 +879,6 @@ best_value: 0.02460772916674614
819879
"iters_per_epoch": ITERS_PER_EPOCH,
820880
"sampler": {
821881
"name": "BatchSampler",
822-
"shuffle": False,
823-
"drop_last": False,
824882
},
825883
},
826884
loss=ppsci.loss.MSELoss("mean"),
@@ -851,32 +909,54 @@ TODO -->
851909
852910
接下来介绍如何正确使用 PaddleScience 的自动混合精度功能。自动混合精度的原理可以参考:[Paddle-使用指南-性能调优-自动混合精度训练(AMP)](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/performance_improving/amp_cn.html#amp)。
853911
854-
实例化 `Solver` 时加上 2 个参数: `use_amp=True`, `amp_level="O1"`(或`amp_level="O2"`)。如代码中高亮行所示,通过指定 `use_amp=True`,开启自动混合精度功能,接着再设置 `amp_level="O1"`,指定混合精度所用的模式,`O1` 为自动混合精度,`O2` 为更激进的纯 fp16 训练模式,一般推荐使用 `O1`。
912+
若想在训练中启用自动混合精度,则可以选择下面的几种方式之一。`O1` 为自动混合精度,`O2` 为更激进的纯 fp16 训练模式,一般推荐使用 `O1`。
855913
856-
``` py hl_lines="5 6"
857-
# initialize solver
858-
solver = ppsci.solver.Solver(
859-
...,
860-
...,
861-
use_amp=True,
862-
amp_level="O1", # or amp_level="O2"
863-
)
864-
```
914+
=== "方式1: 命令行指定[推荐]"
915+
916+
若在案例代码中,为 `Solver` 构建时传递了 `cfg` 参数,则可以通过命令行指定 `use_amp`、`amp_level` 再执行训练/评估命令即可,免去修改案例代码。
917+
918+
``` sh
919+
python example.py {++use_amp=True amp_level=O1++}
920+
```
921+
922+
=== "方式2: 修改代码"
923+
924+
实例化 `Solver` 时加上 2 个参数: `use_amp=True`, `amp_level="O1"`(或`amp_level="O2"`)。如代码中高亮行所示,通过指定 `use_amp=True`,开启自动混合精度功能,接着再设置 `amp_level="O1"`,指定混合精度所用的模式。
925+
926+
``` py hl_lines="5 6"
927+
# initialize solver
928+
solver = ppsci.solver.Solver(
929+
...,
930+
...,
931+
use_amp=True,
932+
amp_level="O1", # or amp_level="O2"
933+
)
934+
```
865935
866936
### 2.4 梯度累加
867937
868938
接下来介绍如何正确使用 PaddleScience 的梯度累加功能。梯度累加的原理可以参考:[Paddle-使用指南-性能调优-自动混合精度训练(AMP)-动态图下使用梯度累加](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/performance_improving/amp_cn.html#dongtaituxiashiyongtiduleijia)。
869939
870940
实例化 `Solver` 时指定 `update_freq` 参数为大于 1 的正整数即可。如代码中高亮行所示,`update_freq` 可以设置为 2 或者更大的整数,推荐使用 248,此时对于训练任务来说,全局 `batch size` 等价于 `update_freq * batch size`。梯度累加方法在大多数场景中能够让间接地扩大每个 batch 内的样本数量,从而让每个 batch 分布更接近真实数据分布,提升训练任务的性能。
871941
872-
``` py hl_lines="5"
873-
# initialize solver
874-
solver = ppsci.solver.Solver(
875-
...,
876-
...,
877-
update_freq=2, # or 4, 8
878-
)
879-
```
942+
=== "方式1: 命令行指定[推荐]"
943+
944+
若在案例代码中,为 `Solver` 构建时传递了 `cfg` 参数,则可以通过命令行指定 `TRAIN.update_freq` 再执行训练命令即可,免去修改案例代码。
945+
946+
``` sh
947+
python example.py {++TRAIN.update_freq=2++}
948+
```
949+
950+
=== "方式2: 修改代码"
951+
952+
``` py hl_lines="5"
953+
# initialize solver
954+
solver = ppsci.solver.Solver(
955+
...,
956+
...,
957+
update_freq=2, # or 4, 8
958+
)
959+
```
880960
881961
### 2.5 多任务学习
882962

ppsci/solver/solver.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,8 @@ def convert_expr(
513513
def train(self) -> None:
514514
"""Training."""
515515
self.global_step = self.best_metric["epoch"] * self.iters_per_epoch
516+
self.max_steps = self.epochs * self.iters_per_epoch
517+
516518
start_epoch = self.best_metric["epoch"] + 1
517519

518520
if self.use_tbd and isinstance(self.cfg, DictConfig):

0 commit comments

Comments
 (0)