Skip to content

Commit f4cdcd4

Browse files
Merge branch 'develop' into clean_code
2 parents 3ef8011 + 45f45ea commit f4cdcd4

File tree

11 files changed

+323
-80
lines changed

11 files changed

+323
-80
lines changed

Diff for: docs/zh/examples/darcy2d.md

+12
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,18 @@
1414
python darcy2d.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/darcy2d/darcy2d_pretrained.pdparams
1515
```
1616

17+
=== "模型导出命令"
18+
19+
``` sh
20+
python darcy2d.py mode=export
21+
```
22+
23+
=== "模型推理命令"
24+
25+
``` sh
26+
python darcy2d.py mode=infer
27+
```
28+
1729
| 预训练模型 | 指标 |
1830
|:--| :--|
1931
| [darcy2d_pretrained.pdparams](https://paddle-org.bj.bcebos.com/paddlescience/models/darcy2d/darcy2d_pretrained.pdparams) | loss(Residual): 0.36500<br>MSE.poisson(Residual): 0.00006 |

Diff for: docs/zh/examples/deeponet.md

+12
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,18 @@
2626
python deeponet.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/deeponet/deeponet_pretrained.pdparams
2727
```
2828

29+
=== "模型导出命令"
30+
31+
``` sh
32+
python deeponet.py mode=export
33+
```
34+
35+
=== "模型推理命令"
36+
37+
``` sh
38+
python deeponet.py mode=infer
39+
```
40+
2941
| 预训练模型 | 指标 |
3042
|:--| :--|
3143
| [deeponet_pretrained.pdparams](https://paddle-org.bj.bcebos.com/paddlescience/models/deeponet/deeponet_pretrained.pdparams) | loss(G_eval): 0.00003<br>L2Rel.G(G_eval): 0.01799 |

Diff for: docs/zh/examples/hpinns.md

+19
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,25 @@
2626
python holography.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/hPINNs/hpinns_pretrained.pdparams
2727
```
2828

29+
=== "模型导出命令"
30+
31+
``` sh
32+
python holography.py mode=export
33+
```
34+
35+
=== "模型推理命令"
36+
37+
``` sh
38+
# linux
39+
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/hPINNs/hpinns_holo_train.mat -P ./datasets/
40+
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/hPINNs/hpinns_holo_valid.mat -P ./datasets/
41+
# windows
42+
# curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/hPINNs/hpinns_holo_train.mat --output ./datasets/hpinns_holo_train.mat
43+
# curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/hPINNs/hpinns_holo_valid.mat --output ./datasets/hpinns_holo_valid.mat
44+
python holography.py mode=infer
45+
```
46+
47+
2948
| 预训练模型 | 指标 |
3049
|:--| :--|
3150
| [hpinns_pretrained.pdparams](https://paddle-org.bj.bcebos.com/paddlescience/models/hPINNs/hpinns_pretrained.pdparams) | loss(opt_sup): 0.05352<br>MSE.eval_metric(opt_sup): 0.00002<br>loss(val_sup): 0.02205<br>MSE.eval_metric(val_sup): 0.00001 |

Diff for: examples/darcy/conf/darcy2d.yaml

+18
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ hydra:
3535
mode: train # running mode: train/eval
3636
seed: 42
3737
output_dir: ${hydra:run.dir}
38+
log_freq: 20
3839

3940
# set working condition
4041
NPOINT_PDE: 9801 # 99 ** 2
@@ -74,3 +75,20 @@ EVAL:
7475
batch_size:
7576
residual_validator: 8192
7677
pretrained_model_path: null
78+
79+
INFER:
80+
pretrained_model_path: https://paddle-org.bj.bcebos.com/paddlescience/models/darcy2d/darcy2d_pretrained.pdparams
81+
export_path: ./inference/darcy2d
82+
pdmodel_path: ${INFER.export_path}.pdmodel
83+
pdiparams_path: ${INFER.export_path}.pdiparams
84+
onnx_path: ${INFER.export_path}.onnx
85+
device: gpu
86+
engine: native
87+
precision: fp32
88+
ir_optim: true
89+
min_subgraph_size: 5
90+
gpu_mem: 2000
91+
gpu_id: 0
92+
max_batch_size: 8192
93+
num_cpu_threads: 10
94+
batch_size: 8192

Diff for: examples/darcy/darcy2d.py

+53-1
Original file line numberDiff line numberDiff line change
@@ -275,14 +275,66 @@ def poisson_ref_compute_func(_in):
275275
solver.visualize()
276276

277277

278+
def export(cfg: DictConfig):
279+
# set model
280+
model = ppsci.arch.MLP(**cfg.MODEL)
281+
282+
# initialize solver
283+
solver = ppsci.solver.Solver(
284+
model,
285+
pretrained_model_path=cfg.INFER.pretrained_model_path,
286+
)
287+
# export model
288+
from paddle.static import InputSpec
289+
290+
input_spec = [
291+
{key: InputSpec([None, 1], "float32", name=key) for key in model.input_keys},
292+
]
293+
294+
solver.export(input_spec, cfg.INFER.export_path)
295+
296+
297+
def inference(cfg: DictConfig):
298+
from deploy.python_infer import pinn_predictor
299+
300+
predictor = pinn_predictor.PINNPredictor(cfg)
301+
302+
# set geometry
303+
geom = {"rect": ppsci.geometry.Rectangle((0.0, 0.0), (1.0, 1.0))}
304+
# manually collate input data for visualization,
305+
input_dict = geom["rect"].sample_interior(
306+
cfg.NPOINT_PDE + cfg.NPOINT_BC, evenly=True
307+
)
308+
output_dict = predictor.predict(
309+
{key: input_dict[key] for key in cfg.MODEL.input_keys}, cfg.INFER.batch_size
310+
)
311+
# mapping data to cfg.INFER.output_keys
312+
output_dict = {
313+
store_key: output_dict[infer_key]
314+
for store_key, infer_key in zip(cfg.MODEL.output_keys, output_dict.keys())
315+
}
316+
ppsci.visualize.save_vtu_from_dict(
317+
"./visual/darcy2d.vtu",
318+
{**input_dict, **output_dict},
319+
input_dict.keys(),
320+
cfg.MODEL.output_keys,
321+
)
322+
323+
278324
@hydra.main(version_base=None, config_path="./conf", config_name="darcy2d.yaml")
279325
def main(cfg: DictConfig):
280326
if cfg.mode == "train":
281327
train(cfg)
282328
elif cfg.mode == "eval":
283329
evaluate(cfg)
330+
elif cfg.mode == "export":
331+
export(cfg)
332+
elif cfg.mode == "infer":
333+
inference(cfg)
284334
else:
285-
raise ValueError(f"cfg.mode should in ['train', 'eval'], but got '{cfg.mode}'")
335+
raise ValueError(
336+
f"cfg.mode should in ['train', 'eval', 'export', 'infer'], but got '{cfg.mode}'"
337+
)
286338

287339

288340
if __name__ == "__main__":

Diff for: examples/hpinns/conf/hpinns.yaml

+20
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ seed: 42
3737
output_dir: ${hydra:run.dir}
3838
DATASET_PATH: ./datasets/hpinns_holo_train.mat
3939
DATASET_PATH_VALID: ./datasets/hpinns_holo_valid.mat
40+
log_freq: 20
4041

4142
# set working condition
4243
TRAIN_MODE: aug_lag # "soft", "penalty", "aug_lag"
@@ -77,3 +78,22 @@ TRAIN:
7778
# evaluation settings
7879
EVAL:
7980
pretrained_model_path: null
81+
82+
# inference settings
83+
INFER:
84+
pretrained_model_path: "https://paddle-org.bj.bcebos.com/paddlescience/models/hPINNs/hpinns_pretrained.pdparams"
85+
export_path: ./inference/hpinns
86+
pdmodel_path: ${INFER.export_path}.pdmodel
87+
pdiparams_path: ${INFER.export_path}.pdiparams
88+
output_keys: ["e_re", "e_im", "eps"]
89+
device: gpu
90+
engine: native
91+
precision: fp32
92+
onnx_path: ${INFER.export_path}.onnx
93+
ir_optim: true
94+
min_subgraph_size: 10
95+
gpu_mem: 8000
96+
gpu_id: 0
97+
batch_size: 128
98+
max_batch_size: 128
99+
num_cpu_threads: 4

Diff for: examples/hpinns/holography.py

+73-1
Original file line numberDiff line numberDiff line change
@@ -383,14 +383,86 @@ def evaluate(cfg: DictConfig):
383383
solver.eval()
384384

385385

386+
def export(cfg: DictConfig):
387+
# set model
388+
model_re = ppsci.arch.MLP(**cfg.MODEL.re_net)
389+
model_im = ppsci.arch.MLP(**cfg.MODEL.im_net)
390+
model_eps = ppsci.arch.MLP(**cfg.MODEL.eps_net)
391+
392+
# register transform
393+
model_re.register_input_transform(func_module.transform_in)
394+
model_im.register_input_transform(func_module.transform_in)
395+
model_eps.register_input_transform(func_module.transform_in)
396+
397+
model_re.register_output_transform(func_module.transform_out_real_part)
398+
model_im.register_output_transform(func_module.transform_out_imaginary_part)
399+
model_eps.register_output_transform(func_module.transform_out_epsilon)
400+
401+
# wrap to a model_list
402+
model_list = ppsci.arch.ModelList((model_re, model_im, model_eps))
403+
404+
# initialize solver
405+
solver = ppsci.solver.Solver(
406+
model_list,
407+
pretrained_model_path=cfg.INFER.pretrained_model_path,
408+
)
409+
410+
# export model
411+
from paddle.static import InputSpec
412+
413+
input_spec = [
414+
{key: InputSpec([None, 1], "float32", name=key) for key in ["x", "y"]},
415+
]
416+
solver.export(input_spec, cfg.INFER.export_path)
417+
418+
419+
def inference(cfg: DictConfig):
420+
from deploy.python_infer import pinn_predictor
421+
422+
predictor = pinn_predictor.PINNPredictor(cfg)
423+
424+
valid_dict = ppsci.utils.reader.load_mat_file(
425+
cfg.DATASET_PATH_VALID, ("x_val", "y_val", "bound")
426+
)
427+
input_dict = {"x": valid_dict["x_val"], "y": valid_dict["y_val"]}
428+
429+
output_dict = predictor.predict(input_dict, cfg.INFER.batch_size)
430+
431+
# mapping data to cfg.INFER.output_keys
432+
output_dict = {
433+
store_key: output_dict[infer_key]
434+
for store_key, infer_key in zip(cfg.INFER.output_keys, output_dict.keys())
435+
}
436+
437+
# plotting E and eps
438+
N = ((func_module.l_BOX[1] - func_module.l_BOX[0]) / 0.05).astype(int)
439+
input_eval = np.stack((input_dict["x"], input_dict["y"]), axis=-1).reshape(
440+
N[0], N[1], 2
441+
)
442+
e_re = output_dict["e_re"].reshape(N[0], N[1])
443+
e_im = output_dict["e_im"].reshape(N[0], N[1])
444+
eps = output_dict["eps"].reshape(N[0], N[1])
445+
v_visual = e_re**2 + e_im**2
446+
field_visual = np.stack((v_visual, eps), axis=-1)
447+
plot_module.field_name = ["Fig7_E", "Fig7_eps"]
448+
plot_module.FIGNAME = "hpinns_pred"
449+
plot_module.plot_field_holo(input_eval, field_visual)
450+
451+
386452
@hydra.main(version_base=None, config_path="./conf", config_name="hpinns.yaml")
387453
def main(cfg: DictConfig):
388454
if cfg.mode == "train":
389455
train(cfg)
390456
elif cfg.mode == "eval":
391457
evaluate(cfg)
458+
elif cfg.mode == "export":
459+
export(cfg)
460+
elif cfg.mode == "infer":
461+
inference(cfg)
392462
else:
393-
raise ValueError(f"cfg.mode should in ['train', 'eval'], but got '{cfg.mode}'")
463+
raise ValueError(
464+
f"cfg.mode should in ['train', 'eval', 'export', 'infer'], but got '{cfg.mode}'"
465+
)
394466

395467

396468
if __name__ == "__main__":

Diff for: examples/hpinns/plotting.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from typing import Callable
2121
from typing import Dict
2222
from typing import List
23+
from typing import Optional
2324

2425
import functions as func_module
2526
import matplotlib.pyplot as plt
@@ -114,16 +115,16 @@ def prepare_data(solver: ppsci.solver.Solver, expr_dict: Dict[str, Callable]):
114115
def plot_field_holo(
115116
coord_visual: np.ndarray,
116117
field_visual: np.ndarray,
117-
coord_lambda: np.ndarray,
118-
field_lambda: np.ndarray,
118+
coord_lambda: Optional[np.ndarray] = None,
119+
field_lambda: Optional[np.ndarray] = None,
119120
):
120121
"""Plot fields of of holography example.
121122
122123
Args:
123124
coord_visual (np.ndarray): The coord of epsilon and |E|**2.
124125
field_visual (np.ndarray): The filed of epsilon and |E|**2.
125-
coord_lambda (np.ndarray): The coord of lambda.
126-
field_lambda (np.ndarray): The filed of lambda.
126+
coord_lambda (Optional[np.ndarray], optional): The coord of lambda. Defaults to None.
127+
field_lambda (Optional[np.ndarray], optional): The filed of lambda. Defaults to None.
127128
"""
128129
fmin, fmax = np.array([0, 1.0]), np.array([0.6, 12])
129130
cmin, cmax = coord_visual.min(axis=(0, 1)), coord_visual.max(axis=(0, 1))
@@ -168,7 +169,7 @@ def plot_field_holo(
168169
cb = plt.colorbar()
169170
plt.axis((emin[0], emax[0], emin[1], emax[1]))
170171
plt.clim(vmin=fmin[fi], vmax=fmax[fi])
171-
else:
172+
elif coord_lambda is not None and field_lambda is not None:
172173
# Fig_6C_lambda_
173174
plt.figure(fi * 100 + 101, figsize=(8, 6))
174175
plt.clf()

Diff for: examples/operator_learning/conf/deeponet.yaml

+18
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,21 @@ TRAIN:
7272
EVAL:
7373
pretrained_model_path: null
7474
eval_with_no_grad: true
75+
76+
# inference settings
77+
INFER:
78+
pretrained_model_path: "https://paddle-org.bj.bcebos.com/paddlescience/models/deeponet/deeponet_pretrained.pdparams"
79+
export_path: ./inference/deeponet
80+
pdmodel_path: ${INFER.export_path}.pdmodel
81+
pdiparams_path: ${INFER.export_path}.pdiparams
82+
device: gpu
83+
engine: native
84+
precision: fp32
85+
onnx_path: ${INFER.export_path}.onnx
86+
ir_optim: true
87+
min_subgraph_size: 10
88+
gpu_mem: 4000
89+
gpu_id: 0
90+
max_batch_size: 128
91+
num_cpu_threads: 4
92+
batch_size: 128

0 commit comments

Comments
 (0)