Skip to content

Commit 1af86e1

Browse files
【PPSCI Export&Infer No.11-12】 (#883)
* fix doc bugs * fix codestyle bugs * 【PPSCI Export&Infer No.15-16】 * fix codestyle bug for PPSCI Export&Infer No.15-16】 * fix codestyle bugs for 【PPSCI Export&Infer No.15-16】 * fix codestyle bugs for 【PPSCI Export&Infer No.15-16】 * fix codestyle bugs for 【PPSCI Export&Infer No.15-16】 * fix bugs for 【PPSCI Export&Infer No.15-16】 * fix codestyle bugs * 【PPSCI Export&Infer No.11-12】 * change predictor * fix bugs in change predictor * cancel extra doc commit * fix codestyle bugs * Update examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py * Update examples/cylinder/2d_unsteady/transformer_physx/train_transformer.py * Update examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py * Update examples/cylinder/2d_unsteady/transformer_physx/train_transformer.py * Update examples/cylinder/2d_unsteady/transformer_physx/train_transformer.py * cancel extra changes * cancel extra changes * update examples/cylinder/2d_unsteady/transformer_physx/conf/transformer.yaml --------- Co-authored-by: HydrogenSulfate <[email protected]>
1 parent e4b7522 commit 1af86e1

File tree

7 files changed

+215
-4
lines changed

7 files changed

+215
-4
lines changed

docs/zh/examples/cylinder2d_unsteady.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,24 @@
2626
python cylinder2d_unsteady_Re100.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/cylinder2d_unsteady_Re100/cylinder2d_unsteady_Re100_pretrained.pdparams
2727
```
2828

29+
=== "模型导出命令"
30+
31+
``` sh
32+
python cylinder2d_unsteady_Re100.py mode=export
33+
```
34+
35+
=== "模型推理命令"
36+
37+
``` sh
38+
# linux
39+
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/cylinder2d_unsteady_Re100/cylinder2d_unsteady_Re100_dataset.tar
40+
# windows
41+
# curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/cylinder2d_unsteady_Re100/cylinder2d_unsteady_Re100_dataset.tar --output cylinder2d_unsteady_Re100_dataset.tar
42+
# unzip it
43+
tar -xvf cylinder2d_unsteady_Re100_dataset.tar
44+
python cylinder2d_unsteady_Re100.py mode=infer
45+
```
46+
2947
| 预训练模型 | 指标 |
3048
|:--| :--|
3149
| [cylinder2d_unsteady_Re100_pretrained.pdparams](https://paddle-org.bj.bcebos.com/paddlescience/models/cylinder2d_unsteady_Re100/cylinder2d_unsteady_Re100_pretrained.pdparams) | loss(Residual): 0.00398<br>MSE.continuity(Residual): 0.00126<br>MSE.momentum_x(Residual): 0.00151<br>MSE.momentum_y(Residual): 0.00120 |

docs/zh/examples/cylinder2d_unsteady_transformer_physx.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,23 @@
2727
python train_enn.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/cylinder/cylinder_pretrained.pdparams
2828
python train_transformer.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/cylinder/cylinder_transformer_pretrained.pdparams EMBEDDING_MODEL_PATH=https://paddle-org.bj.bcebos.com/paddlescience/models/cylinder/cylinder_pretrained.pdparams
2929
```
30+
=== "模型导出命令"
31+
32+
``` sh
33+
python train_transformer.py mode=export EMBEDDING_MODEL_PATH=https://paddle-org.bj.bcebos.com/paddlescience/models/cylinder/cylinder_pretrained.pdparams
34+
```
35+
36+
=== "模型推理命令"
37+
38+
``` sh
39+
# linux
40+
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/transformer_physx/cylinder_training.hdf5 -P ./datasets/
41+
wget -nc https://paddle-org.bj.bcebos.com/paddlescience/datasets/transformer_physx/cylinder_valid.hdf5 -P ./datasets/
42+
# windows
43+
# curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/transformer_physx/cylinder_training.hdf5 --output ./datasets/cylinder_training.hdf5
44+
# curl https://paddle-org.bj.bcebos.com/paddlescience/datasets/transformer_physx/cylinder_valid.hdf5 --output ./datasets/cylinder_valid.hdf5
45+
python train_transformer.py mode=infer
46+
```
3047

3148
| 模型 | MSE |
3249
| :-- | :-- |

examples/cylinder/2d_unsteady/conf/cylinder2d_unsteady_Re100.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,21 @@ TRAIN:
7070
EVAL:
7171
batch_size: 10240
7272
pretrained_model_path: null
73+
74+
# inference settings
75+
INFER:
76+
pretrained_model_path: https://paddle-org.bj.bcebos.com/paddlescience/models/cylinder2d_unsteady_Re100/cylinder2d_unsteady_Re100_pretrained.pdparams
77+
export_path: ./inference/cylinder2d_unsteady_Re100
78+
pdmodel_path: ${INFER.export_path}.pdmodel
79+
pdiparams_path: ${INFER.export_path}.pdiparams
80+
onnx_path: ${INFER.export_path}.onnx
81+
device: gpu
82+
engine: native
83+
precision: fp32
84+
ir_optim: true
85+
min_subgraph_size: 5
86+
gpu_mem: 2000
87+
gpu_id: 0
88+
max_batch_size: 10240
89+
num_cpu_threads: 10
90+
batch_size: 10240

examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,59 @@ def evaluate(cfg: DictConfig):
311311
solver.visualize()
312312

313313

314+
def export(cfg: DictConfig):
315+
# set model
316+
model = ppsci.arch.MLP(**cfg.MODEL)
317+
318+
# initialize solver
319+
solver = ppsci.solver.Solver(
320+
model,
321+
pretrained_model_path=cfg.INFER.pretrained_model_path,
322+
)
323+
# export model
324+
from paddle.static import InputSpec
325+
326+
input_spec = [
327+
{key: InputSpec([None, 1], "float32", name=key) for key in model.input_keys},
328+
]
329+
solver.export(input_spec, cfg.INFER.export_path)
330+
331+
332+
def inference(cfg: DictConfig):
333+
from deploy.python_infer import pinn_predictor
334+
335+
predictor = pinn_predictor.PINNPredictor(cfg)
336+
# set time-geometry
337+
geom = {
338+
"time_rect_eval": ppsci.geometry.PointCloud(
339+
reader.load_csv_file(
340+
cfg.DOMAIN_EVAL_PATH,
341+
("t", "x", "y"),
342+
),
343+
("t", "x", "y"),
344+
),
345+
}
346+
NPOINT_EVAL = (
347+
cfg.NPOINT_PDE + cfg.NPOINT_INLET_CYLINDER + cfg.NPOINT_OUTLET
348+
) * cfg.NUM_TIMESTAMPS
349+
input_dict = geom["time_rect_eval"].sample_interior(NPOINT_EVAL, evenly=True)
350+
output_dict = predictor.predict(input_dict, cfg.INFER.batch_size)
351+
352+
# mapping data to cfg.INFER.output_keys
353+
output_dict = {
354+
store_key: output_dict[infer_key]
355+
for store_key, infer_key in zip(cfg.MODEL.output_keys, output_dict.keys())
356+
}
357+
358+
ppsci.visualize.save_vtu_from_dict(
359+
"./cylinder2d_unsteady_Re100_pred.vtu",
360+
{**input_dict, **output_dict},
361+
input_dict.keys(),
362+
cfg.MODEL.output_keys,
363+
cfg.NUM_TIMESTAMPS,
364+
)
365+
366+
314367
@hydra.main(
315368
version_base=None,
316369
config_path="./conf",
@@ -321,8 +374,14 @@ def main(cfg: DictConfig):
321374
train(cfg)
322375
elif cfg.mode == "eval":
323376
evaluate(cfg)
377+
elif cfg.mode == "export":
378+
export(cfg)
379+
elif cfg.mode == "infer":
380+
inference(cfg)
324381
else:
325-
raise ValueError(f"cfg.mode should in ['train', 'eval'], but got '{cfg.mode}'")
382+
raise ValueError(
383+
f"cfg.mode should in ['train', 'eval', 'export', 'infer'], but got '{cfg.mode}'"
384+
)
326385

327386

328387
if __name__ == "__main__":

examples/cylinder/2d_unsteady/transformer_physx/conf/transformer.yaml

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ TRAIN_BLOCK_SIZE: 16
2828
VALID_BLOCK_SIZE: 256
2929
TRAIN_FILE_PATH: ./datasets/cylinder_training.hdf5
3030
VALID_FILE_PATH: ./datasets/cylinder_valid.hdf5
31+
log_freq: 20
3132

3233
# set working condition
3334
EMBEDDING_MODEL_PATH: ./outputs_cylinder2d_unsteady_transformer_physx_enn/checkpoints/latest
@@ -37,7 +38,7 @@ VIS_DATA_NUMS: 1
3738
MODEL:
3839
input_keys: ["embeds"]
3940
output_keys: ["pred_embeds"]
40-
num_layers: 4
41+
num_layers: 6
4142
num_ctx: 16
4243
embed_size: 128
4344
num_heads: 4
@@ -63,3 +64,20 @@ TRAIN:
6364
EVAL:
6465
batch_size: 16
6566
pretrained_model_path: null
67+
68+
INFER:
69+
pretrained_model_path: https://paddle-org.bj.bcebos.com/paddlescience/models/cylinder/cylinder_transformer_pretrained.pdparams
70+
export_path: ./inference/cylinder_transformer
71+
pdmodel_path: ${INFER.export_path}.pdmodel
72+
pdiparams_path: ${INFER.export_path}.pdiparams
73+
device: gpu
74+
engine: native
75+
precision: fp32
76+
onnx_path: ${INFER.export_path}.onnx
77+
ir_optim: false
78+
min_subgraph_size: 10
79+
gpu_mem: 4000
80+
gpu_id: 0
81+
max_batch_size: 64
82+
num_cpu_threads: 4
83+
batch_size: 16

examples/cylinder/2d_unsteady/transformer_physx/train_transformer.py

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,14 +262,91 @@ def evaluate(cfg: DictConfig):
262262
solver.visualize()
263263

264264

265+
def export(cfg: DictConfig):
266+
# set model
267+
embedding_model = build_embedding_model(cfg.EMBEDDING_MODEL_PATH)
268+
model_cfg = {
269+
**cfg.MODEL,
270+
"embedding_model": embedding_model,
271+
"input_keys": ["states"],
272+
"output_keys": ["pred_states"],
273+
}
274+
model = ppsci.arch.PhysformerGPT2(**model_cfg)
275+
276+
# initialize solver
277+
solver = ppsci.solver.Solver(
278+
model,
279+
pretrained_model_path=cfg.INFER.pretrained_model_path,
280+
)
281+
# export model
282+
from paddle.static import InputSpec
283+
284+
input_spec = [
285+
{
286+
key: InputSpec([None, 16, 128], "float32", name=key)
287+
for key in model.input_keys
288+
},
289+
]
290+
291+
solver.export(input_spec, cfg.INFER.export_path)
292+
293+
294+
def inference(cfg: DictConfig):
295+
from deploy import python_infer
296+
297+
predictor = python_infer.GeneralPredictor(cfg)
298+
299+
dataset_cfg = {
300+
"name": "CylinderDataset",
301+
"file_path": cfg.VALID_FILE_PATH,
302+
"input_keys": cfg.MODEL.input_keys,
303+
"label_keys": cfg.MODEL.output_keys,
304+
"block_size": cfg.VALID_BLOCK_SIZE,
305+
"stride": 1024,
306+
}
307+
308+
dataset = ppsci.data.dataset.build_dataset(dataset_cfg)
309+
310+
input_dict = {
311+
"states": dataset.data[: cfg.VIS_DATA_NUMS, :-1],
312+
}
313+
314+
output_dict = predictor.predict(input_dict)
315+
316+
# mapping data to cfg.INFER.output_keys
317+
output_keys = ["pred_states"]
318+
output_dict = {
319+
store_key: output_dict[infer_key]
320+
for store_key, infer_key in zip(output_keys, output_dict.keys())
321+
}
322+
323+
input_dict = {
324+
"states": dataset.data[: cfg.VIS_DATA_NUMS, 1:],
325+
}
326+
327+
data_dict = {**input_dict, **output_dict}
328+
for i in range(cfg.VIS_DATA_NUMS):
329+
ppsci.visualize.save_plot_from_3d_dict(
330+
f"./cylinder_transformer_pred_{i}",
331+
{key: value[i] for key, value in data_dict.items()},
332+
("states", "pred_states"),
333+
)
334+
335+
265336
@hydra.main(version_base=None, config_path="./conf", config_name="transformer.yaml")
266337
def main(cfg: DictConfig):
267338
if cfg.mode == "train":
268339
train(cfg)
269340
elif cfg.mode == "eval":
270341
evaluate(cfg)
342+
elif cfg.mode == "export":
343+
export(cfg)
344+
elif cfg.mode == "infer":
345+
inference(cfg)
271346
else:
272-
raise ValueError(f"cfg.mode should in ['train', 'eval'], but got '{cfg.mode}'")
347+
raise ValueError(
348+
f"cfg.mode should in ['train', 'eval', 'export', 'infer'], but got '{cfg.mode}'"
349+
)
273350

274351

275352
if __name__ == "__main__":

ppsci/arch/physx_transformer.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from paddle.nn.initializer import Normal
2929

3030
from ppsci.arch import base
31+
from ppsci.arch.embedding_koopman import CylinderEmbedding
3132

3233
zeros_ = Constant(value=0.0)
3334
ones_ = Constant(value=1.0)
@@ -387,7 +388,10 @@ def forward(self, x):
387388
x = self._input_transform(x)
388389
x_tensor = self.concat_to_tensor(x, self.input_keys, axis=-1)
389390
if self.embedding_model is not None:
390-
x_tensor = self.embedding_model.encoder(x_tensor)
391+
if isinstance(self.embedding_model, CylinderEmbedding):
392+
x_tensor = self.embedding_model.encoder(x_tensor, x["visc"])
393+
else:
394+
x_tensor = self.embedding_model.encoder(x_tensor)
391395

392396
if self.training:
393397
y = self.forward_tensor(x_tensor)

0 commit comments

Comments
 (0)