无法使用 GNU 并行在多个节点上 运行 PBS 脚本

Unable to run PBS script on multiple nodes using GNU parallel

我一直在尝试在我的 PBS 脚本中使用多个节点来 运行 几个独立的作业。每个单独的作业应该使用 8 个核心,集群中的每个节点都有 32 个核心。所以,我想让每个节点 运行 4 个作业。我的PBS脚本如下

#!/usr/bin/env bash
#PBS -l nodes=2:ppn=32
#PBS -l mem=128gb
#PBS -l walltime=01:00:00
#PBS -j oe
#PBS -V
#PBS -l gres=ccm

sort -u $PBS_NODEFILE > nodelist.dat
#cat ${PBS_NODEFILE} > nodelist.dat

export JOBS_PER_NODE=4  

PARALLEL="parallel -j $JOBS_PER_NODE --sshloginfile nodelist.dat --wd $PBS_O_WORKDIR"
$PARALLEL -a input_files.dat sh test.sh {}

input_files.dat 包含作业文件的名称。我已经成功地使用此脚本在一个节点上 运行 并行作业(在这种情况下,我从脚本中删除了 --sshloginfile nodelist.datsort -u $PBS_NODEFILE > nodelist.dat)。但是,每当我尝试在多个节点上 运行 此脚本时,我都会收到以下错误。
ssh: connect to host 922 port 22: Invalid argument
ssh: connect to host 901 port 22: Invalid argument
ssh: connect to host 922 port 22: Invalid argument
ssh: connect to host 901 port 22: Invalid argument
这里,922901是分配节点对应的编号,包含在nodelist.dat ($PBS_NODEFILE)文件中。
我试图搜索这个问题,但找不到太多,因为其他人似乎都很好地处理了 --sshloginfile 参数,所以我不确定这是否是系统特定的问题。

编辑:

正如@Ole Tange 在他的回答和评论中提到的,我需要修改由 $PBS_NODEFILE 生成的 "node number",我在 PBS 脚本中按以下方式进行。

# provides a unique number (say, 900) associated with the node.
sort -u $PBS_NODEFILE > nodelist.dat

# changes the contents of the nodelist.dat from "900" to "username@w-900.cluster.uni.edu"
sed -i -r "s/([0-9]+)/username@w-.cluster.uni.edu/g" nodelist.dat

我确认 nodelist.dat 只包含一行,即 username@w-900.cluster.uni.edu

编辑 2:

我遇到的错误似乎是集群的架构造成的。我在不同的集群上 运行 相同的脚本(比如 cluster_2),它没有任何错误地完成了。用我的系统管理员的话来说,它在 cluster_2 上工作的原因是:"cluster_2 is a single machine. Once your job starts, you are actually on the head node of your PBS job like you would expect."

GNU Parallel 使用变量 $PARALLEL 作为选项。所以当你同时使用它时,很可能会造成混淆。不过,这似乎不是根本原因,但请帮自己一个忙,使用另一个变量名(或按照手册页中的描述使用它)。

这里的问题似乎是 ssh 不会将数字视为主机名:

$ ssh 8
ssh: connect to host 8 port 22: Invalid argument

添加域名,ssh 会将其视为主机名:

$ ssh 8.pi.dk
<<connects>>

如果我是你,我会与你的集群管理员交谈,询问是否可以将工作节点重命名为 w-XXX,其中 XXX 是它们的当前名称。