CFDBench 是一个用于评估在具有各种边界条件、物理特性和域几何形状的流体动力学中机器学习方法的大规模基准。它由计算流体动力学(CFD)中的四个经典问题组成,具有许多不同的操作参数,使其非常适合测试替代模型的推理时间泛化能力。这种泛化能力对于在将替代模型应用于新问题时避免昂贵的重新训练至关重要。
数据集中包括的四个流动问题,
cavity: 顶盖驱动方腔流tube: 管道流动dam: 坝流cylinder: 圆柱扰流
对于每个问题,我们生成具有不同操作参数的流动,这是我们用来指三种条件的组合的术语:(1)边界BC,(2)流体物理性质(PROP),和(3)场的几何形状(GEO)。每种运行参数对应一个子集。在每个子集中,相应的操作条件是变化的,而其他参数保持不变。 数据使用npy文件存储,是NumPy 使用的标准二进制文件格式。每组数据下包含u.npy和v.npy以及一个json文件(用于描述这组数据对应的物理条件)
用数值算法生成数据后,将其插值到64x64的网格中,插值前的原始数据非常大。下面的链接是插值数据: 插值数据 (~13.4GB):
原始数据 (~460GB):
- HuggingFace
- Baidu Drive (百度网盘) (提取码: cfd4)
使用SCNET-华中一区计算环境,可在「/public/share/sugonhpcapp01/onestore/onedatasets/CFDBench」获取数据集
使用前需要
source ../../../env.shgeneration-code中目录包含创建网格的代码(ICEM代码)和ANSYS Fluent中批量生成的模式代码。
将数据集解压,并将解压后的文件存放至当前目录的 data 文件夹中,目录结构如下:
▼ data/
▼ cavity/
▼ bc/
▼ geo/
▼ prop/
► tube/
► dam/
► cylinder/
args.py
train_auto.py
train.py
README.md
模型的基本类型是自回归和非自回归:
-
自回归:
- Auto-FFN
- Auto-DeepONet
- Auto-EDeepONet
- Auto-DeepONetCNN
- ResNet
- U-Net
- FNO
-
非自回归
- FFN
- DeepONet
运行train.py或train_auto.py分别训练非自回归或自回归模型。使用conf/cfdbench.yaml中的model.name指定模型,它必须是以下之一:
| Model | Value for --model |
Script |
|---|---|---|
| Non-autoregrssive FFN | ffn |
train.py |
| Non-autoregressive DeepONet | deeponet |
train.py |
| Autoregressive Auto-FFN | auto_ffn |
train_auto.py |
| Autoregressive Auto-DeepONet | auto_deeponet |
train_auto.py |
| Autoregressive Auto-EDeepONet | auto_edeeponet |
train_auto.py |
| Autoregressive Auto-DeepONetCNN | auto_deeponet_cnn |
train_auto.py |
| Autoregressive ResNet | resnet |
train_auto.py |
| Autoregressive U-Net | unet |
train_auto.py |
| Autoregressive FNO | fno |
train_auto.py |
例如,使用FNO模型模拟方腔流子集中的所有子集,需要在cfdbench.yaml中修改data_name为cavity_prop_bc_geo,task_type修改为auto,model下name修改为fno:
python train_auto.py使用DeepONet模型模拟坝流中的 PROP + GEO 子集,需要将data_name为dam_prop_geo,model下name修改为DeepONet,task_type修改为static:
python train.py默认情况下,结果将保存到./result/目录,可以修改output_dir参数进行自定义。
多卡训练:
mpirun -np <num_GPUs> --allow-run-as-root python train_auto.py 若在 Docker 容器内运行,多GPU命令可能需加 --allow-run-as-root。
torchrun启动多节点多卡训练:
torchrun --standalone --nnodes=<num_nodes> --nproc_per_node=<num_GPUs> train_auto.py如果在支持slurm作业调度系统的环境下进行跨节点并行训练,可以执行如下脚本:
sbatch slurm.sh注:在cylinder数据集中使用自回归模型训练时,会生成当前目录下生成dataset目录,用于存储预处理后的数据,这样在使用其他模型时能直接读取。
将cfdbench.yaml中的mode修改为test模式,继续运行train.py 或 train_auto.py即可
CFDBench: A Large-Scale Benchmark for Machine Learning Methods in Fluid Dynamics.

