From ea3021bd6b754965555624684ae5746a1c021740 Mon Sep 17 00:00:00 2001
From: HydrogenSulfate <490868991@qq.com>
Date: Mon, 4 Mar 2024 14:29:06 +0000
Subject: [PATCH 1/4] correct pretrainde_model_path of Pipe
Flow(test=document_fix)
---
docs/zh/examples/labelfree_DNN_surrogate.md | 3 +--
examples/pipe/poiseuille_flow.py | 2 +-
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/docs/zh/examples/labelfree_DNN_surrogate.md b/docs/zh/examples/labelfree_DNN_surrogate.md
index 38612fcfa..bf72c0011 100644
--- a/docs/zh/examples/labelfree_DNN_surrogate.md
+++ b/docs/zh/examples/labelfree_DNN_surrogate.md
@@ -22,7 +22,7 @@
案例一:Pipe Flow
``` sh
- python poiseuille_flow.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/poiseuille_flow/poiseuille_flow_pretrained.pdparams
+ python poiseuille_flow.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/LabelFree-DNN-Surrogate/poiseuille_flow_pretrained.pdparams
```
案例二:Aneurysm Flow
@@ -34,7 +34,6 @@
python aneurysm_flow.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/LabelFree-DNN-Surrogate/aneurysm_flow.pdparams
```
-
| 预训练模型 | 指标 |
|:--| :--|
|[aneurysm_flow.pdparams](https://paddle-org.bj.bcebos.com/paddlescience/models/LabelFree-DNN-Surrogate/aneurysm_flow.pdparams)| L-2 error u : 2.548e-4
L-2 error v : 7.169e-5 |
diff --git a/examples/pipe/poiseuille_flow.py b/examples/pipe/poiseuille_flow.py
index fa19a827a..10962d245 100644
--- a/examples/pipe/poiseuille_flow.py
+++ b/examples/pipe/poiseuille_flow.py
@@ -30,7 +30,7 @@
from ppsci.utils import checker
if not checker.dynamic_import_to_globals("seaborn"):
- raise ModuleNotFoundError("Please install seaborn through pip first.")
+ raise ModuleNotFoundError("Please install seaborn with `pip install seaborn>=0.13.0`.") # fmt: skip
import seaborn as sns
From 8f1e37c3400989ef798ac9a429064fca9338d866 Mon Sep 17 00:00:00 2001
From: HydrogenSulfate <490868991@qq.com>
Date: Mon, 4 Mar 2024 17:53:21 +0000
Subject: [PATCH 2/4] refine inference document
---
deploy/python_infer/base.py | 2 +-
docs/zh/user_guide.md | 128 ++++++++++++++++++++++++------------
2 files changed, 86 insertions(+), 44 deletions(-)
diff --git a/deploy/python_infer/base.py b/deploy/python_infer/base.py
index 048eb2c0c..9e338d29f 100644
--- a/deploy/python_infer/base.py
+++ b/deploy/python_infer/base.py
@@ -93,7 +93,7 @@ def __init__(
f"device: {self.device}."
)
- def predict(self, image):
+ def predict(self, input_dict):
raise NotImplementedError
def _create_paddle_predictor(
diff --git a/docs/zh/user_guide.md b/docs/zh/user_guide.md
index 8f53a3fec..38e588ca9 100644
--- a/docs/zh/user_guide.md
+++ b/docs/zh/user_guide.md
@@ -194,9 +194,9 @@ python aneurysm.py mode=export \
!!! tip
- 由于支持模型导出的案例的 YAML 文件已经将 `INFER.pretrained_model_path` 的默认值设置为官方提供的预训练模型地址,因此导出官方提供的预训练模型时可以省略 `INFER.pretrained_model_path=...` 参数。
+ 由于支持模型导出的案例的 YAML 文件已经将 `INFER.pretrained_model_path` 的默认值设置为官方提供的预训练模型地址,因此导出官方提供的预训练模型时可以在命令行中省略 `INFER.pretrained_model_path=...` 参数。
-根据终端输出信息,导出的模型会被保存在执行命令目录的相对路径:`./inference/aneurysm` 文件夹下,如下所示。
+根据终端输出信息,导出的模型会被保存在执行导出命令所在目录的相对路径:`./inference/` 文件夹下,如下所示。
``` log
...
@@ -253,8 +253,9 @@ pip install paddle2onnx
``` py hl_lines="16"
--8<--
- examples/aneurysm/aneurysm.py:336:351
+ examples/aneurysm/aneurysm.py:336:350
--8<--
+ solver.export(input_spec, cfg.INFER.export_path, with_onnx=True)
```
然后执行模型导出命令。
@@ -329,13 +330,13 @@ pip install paddle2onnx
#### 1.3.2 Inference 推理(python)
-> Paddle Inference 是飞桨的原生推理库,相比 [1.3.1 动态图推理](#131) 具有更快的推理速度,适合不同平台不同应用场景的快速部署,详细信息可参考: [Paddle Inference 文档](https://paddle-inference.readthedocs.io/en/latest/index.html)。
+> Paddle Inference 是飞桨的原生推理库,相比 [1.3.1 动态图推理](#131) 具有更快的推理速度,适合不同平台不同应用场景的快速部署,详细信息可参考: [Paddle Inference 文档](https://www.paddlepaddle.org.cn/inference/api_reference/cxx_api_index.html)。
!!! warning
目前 PaddleScience 的 Inference 推理(python) 功能处于实验阶段,正在开发和适配中,目前仅支持 [Aneurysm](./examples/aneurysm.md) 等案例的一键推理。
-首先需参考 [1.2 模型导出](#12) 章节,将 `*.pdparams` 模型导出,得到 `*.pdmodel`, `*.pdiparams` 两个文件。
+首先需参考 [1.2 模型导出](#12) 章节,从 `*.pdparams` 文件导出 `*.pdmodel`, `*.pdiparams` 两个文件。
以 [Aneurysm](./examples/aneurysm.md) 案例为例,假设导出后的模型文件保存在 `./inference/aneurysm` 文件夹下,则推理代码示例如下。
@@ -359,61 +360,50 @@ ppsci INFO: Predicting batch 2894/2894
ppsci MESSAGE: Visualization result is saved to: ./aneurysm_pred.vtu
```
-???+ tip "使用不同的推理配置进行推理"
+#### 1.3.3 使用不同的推理配置
- PaddleScience 提供了多种推理配置组合,可通过命令行进行组合,目前支持的推理配置如下:
+PaddleScience 提供了多种推理配置组合,可通过命令行进行组合,目前支持的推理配置如下:
- | | Native | ONNX | TensorRT | MKLDNN |
- | :--- | :--- | :--- | :--- | :--- |
- | CPU | ✅ | ✅| - | CPU |
- | GPU | ✅ | ✅ | ✅ | - |
- | XPU | TODO | TODO | TODO | - |
+| | Native | ONNX | TensorRT | MKLDNN |
+| :--- | :--- | :--- | :--- | :--- |
+| CPU | ✅ | ✅| - | ✅ |
+| GPU | ✅ | ✅ | ✅ | - |
+| XPU | TODO | - | - | - |
- 推理命令示例如下:
+接下来以 aneurysm 案例和 Linux x86_64 + TensorRT 8.6 GA + CUDA 11.6 软硬件环境为例,介绍如何使用不同的推理配置。
+
+=== "使用 Paddle 原生推理"
+
+ Paddle 提供了原生推理功能,支持 CPU 和 GPU。
+
+ 运行以下命令进行推理:
``` sh
+ # CPU
+ python aneurysm.py mode=infer \
+ INFER.device=cpu \
+ INFER.engine=native
+
+ # GPU
python aneurysm.py mode=infer \
INFER.device=gpu \
- INFER.engine=native \
- INFER.precision=fp32 \
- ... \
- ... \
+ INFER.engine=native
```
- 完整的推理配置参数如下:
-
- | 字段 | 默认值 | 说明 |
- | :--- | :--- | :--- |
- | INFER.device | `cpu` | 推理设备,目前支持 `cpu` 和 `gpu` |
- | INFER.engine | `native` | 推理引擎,目前支持 `native`, `tensorrt`, `onnx` 和 `mkldnn` |
- | INFER.precision | `fp32` | 推理精度,目前支持 `fp32`, `fp16` |
- | INFER.ir_optim | `True` | 是否启用 IR 优化 |
- | INFER.min_subgraph_size | `30` | TensorRT 中最小子图 size,当子图的 size 大于该值时,才会尝试对该子图使用 TensorRT 计算 |
- | INFER.gpu_mem | `2000` | 初始显存大小 |
- | INFER.gpu_id | `0` | GPU 逻辑设备号 |
- | INFER.max_batch_size | `1024` | 推理时的最大 batch_size |
- | INFER.num_cpu_threads | `10` | MKLDNN 和 ONNX 在 CPU 推理时的线程数 |
- | INFER.batch_size | `256` | 推理时的 batch_size |
-
-???+ tip "使用 TensorRT 推理"
+=== "使用 TensorRT 推理"
TensorRT 是英伟达推出的高性能推理引擎,适用于 GPU 推理加速,PaddleScience 支持了 TensorRT 推理功能。
- 接下来以 aneurysm 案例和 Linux x86_64 + TensorRT 8.6 GA + CUDA 11.6 软硬件环境为例,介绍如何使用 TensorRT 推理:
-
- 1. 根据你的软硬件环境,下载并解压对应的 TensorRT 推理库压缩包(.tar 文件):,
- 推荐使用 TensorRT 8、7 等较新的版本。
+ 1. 根据你的软硬件环境,下载并解压对应的 TensorRT 推理库压缩包(.tar 文件):。
+ **推荐使用 TensorRT 8.x、7.x 等较新的版本**。
2. 在解压完毕的文件中,找到 `libnvinfer.so` 文件所在的目录,将其加入到 `LD_LIBRARY_PATH` 环境变量中。
``` sh
- pushd ./TensorRT-8.6.1.6
- TRT_PATH=$PWD
- popd
-
+ TRT_PATH=/PATH/TO/TensorRT-8.6.1.6
find $TRT_PATH -name libnvinfer.so
- # /PATH/TO/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/lib/libnvinfer.so <---- use this path
+ # /PATH/TO/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/lib/libnvinfer.so <---- use this path
export LD_LIBRARY_PATH=/PATH/TO/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/lib/:$LD_LIBRARY_PATH
```
@@ -423,10 +413,62 @@ ppsci MESSAGE: Visualization result is saved to: ./aneurysm_pred.vtu
python aneurysm.py mode=infer \
INFER.device=gpu \
INFER.engine=tensorrt \
- INFER.precision=fp32 \
INFER.min_subgraph_size=5
```
+=== "使用 ONNX 推理"
+
+ ONNX 是微软开源的深度学习推理框架,PaddleScience 支持了 ONNX 推理功能。
+
+ 首先按照 [1.2.2 ONNX 推理模型导出](#122-onnx) 章节将 `*.pdmodel` 和 `*.pdiparams` 转换为 `*.onnx` 文件,
+ 然后根据硬件环境,安装 CPU 或 GPU 版的 onnxruntime:
+
+ ``` sh
+ pip install onnxruntime # CPU
+ pip install onnxruntime-gpu # GPU
+ ```
+
+ 最后运行以下命令进行推理:
+
+ ``` sh
+ # CPU
+ python aneurysm.py mode=infer \
+ INFER.device=cpu \
+ INFER.engine=onnx
+
+ # GPU
+ python aneurysm.py mode=infer \
+ INFER.device=gpu \
+ INFER.engine=onnx
+ ```
+
+=== "使用 MKLDNN 推理"
+
+ MDLDNN 是英伟达推出的高性能推理引擎,适用于 CPU 推理加速,PaddleScience 支持了 MKLDNN 推理功能。
+
+ 运行以下命令进行推理:
+
+ ``` sh
+ python aneurysm.py mode=infer \
+ INFER.device=cpu \
+ INFER.engine=mkldnn
+ ```
+
+!!! info "完整推理配置参数"
+
+ | 参数 | 默认值 | 说明 |
+ | :--- | :--- | :--- |
+ | `INFER.device` | `cpu` | 推理设备,目前支持 `cpu` 和 `gpu` |
+ | `INFER.engine` | `native` | 推理引擎,目前支持 `native`, `tensorrt`, `onnx` 和 `mkldnn` |
+ | `INFER.precision` | `fp32` | 推理精度,目前支持 `fp32`, `fp16` |
+ | `INFER.ir_optim` | `True` | 是否启用 IR 优化 |
+ | `INFER.min_subgraph_size` | `30` | TensorRT 中最小子图 size,当子图的 size 大于该值时,才会尝试对该子图使用 TensorRT 计算 |
+ | `INFER.gpu_mem` | `2000` | 初始显存大小 |
+ | `INFER.gpu_id` | `0` | GPU 逻辑设备号 |
+ | `INFER.max_batch_size` | `1024` | 推理时的最大 batch_size |
+ | `INFER.num_cpu_threads` | `10` | MKLDNN 和 ONNX 在 CPU 推理时的线程数 |
+ | `INFER.batch_size` | `256` | 推理时的 batch_size |
+
### 1.4 断点继续训练
在模型的日常训练中,可能存在机器故障或者用户手动操作而中断训练的情况,针对这种情况 PaddleScience 提供了断点继续训练的功能,即在训练时默认会保存**最近一个训练完毕的 epoch** 对应的各种参数到以下 5 个文件中:
From 39a7de7e360138b746747433cd32601db510b682 Mon Sep 17 00:00:00 2001
From: HydrogenSulfate <490868991@qq.com>
Date: Tue, 5 Mar 2024 02:36:13 +0000
Subject: [PATCH 3/4] fix significant figures to 2 for tidy plot
---
deploy/python_infer/base.py | 2 +-
docs/zh/user_guide.md | 2 +-
examples/pipe/poiseuille_flow.py | 4 ++--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/deploy/python_infer/base.py b/deploy/python_infer/base.py
index 9e338d29f..c63df6e8f 100644
--- a/deploy/python_infer/base.py
+++ b/deploy/python_infer/base.py
@@ -133,7 +133,7 @@ def _create_paddle_predictor(
if not osp.exists(trt_shape_path):
config.collect_shape_range_info(trt_shape_path)
- logger.info(
+ logger.message(
f"Save collected dynamic shape info to: {trt_shape_path}"
)
try:
diff --git a/docs/zh/user_guide.md b/docs/zh/user_guide.md
index 38e588ca9..4593c2f2f 100644
--- a/docs/zh/user_guide.md
+++ b/docs/zh/user_guide.md
@@ -330,7 +330,7 @@ pip install paddle2onnx
#### 1.3.2 Inference 推理(python)
-> Paddle Inference 是飞桨的原生推理库,相比 [1.3.1 动态图推理](#131) 具有更快的推理速度,适合不同平台不同应用场景的快速部署,详细信息可参考: [Paddle Inference 文档](https://www.paddlepaddle.org.cn/inference/api_reference/cxx_api_index.html)。
+> Paddle Inference 是飞桨的原生推理库,相比 [1.3.1 动态图推理](#131) 具有更快的推理速度,适合不同平台不同应用场景的快速部署,详细信息可参考: [Paddle Inference 文档](https://paddle-inference.readthedocs.io/en/latest/index.html)。
!!! warning
diff --git a/examples/pipe/poiseuille_flow.py b/examples/pipe/poiseuille_flow.py
index 10962d245..f9481bb2a 100644
--- a/examples/pipe/poiseuille_flow.py
+++ b/examples/pipe/poiseuille_flow.py
@@ -275,7 +275,7 @@ def forward(self, output_dict, label_dict):
u_analytical[:, int(round(N_x / 2)), nu]
- u_pred[:, int(round(N_x / 2)), nu]
)
- metric_dict[f"nu = {data_1d_nu[nu]}"] = np.abs(err).sum()
+ metric_dict[f"nu = {data_1d_nu[nu]:.2g}"] = np.abs(err).sum()
return metric_dict
# Kullback-Leibler Divergence
@@ -376,7 +376,7 @@ def forward(self, output_dict, label_dict):
plt.text(
-0.012,
ytext[idxP],
- rf"$\nu = $ {data_1d_nu[nu_index[idxP]]}",
+ rf"$\nu = $ {data_1d_nu[nu_index[idxP]]:.2g}",
{"color": "k", "fontsize": fontsize - 4},
)
From ac9a0ef9064edfde8ea673b34b72575b13a0a9a5 Mon Sep 17 00:00:00 2001
From: HydrogenSulfate <490868991@qq.com>
Date: Tue, 5 Mar 2024 14:56:02 +0000
Subject: [PATCH 4/4] increase indention
---
docs/zh/user_guide.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/zh/user_guide.md b/docs/zh/user_guide.md
index 4593c2f2f..498c2ddaa 100644
--- a/docs/zh/user_guide.md
+++ b/docs/zh/user_guide.md
@@ -255,7 +255,7 @@ pip install paddle2onnx
--8<--
examples/aneurysm/aneurysm.py:336:350
--8<--
- solver.export(input_spec, cfg.INFER.export_path, with_onnx=True)
+ solver.export(input_spec, cfg.INFER.export_path, with_onnx=True)
```
然后执行模型导出命令。