【发布时间】:2019-01-17 23:25:40
【问题描述】:
我一直在尝试在我的 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.dat 和 sort -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
这里,922 和901 是分配的节点对应的编号,包含在nodelist.dat ($PBS_NODEFILE) 文件中。
我试图搜索这个问题,但找不到太多,因为其他人似乎对 --sshloginfile 参数做得很好,所以我不确定这是否是系统特定的问题。
编辑:
正如@Ole Tange 在他的回答和 cmets 中提到的,我需要修改 $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。
Edit-2:
集群的架构似乎是我遇到的错误的原因。我在不同的集群(比如cluster_2)上运行了相同的脚本,它完成时没有任何错误。用我的系统管理员的话来说,它在 cluster_2 上工作的原因是:“cluster_2 是一台机器。一旦你的工作开始,你实际上就像你期望的那样在你的 PBS 工作的头节点上。”
【问题讨论】:
-
我认为您需要发布
nodelist.dat的实际内容才能获得有用的答案。您的问题不符合 MCVE,因此您需要提供尽可能多的实际证据。
标签: ssh hpc gnu-parallel pbs qsub