GNU parallel --jobs选项在群集上使用多个节点,每个节点有多个cpus

Ste*_*och 7 hpc gnu-parallel

我正在使用gnu parallel在高性能(HPC)计算集群上启动代码,每个节点有2个CPU.该集群使用TORQUE便携式批处理系统(PBS).我的问题是澄清GNU并行的--jobs选项如何在这种情况下工作.

当我在没有--jobs选项的情况下运行调用GNU parallel的PBS脚本时,如下所示:

#PBS -lnodes=2:ppn=2
...
parallel --env $PBS_O_WORKDIR --sshloginfile $PBS_NODEFILE \
  matlab -nodiplay -r "\"cd $PBS_O_WORKDIR,primes1({})\"" ::: 10 20 30 40
Run Code Online (Sandbox Code Playgroud)

看起来它每个核心只使用一个CPU,并且还提供以下错误流:

bash: parallel: command not found
parallel: Warning: Could not figure out number of cpus on galles087 (). Using 1.
bash: parallel: command not found
parallel: Warning: Could not figure out number of cpus on galles108 (). Using 1.
Run Code Online (Sandbox Code Playgroud)

这看起来像每个节点一个错误.我不明白第一部分(bash: parallel: command not found),但第二部分告诉我它正在使用一个节点.

当我将选项添加-j2到并行调用时,错误消失了,我认为它每个节点使用两个CPU.我仍然是HPC的新手,所以我检查这个的方法是从我的代码中输出日期时间戳(虚拟matlab代码需要10秒才能完成).我的问题是:

  1. --jobs正确使用该选项吗?指定是否正确,-j2因为每个节点有2个CPU?或者我应该使用-jNN是CPU的总数(节点数乘以每个节点的CPU数)?
  2. 似乎GNU并行尝试确定每个节点上自己的CPU数量.有没有办法让我的工作正常?
  3. 这条bash: parallel: command not found消息有什么意义吗?

Ole*_*nge 5

  1. 是:-j 是每个节点的作业数。
  2. 是:在远程主机上的 $PATH 中安装“parallel”。
  3. parallel是的:这是由于$PATH 中缺失造成的。

GNU Parallel 登录远程机器;尝试确定失败的核心数(使用parallel --number-of-cores),然后默认为每个主机 1 个 CPU 核心。通过给予-j2GNU Parallel 不会尝试确定核心数量。

您是否知道您还可以在 --sshlogin 中将核心数指定为: 4/myserver ?如果您混合使用具有不同内核数量的机器,这非常有用。