@@ -183,7 +183,7 @@ PaddleScience/examples/bracket/outputs_bracket/
183
183
184
184
!!! warning
185
185
186
- 目前 PaddleScience 的模型导出功能处于实验阶段,正在开发和适配中,目前仅支持 [Aneurysm](./examples/aneurysm.md) 等案例的一键导出 。
186
+ 少数案例尚未支持导出功能,因此对应文档中未给出导出命令 。
187
187
188
188
在训练完毕后,我们通常需要将模型导出为 ` * .pdmodel` , ` * .pdiparams` , ` * .pdiparams.info` 三个文件,以便后续推理部署使用。以 [Aneurysm](./examples/aneurysm.md) 案例为例,导出模型的通用命令如下。
189
189
@@ -334,11 +334,11 @@ pip install paddle2onnx
334
334
335
335
!!! warning
336
336
337
- 目前 PaddleScience 的 Inference 推理(python) 功能处于实验阶段,正在开发和适配中,目前仅支持 [Aneurysm](./examples/aneurysm.md) 等案例的一键推理 。
337
+ 少数案例尚未支持导出、推理功能,因此对应文档中未给出导出、推理命令 。
338
338
339
339
首先需参考 [1 .2 模型导出](#12 ) 章节,从 `*.pdparams` 文件导出 `*.pdmodel`, `*.pdiparams` 两个文件。
340
340
341
- 以 [Aneurysm](./examples/aneurysm.md) 案例为例,假设导出后的模型文件保存在 `./inference/aneurysm` 文件夹下 ,则推理代码示例如下。
341
+ 以 [Aneurysm](./examples/aneurysm.md) 案例为例,假设导出后的模型文件以 `./inference/aneurysm.*` 的形式保存 ,则推理代码示例如下。
342
342
343
343
``` sh
344
344
# linux
@@ -482,18 +482,28 @@ PaddleScience 提供了多种推理配置组合,可通过命令行进行组合
482
482
4 . `latest.pdstates`,该文件保存了 latest 对应 epoch 的所有评估指标以及 epoch 数。
483
483
5 . `latest.pdscaler`(可选),在开启自动混合精度(AMP)功能时,该文件保存了 `GradScaler` 梯度缩放器内部的参数。
484
484
485
- 因此我们只需要在 `Solver` 时指定 `checkpoint_path` 参数为 `latest.*` 的所在路径,即可自动载入上述的几个文件,并从 `latest` 中记录的 epoch 开始继续训练。
485
+ === "方式 1 : 命令行指定[推荐]"
486
486
487
- ``` py hl_lines="7 "
488
- import ppsci
487
+ 若在案例代码中,为 `Solver` 构建时传递了 `cfg` 参数,则可以通过命令行指定 `TRAIN.checkpoint_path` 为 `latest.*` 的所在路径(建议用`\'`包裹),再执行训练命令即可,免去修改案例代码。
489
488
490
- ...
489
+ ``` sh
490
+ python example.py {++TRAIN.checkpoint_path=\'/path/to/latest\'++}
491
+ ```
491
492
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
+ ```
497
507
498
508
!!! Warning "路径填写注意事项"
499
509
@@ -503,7 +513,15 @@ solver = ppsci.solver.Solver(
503
513
504
514
迁移学习是一种广泛使用、低成本提高模型精度的训练方式。在 PaddleScience 中,可以通过在 `model` 实例化完毕之后,手动为其载入预训练模型权重后开始微调训练;也可以调用 `Solver.finetune` 接口并指定 `pretrained_model_path` 参数,自动载入预训练模型权重并开始微调训练。
505
515
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 : 手动载入预训练模型"
507
525
508
526
``` py hl_lines="8 12 "
509
527
import ppsci
@@ -520,7 +538,7 @@ solver = ppsci.solver.Solver(
520
538
solver.train()
521
539
```
522
540
523
- === "调用 `Solver.finetune` 接口"
541
+ === "方式 3 : 调用 `Solver.finetune` 接口"
524
542
525
543
``` py hl_lines="11 "
526
544
import ppsci
@@ -542,22 +560,34 @@ solver = ppsci.solver.Solver(
542
560
543
561
### 1 .6 模型评估
544
562
545
- 当模型训练完毕之后,如果想手动对某一个模型权重文件,评估其在数据集上的精度,则在 `Solver` 实例化时指定参数 `pretrained_model_path` 为该权重文件的路径,然后调用 `Solver.eval()` 即可 。
563
+ 当模型训练完毕之后,如果想手动对某一个模型权重文件,评估其在数据集上的精度,则可以选择下面的几种方式之一进行评估 。
546
564
547
- ``` py hl_lines="10 "
548
- import ppsci
549
- import ppsci.utils
565
+ === "方式1 : 命令行指定[推荐]"
550
566
551
- ...
552
- ...
567
+ 若在案例代码中,为 `Solver` 构建时传递了 `cfg` 参数,则可以通过命令行指定 `EVAL.pretrained_model_path` 为待评估模型权重的所在路径(建议用`\'`包裹),并指定模式为`eval`后,执行评估命令即可,免去修改案例代码。
553
568
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
+ ```
561
591
562
592
### 1 .7 实验过程可视化
563
593
@@ -573,14 +603,24 @@ solver.eval()
573
603
pip install tensorboard tensorboardX
574
604
```
575
605
576
- 2 . 在案例代码的 `Solver` 实例化时指定 `use_tbd=True`,然后再启动案例训练
606
+ 2 . 在案例中启用 tensorboardX
577
607
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
+ ```
584
624
585
625
3 . 可视化记录数据
586
626
@@ -611,14 +651,24 @@ solver.eval()
611
651
pip install -U visualdl
612
652
```
613
653
614
- 2 . 在案例代码的 `Solver` 实例化时指定 `use_vdl=True`,然后再启动案例训练
654
+ 2 . 在案例中启用 visualDL
615
655
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
+ ```
622
672
623
673
3 . 可视化记录数据
624
674
@@ -655,21 +705,31 @@ solver.eval()
655
705
# 根据 login 提示,输入 API key 并回车确认
656
706
```
657
707
658
- 3 . 在案例中开启 wandb
708
+ 3 . 在案例中启用 wandb
659
709
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": "Laplace2 D",
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": "Laplace2 D",
727
+ "dir": OUTPUT_DIR,
728
+ },
729
+ ...
730
+ )
731
+ solver.train()
732
+ ```
673
733
674
734
如上述代码所示,指定 `use_wandb=True`,并且设置 `wandb_config` 配置字典中的 `project`、`name`、`dir` 三个字段,然后启动训练即可。训练过程会实时上传记录数据至 wandb 服务器,训练结束后可以进入终端打印的预览地址在网页端查看完整训练记录曲线。
675
735
@@ -819,8 +879,6 @@ best_value: 0.02460772916674614
819
879
"iters_per_epoch": ITERS_PER_EPOCH,
820
880
"sampler": {
821
881
"name": "BatchSampler",
822
- "shuffle": False,
823
- "drop_last": False,
824
882
},
825
883
},
826
884
loss=ppsci.loss.MSELoss("mean"),
@@ -851,32 +909,54 @@ TODO -->
851
909
852
910
接下来介绍如何正确使用 PaddleScience 的自动混合精度功能。自动混合精度的原理可以参考:[Paddle-使用指南-性能调优-自动混合精度训练(AMP)](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/performance_improving/amp_cn.html#amp)。
853
911
854
- 实例化 `Solver` 时加上 2 个参数: `use_amp=True`, `amp_level="O 1 "`(或`amp_level="O 2 "`)。如代码中高亮行所示,通过指定 `use_amp=True`,开启自动混合精度功能,接着再设置 `amp_level="O 1 "`,指定混合精度所用的模式, `O1 ` 为自动混合精度,`O2 ` 为更激进的纯 fp16 训练模式,一般推荐使用 `O1 `。
912
+ 若想在训练中启用自动混合精度,则可以选择下面的几种方式之一。 `O1 ` 为自动混合精度,`O2 ` 为更激进的纯 fp16 训练模式,一般推荐使用 `O1 `。
855
913
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
+ ```
865
935
866
936
### 2 .4 梯度累加
867
937
868
938
接下来介绍如何正确使用 PaddleScience 的梯度累加功能。梯度累加的原理可以参考:[Paddle-使用指南-性能调优-自动混合精度训练(AMP)-动态图下使用梯度累加](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/performance_improving/amp_cn.html#dongtaituxiashiyongtiduleijia)。
869
939
870
940
实例化 `Solver` 时指定 `update_freq` 参数为大于 1 的正整数即可。如代码中高亮行所示,`update_freq` 可以设置为 2 或者更大的整数,推荐使用 2 、4 、8 ,此时对于训练任务来说,全局 `batch size` 等价于 `update_freq * batch size`。梯度累加方法在大多数场景中能够让间接地扩大每个 batch 内的样本数量,从而让每个 batch 分布更接近真实数据分布,提升训练任务的性能。
871
941
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
+ ```
880
960
881
961
### 2 .5 多任务学习
882
962
0 commit comments