hpc - GNU 并行 --jobs 选项在集群上使用多个节点,每个节点有多个 cpu

标签 hpc gnu-parallel

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

当我运行不带 --jobs 选项的调用 GNU 并行的 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

看起来每个核心只使用一个 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.

这看起来像是每个节点都有一个错误。我不明白第一部分(bash:并行:找不到命令),但第二部分告诉我它正在使用一个节点。

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

  1. 我是否正确使用了 --jobs 选项?因为每个节点有 2 个 CPU,所以指定 -j2 是否正确?或者我应该使用 -jN,其中 N 是 CPU 总数(节点数乘以每个节点的 CPU 数)?
  2. 看来 GNU 并行尝试自行确定每个节点的 CPU 数量。有什么办法可以让它正常工作吗?
  3. bash:parallel:command notfound消息有什么意义吗?

最佳答案

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

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

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

关于hpc - GNU 并行 --jobs 选项在集群上使用多个节点,每个节点有多个 cpu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22236337/

相关文章:

使用CUDA C进行卷积,错误: expression must be a modifiable lvalue

linux - opencl内核管道如何实现

mysql - gnu 并行 mysql LOAD DATA LOCAL INFILE

postgresql - GNU 并行子进程(Postgres vacuum)意外终止

bash - 如何使用 bash 在一组参数上并行执行多个命令,如果其中至少一个失败则失败

java - ANT 问题 : net/sf/antcontrib/antcontrib. 属性

bash - 并行调用多个 bash 函数

bash - GNU 按索引号并行组合输入参数

c - MPI_Send 或 MPI_Recv 的限制?