Slurm问题:数组作业VS在sbatch中使用srun

8

以下是 Slurm 并行化方案的两种区别:

方案1

运行 sbatch script.sh

#!/bin/bash
#SBATCH --ntasks=8
## more options
srun echo hello

这条命令会调用8个运行echo hello的任务。

方案二 我曾经使用数组任务完成过类似的事情。

#!/bin/bash

#SBATCH --job-name=arrayJob
#SBATCH --output=arrayJob_%A_%a.out
#SBATCH --error=arrayJob_%A_%a.err
#SBATCH --array=1-8
#SBATCH --time=01:00:00
#SBATCH --ntasks=1

# Print this sub-job's task ID
echo hello

这两种方案有什么区别吗?它们似乎都能达到相同的目的。
1个回答

14
方案1是一个单一的作业(包含8个任务),而方案2是8个独立的作业(每个作业只有一个任务)。在第一种情况下,所有任务将同时安排,而在第二种情况下,8个任务将独立地安排。使用作业数组(方案2)时,如果8个CPU同时可用,它们将同时启动,但如果一开始只有4个CPU可用,则会运行4个任务,另外4个任务将保持挂起状态。当初始的4个任务完成后,将启动另外4个任务。这通常用于尴尬地并行的作业中,其中进程不需要通信或同步,例如对文件列表应用相同的程序。
相比之下,对于单个作业(方案1),Slurm将同时启动8个任务,因此需要8个CPU同时可用。这通常仅用于需要进程相互通信的并行作业,例如使用消息传递接口库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接