gnu每个处理器并行一个作业

时间:2016-10-12 14:19:27

标签: parallel-processing hpc gnu-parallel torque

我正在尝试使用gnu并行GNU并行(版本20160922) 启动大量蛋白质对接工作(使用UCSF Dock 6.7)。我正在一个高性能集群上运行,该集群有几十个节点,每个节点有28-40个核心。该系统运行CentOS 7.1.1503,并使用扭矩进行作业管理。

我正在尝试将dock.n.d中的每个配置文件提交到dock可执行文件,群集上每个核心一个。这是我的PBS文件:

#PBS -l walltime=01:00:00
#PBS -N pardock
#PBS -l nodes=1:ppn=28
#PBS -j oe
#PBS -o /home/path/to/pardock.log

cd $PBS_O_WORKDIR
cat $PBS_NODEFILE temp.txt
#f=$(pwd)
ls dock.in.d/*.in | parallel -j 300 --sshloginfile $PBS_NODEFILE  "/path/to/local/bin/dock6 -i {} -o {}.out"

如上所述,这在单个节点上工作正常。但是当我扩展到300个处理器(-l procs=300)跨越几个节点时,我开始出现这些错误:

parallel: Warning: ssh to node026 only allows for 99 simultaneous logins.
parallel: Warning: You may raise this by changing /etc/ssh/sshd_config:MaxStartups and MaxSessions on node026.

我不明白为什么有这么多登录。每个节点只有28-40个内核,因此,如$ PBS_NODEFILE中所述,我希望在这些节点上的任何时间点只能有28-40个SSH登录。

我在这里误解或误解了什么吗?请告知我可以提供哪些其他信息或我应该采取什么方向来实现这一目标。

更新

所以我上面的问题是-j 300$PBS_NODEFILE的组合,它为每个节点上的每个核心都有一个单独的条目。所以在这种情况下我似乎应该使用-j 1。但是,所有工作似乎都在一个节点上运行。

所以我的问题仍然是,如何让gnu并行平衡节点之间的作业,利用所有核心,但不会因每个核心有多个作业而创建过多的SSH登录。

谢谢!

1 个答案:

答案 0 :(得分:1)

您要求GNU Parallel忽略核心数并在每台服务器上运行300个作业。

尝试改为:

ls dock.in.d/*.in | parallel --sshloginfile $PBS_NODEFILE  /path/to/local/bin/dock6 -i {} -o {}.out

这将默认为--jobs 100%,这是所有计算机上每个核心一个作业。

如果您不允许使用计算机上的所有核心,则可以在X/之前将--sshloginfile添加到主机,以强制X作为核心数量:

28/server1.example.com
20/server2.example.com
16/server3.example.net

这将迫使GNU Parallel跳过核心的检测,而是分别使用28,20和16。这与-j 100%结合使用可以控制您希望在不同服务器上启动的作业数量。