我对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变量,但是仍然无法让它做我想要的事情。
我只想知道哪个节点正在运行代码。目的是使我能够进一步追踪更复杂脚本的哪些操作由哪些节点完成。也许比较预期“相同”的节点之间的性能。也许甚至跟踪哪些节点正在执行并行化案例的哪一部分?
非常感谢!!!!
答案 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