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



我的情况是集群由3台pc (Raspbian with 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中创建名为120_node1.txt,121_node2.txt122_node3.txt(任意作业编号)的文件,因为:

  • 请求3个节点
  • 请求3个任务
  • 为每个任务设置了1个节点的限制

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

如何使其按预期工作?

很奇怪,srun --nodes=3 hostname按预期工作,并返回:

node1
node2
node3

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

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

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

最新更新