为什么 SLURM 没有按要求提供节点?

Why the SLURM doesn't provide the nodes as is requested?

我的情况是集群由 3 台 PC(Raspbian 和 slurm 18)组成,所有连接在一起并共享文件存储,挂载为 /storage

任务文件是/storage/multiple_hello.sh:

#!/bin/bash
#SBATCH --ntasks-per-node=1
#SBATCH --nodes=3 
#SBATCH --ntasks=3
cd  /storage
srun echo "Hello World from $(hostname)" >> ./"$SLURM_JOB_ID"_$(hostname).txt

它是 运行 和 sbatch /storage/multiple_hello.sh,预期的结果是在 /storage 中创建 3 个名为 120_node1.txt121_node2.txt122_node3.txt 的文件(任意职位编号)自:

实际输出:只创建了一个文件:120_node1.txt

如何让它按预期工作?

够奇怪了,srun --nodes=3 hostname 按预期工作,并且 returns:

node1
node2
node3

要获得预期结果,请将最后一行修改为

srun bash -c 'echo "Hello World from $(hostname)" >> ./"$SLURM_JOB_ID"_$(hostname).txt'

Bash 解析行的方式与您预期的不同。首先,$hostname$SLURM_JOBID在分配的第一个节点(运行提交脚本的节点)展开,然后srun是运行,并将其输出附加到文件中。您需要具体说明重定向 >> 是您希望 srun 执行的操作的一部分。通过上述解决方案,变量和命令扩展在每个节点上完成,以及重定向。