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

标签 ssh hpc gnu-parallel pbs qsub

我一直试图在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 argumentssh: connect to host 901 port 22: Invalid argumentssh: connect to host 922 port 22: Invalid argumentssh: connect to host 901 port 22: Invalid argument在此,922901是与分配的节点相对应的数字,并包含在nodelist.dat ($PBS_NODEFILE)文件中。
我尝试搜索此问题,但找不到很多东西,因为其他人似乎对--sshloginfile参数都做得很好,所以我不确定这是否是系统特定的问题。

编辑:

正如@Ole Tange在回答和评论中提到的那样,我需要修改$ PBS_NODEFILE生成的“节点号”,我将在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-\1.cluster.uni.edu/g" nodelist.dat

我验证了nodelist.dat仅包含一行,即username@w-900.cluster.uni.edu

编辑2:

似乎集群的体系结构是导致我遇到的错误的原因。我在不同的群集(例如cluster_2)上运行了相同的脚本,并且完成时没有任何错误。用我的系统管理员的话来说,它在cluster_2上工作的原因是:“cluster_2是一台机器。一旦开始工作,您实际上就象您期望的那样处于PBS工作的头节点。”

最佳答案

GNU Parallel将变量$PARALLEL用作选项。因此,当您同时使用它时,可能会引起混乱。但是,这似乎不是根本原因,但是请帮忙,使用另一个变量名(或按照手册页中的说明使用它)。

这里的问题似乎是ssh,它将看不到数字作为主机名:

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

添加域名,然后ssh会将其视为主机名:
$ ssh 8.pi.dk
<<connects>>

如果您是我,我将与您的集群管理员联系,询问是否可以将工作程序节点重命名为w-XXX,其中XXX是其当前名称。

关于ssh - 无法使用GNU并行在多个节点上运行PBS脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245735/

相关文章:

python - HPC : comm. 上的 mpi4py 收集

java - Java 中的无限带宽

linux - 如何使用 `xargs` 中的参数作为数组的索引

ssh - AWS pem key 不起作用

node.js - 使用 Digital Ocean 和 FlightPlan.js 时 Node 应用程序出错 - 所有配置的身份验证方法均失败

当主目录由不同的组拥有并被授予完全权限时,ssh 拒绝 key

c - 使用派生类型进行 MPI 收集后的垃圾输出

ssh - 无法通过 ssh 进入 Google 引擎,循环连接

python - 使用 GNU parallel 并行化 bash for 循环

c++ - 如何使用 gnu_parallel 运行多个可执行文件和/或 bash 脚本?