如何通过SLURM获取任务A节点的IP/主机名并传递给任务B?

3
我有一个自己编写的集群网络基准测试,我正在尝试使用SLURM调度程序运行它。该基准测试使用标准的客户端/服务器架构,需要在启动时向客户端可执行文件传递服务器IP地址(或主机名)参数。
通常,我会编写一个服务器脚本,用于获取主网卡的地址并将信息放在共享文件系统中,但据我所知,这在集群节点上不起作用。我还了解到,有一个SLURM_JOB_NODELIST环境变量可以让脚本从我的sbatch脚本中查看集群中所有节点的列表,但我不知道在这种情况下如何使用它。
我应该如何确定调度程序选择哪个节点来运行基准测试服务器,并在启动之前/之时将该信息传递给客户端任务?
1个回答

3

在提问之前我竟然没有想到这一点,这比听起来要容易,而SLURM_JOB_NODELIST就是关键。您可以将该变量从sbatch脚本传递到第二个shell脚本中,测试$(hostname)并以这样的方式启动适当的可执行文件,以便两个主机名都已知,如下所示:

name=$(echo $1 | cut -d '-' -f1 -)
node1=$(echo $1 | cut -d '-' -f2 - | tr -d '[')
node2=$(echo $1 | cut -d '-' -f3 - | tr -d ']')
if [ "$(hostname)" == "$name-$node1" ]; then
    server.exe
else
    client.exe $name-$node1
fi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接