我正在用slurm启动并行执行的工作。此作业需要在每个节点中存在某个目录结构,但如果我在作业脚本中使用mkdir
,则只在第一个节点中创建目录。如何确保在作业使用的所有节点中创建目录?
答案 0 :(得分:1)
我想我必须自己回答。这不是一个完美的解决方案,但它在我的情况下工作得足够好。在作业脚本中,我在实际工作开始之前使用了它:
for node in $(scontrol show hostnames $SLURM_NODELIST) ; do
srun -N 1-1 -n 1 -w $node mkdir -p /directory/to/be/created
done
sleep 60
$SLURM_NODELIST
中的节点列表缩写,scontrol
语句我得到全名。如果没有sleep
命令,我有时会遇到某个目录不存在的问题,所以添加它只是为了安全。
问题在于我需要提前知道需要创建哪些目录,这在我的情况下是可行的,但在其他情况下可能会更难。
答案 1 :(得分:0)
您只需添加
即可 srun mkdir -p /directory/to/be/created
。它可能会尝试多次创建相同的目录,具体取决于群集配置,但无论如何它都可以工作。