在超算机群上运行 OpenFOAM

有超算账号前,我觉得云计算简直就是 CFD 的未来,试用过超算后,发现这种需求10年前就被超算解决了。要论上手难度,各种平台的排序大概是:Windows 10 Subsystem for Linux > Linux物理机 > Windows+Linux 虚拟机 > 云计算服务器 > 超算。

举个例子好了,以下是 Compute Canada 官方支持的 OpenFOAM 版本,只需一条命令就可以配置好计算环境

➜ ~ module avail openfoam --------------------------------- Global Aliases --------------------------------- allinea-cpu -> ddt-cpu arm-forge-cpu -> ddt-cpu allinea-gpu -> ddt-gpu arm-forge-gpu -> ddt-gpu --------------------------- MPI-dependent avx2 modules --------------------------- openfoam/v1712 (phys) openfoam/5.0 (phys) openfoam/3.0.1 (phys) openfoam/6 (phys) openfoam/4.1 (phys) openfoam/6.20180813 (L,phys,D) Where: L: Module is loaded phys: Physics libraries/apps / Logiciels de physique D: Default Module Use "module spider" to find all possible modules. Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
Code language: JavaScript (javascript)

此外,超算平台上的软件是非常全的,几乎不需要自己安装。比如我用 zsh 和 vim,只需两条命令就可以配置好 oh-my-zsh 和 spf-13-vim,完全不用担心没有 root 权限。htop 这种必备的系统监视工具自然也装好了,题图就是我在登录节点上运行 htop 的结果,这个节点使用双路 Intel E5-2683 v4,一共32个核心。

大多数超算使用 slurm 进行作业调度,这一系统也是非常简洁干净,很多情况下底层的东西都是透明的,可以像使用个人电脑那样,直接用 mpirun 调用几百几千个核心。看一个例子

#!/bin/sh #SBATCH --time=00:01:00 #SBATCH --mem=2M #SBATCH --job-name=serialTest #SBATCH --output=job-%J.out #SBATCH --account=def-phresher echo "`pwd`" cd $FOAM_RUN/damBreak || exit 1 # Run from this directory blockMesh setFields interFoam
Code language: PHP (php)

这就是一个基本的 bash 脚本,用来调用 blockMesh、setFields 和 interFoam。文件中 #SBATCH 开头的是作业调度系统 sbatch 的参数。这是一个串行程序,非常小,所以内存只申请了 2M。加拿大的超算对小用户非常友好,如果是天河二号的话,这样的串行程序非常浪费资源,因为天河二号上的作业会独占整个节点,哪怕这个作业是串行的。

近几天我将在 GitHub 更新更多的 sbatch 脚本和 OpenFOAM 测试算例,phresher/OpenFOAM_Tutorials_Plus,敬请 watch 和 star。

常恭

作者: 常恭

略懂 OpenFOAM

发表评论