【问题标题】:How to tell which node is executing code as it executes in Slurm?如何判断哪个节点在 Slurm 中执行时正在执行代码?
【发布时间】:2019-06-21 13:27:48
【问题描述】:

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

我已经使用 6 个从机 Pi3(和 1 个主机)设置了一个集群,并安装了 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 环境变量,但仍然无法让它做我想做的事情。

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

非常感谢!!!!

【问题讨论】:

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


    【解决方案1】:

    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
    

    【讨论】:

    • 仍然得到相同的结果...我不打算使用 printf 所以如果您有任何其他建议,请告诉我..我只是想执行某种任务,即打个招呼跟随它执行它的节点
    • 这对我有用,谢谢,你能解释一下为什么这有效而你之前的帖子没有吗?只是这样我就可以理解如何对此进行扩展
    • 我不完全确定为什么要诚实。这一切都与操作的顺序和转义有关。 \$(hostname) 在引号之外似乎不起作用。
    • 无论如何,谢谢,我会尝试在此基础上解决更复杂的情况
    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多