监视在slurm作业上运行的OpenFOAM模拟的CPU使用情况

时间:2018-02-01 21:37:14

标签: openmpi slurm openfoam

我在群集上运行OpenFOAM模拟。我使用了the Scotch decomposition method,我的decomposeParDict看起来像这样:

FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      decomposeParDict;
}
numberOfSubdomains 6;
method          scotch;

checkMeshdecomposePar完成后没有任何问题。我已经通过

为枯萎指定了6个节点
srun -N6 -l sonicFoam

并且求解器运行顺利,没有任何错误。

问题是与之前运行的非并行模拟相比,速度没有提高的解决方案。我想监视CPU使用情况,看看我分配的所有6个节点是否都被类似地加载。 squeue --user=foobar命令返回jobNumber和分配的节点列表(NODELIST(REASON)),如下所示:

foo,bar[061-065]

来自sinfo命令,这些节点都位于debugmain* PARTITION s(我完全不知道这意味着什么!)。

This post表示您可以使用sacctsstat命令来监控slurm作业的CPU时间和内存使用情况。但是当我跑步时

sacct --format="CPUTime,MaxRSS"
它给了我:

 CPUTime     MaxRSS
---------- ----------
  00:00:00
  00:00:00
  00:07:36
  00:00:56
  00:00:26
  15:26:24

我无法理解。当我通过

指定工作号码时
sacct --job=<jobNumber> --format="UserCPU"

回报为空。所以我的问题是

  • 我的模拟是加载所有节点还是在一两个节点上运行,其余节点是免费的?
  • 我正在运行正确的命令吗?如果是,这些数字是什么意思?它们如何表示每个节点的CPU使用率?
  • 如果没有,那么--format="..."和/或sacct(或其他slurm命令)的正确sstat是什么才能获得CPU使用/负载?

P.S.1。我跟随the official instructions之后的OpenFOAM编译。尽管如此,我没有对OpenMPI及其mpicc编译器做任何事情。

P.S.2 对于那些可能会在这里结束的人。也许我正在运行错误的命令,显然可以先通过以下方式分配一些资源:

srun -N 1 --ntasks-per-node=7 --pty bash

其中7是您想要的核心数,而bash只是一个名称。然后运行解算器:

mpirun -np 7 sonicFoam -parallel -fileHandler uncollated

我现在还不确定。

2 个答案:

答案 0 :(得分:2)

您可以使用

sacct --format='jobid,AveCPU,MinCPU,MinCPUTask,MinCPUNode'

检查所有CPU是否都处于活动状态。将AveCPU(作业中所有任务的平均CPU时间)与MinCPU进行比较(作业中所有任务的最小CPU时间)。如果它们相等,则所有6个任务(您请求6个节点,每个节点隐含地执行1个任务)均可正常工作。如果它们不相等,或者甚至MinCPU为零,则某些任务一无所获。

但在你的情况下,我相信你会发现所有任务都在努力工作,但他们都在做同样的事情。

除了@timdykes关于-parallel标志的评论之外,您还必须意识到使用sun启动MPI作业需要使用Slurm支持编译OpenMPI。在安装OpenFOAM期间,它安装了自己的OpenMPI版本,如果存在文件/usr/include/slurm/slurm.h/usr/include/slurm.h,则可能编译了Slurm支持。但最安全的可能是使用mpirun

但要做到这一点,您必须首先使用sbatchsalloc向Slurm请求分配。

答案 1 :(得分:1)

您是否尝试使用'-parallel'参数运行?运行并行作业时,所有OpenFOAM示例都在线使用此参数,一个示例是official guide并行运行。

srun -N $NTASKS -l sonicFOAM -parallel

顺便说一句 - 我看到你自己构建了openfoam,你检查过群集管理员是否为它提供了一个模块吗?您通常可以运行module avail以查看可用模块的列表,然后运行module load moduleName(如果存在OpenFOAM模块)。这很有用,因为您可以相信它是使用所有正确的选项构建的,并会自动设置$ PATH等。