如何创建一个批处理脚本,提交多个作业并将每个作业分配到一个单独的节点上?

How to create a batch script, which submitts several jobs and allocates each of the this jobs on a separate node?

我是 HPC 和 SLURM 的新手,我 运行 遇到了一些麻烦。

我获得了访问 HPC 集群的权限,每个节点上有 32 CPUs。为了进行所需的计算,我制作了 12 Python 个多处理脚本,其中每个脚本正好使用 32 CPU 个。 如何,而不是在交互式模式中手动启动每个脚本(顺便说一句,这也是一个选项。但它需要很多时间)我决定编写一个批处理脚本以自动启动我所有的 12 个脚本。

//脚本//

#!/bin/bash

#SBATCH --job-name=job_name

#SBATCH --partition=分区

#SBATCH --nodes=1

#SBATCH --time=47:59:59

#SBATCH --export=NONE

#SBATCH --array=1-12

模块切换环境env/system-gcc 模块负载 python/3.8.5

来源/home/user/env/bin/activate

python3.8 $HOME/Script_directory/Script$SLURM_ARRAY_TASK_ID.py

退出

//剧本//

但据我了解,此脚本会在同一节点上启动数组中的所有作业,因此底层 python 脚本可能会开始“争夺”可用 CPU's 从而减慢速度。

我应该如何修改我的 bash 文件,以便在单独的节点上从阵列开始每个任务?

提前致谢!

此脚本将启动 12 个独立作业,可能同时在 12 个不同的节点上,或在同一节点上按顺序启动所有 12 个作业,或根据集群负载的任何其他组合。

每个作业都会运行相应的Script$SLURM_ARRAY_TASK_ID.py脚本。不会有资源竞争。

请注意,如果节点在集群中共享,您将添加 --exclusive 参数以请求具有 32 个 CPU 的整个节点。