在Slurm中执行代码时,如何确定哪个节点正在执行代码?

时间:2019-06-21 13:27:48

标签: bash parallel-processing distributed-computing hostname slurm

我对Slurm和分布式/并行计算非常陌生,因此希望有人可以对我的问题有所了解,但请记住,这可能是一个简单的简单问题。

我使用6个从属Pi3(和1个主控Pi3)建立了一个集群,并安装了Slurm工作负载管理器来帮助分配资源等。

在进入更复杂的代码之前,我正在尝试测试一些超级简单的东西。我正在向所有节点发送相同的命令,并打印该节点的主机名。

(当前有效的)我当前的代码是:

srun --nodes=6 hostname

并返回:

node01
node05
node04
node02
node06
node03

现在,我尝试使用带有以下脚本的sbatch运行相同类型的命令:

 #!/bin/bash
 #SBATCH --nodes=6
 #SBATCH --partition=partition
 #SBATCH --ntasks-per-node=1

 cd $SLURM_SUBMIT_DIR
 srun printf ‘Hello from: %s\n’ $(hostname) >> out.txt

预期与上面类似的结果,但是我得到了:

Hello from: node01
Hello from: node01
Hello from: node01
Hello from: node01
Hello from: node01
Hello from: node01

我尝试使用SLURM_NODEID和SLURMD_NODENAME env变量,但是仍然无法让它做我想要的事情。

我只想知道哪个节点正在运行代码。目的是使我能够进一步追踪更复杂脚本的哪些操作由哪些节点完成。也许比较预期“相同”的节点之间的性能。也许甚至跟踪哪些节点正在执行并行化案例的哪一部分?

非常感谢!!!!

1 个答案:

答案 0 :(得分:0)

printf ‘Hello from: %s\n’ $(hostname) >> out.txt部分在被提供给srun之前由Bash评估。因此,基本上,您的脚本相当于

HOST=$(hostname)
srun printf ‘Hello from: %s\n’ $HOST >> out.txt

这将运行相同的printf命令,并扩展相同的变量。如果您只是运行

srun hostname

在提交脚本中,您将看到与直接运行srun时(在提交脚本之外)获得的结果相同的结果

如果要运行printf,则应执行以下操作:

srun bash -c "printf 'Hello from: %s\n' \$(hostname)" >> out.txt