【问题标题】:Unable to run PBS script on multiple nodes using GNU parallel无法使用 GNU 并行在多个节点上运行 PBS 脚本
【发布时间】: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.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 在他的回答和 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


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 感谢您的有用建议。为了清楚起见,如果我使用username@cluster.uni.edu 登录我的帐户,那么节点号(例如,900)应指定为900@cluster.uni.edu。我确实尝试过这个,但我收到另一个错误说Host key verification failed。但我认为你是对的,我应该给我的集群管理员发邮件。
  • @tobiuchiha 这是一种非常规的做法,可能是令人困惑的ssh。通常您会使用username@w-900.cluster.uni.edu 之类的内容登录。这样系统管理员可以看到哪个用户正在运行哪个程序。
  • 我试过username@w-900.cluster.uni.edu,但我得到ssh: Could not resolve hostname w-900.cluster.uni.edu: Name or service not known 错误。我对此不太熟悉。还有其他的可以加域名吗?
  • 您是否要求您的系统管理员先重命名主机?否则显然是行不通的。
  • 我确实联系了我的系统管理员。我认为他对 GNU-parallel 不太熟悉。但他回复的要点是集群的架构不支持我正在尝试做的事情。他确实试图解释其背后的原因,但我无法理解。我们大学有 3 个集群,所以我将试一试剩下的两个。但是我尝试使用的集群拥有最多的计算节点,所以我真的很想让它在那里工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 2019-08-28
  • 2016-07-30
  • 2018-11-18
  • 1970-01-01
相关资源
最近更新 更多