Slurm上的以下两个并行化方案有什么区别?
方案1
跑 sbatch script.sh
#!/bin/bash
#SBATCH --ntasks=8
## more options
srun echo hello
Run Code Online (Sandbox Code Playgroud)
这会召唤8个正在运行的工作 echo hello
方案2 我已经使用数组作业完成了类似的工作。
#!/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
Run Code Online (Sandbox Code Playgroud)
两种方案之间有什么区别吗?他们俩似乎都完成了同一件事。
方案1是一个单独的作业(具有8个任务),而方案2是8个不同的作业(每个具有一个任务)。在第一种情况下,所有任务将在同一时间安排,而在第二种情况下,将独立安排8个任务。
使用作业阵列(方案2),如果一次有8个CPU可用,则它们将同时启动,但是如果最初只有4个CPU可用,则将运行4个任务,其余4个仍待处理。初始的4个完成后,其他4个开始。它通常用于尴尬的并行作业的情况下,在这些作业中进程不需要进行通信或同步,例如将同一程序应用于文件列表。
相比之下,对于单个作业(方案1),Slurm将同时启动8个任务,因此需要8个CPUS才能同时可用。这通常仅与并行作业一起使用,在并行作业中,进程需要相互通信,例如使用消息传递接口库。
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |