如何使用salloc在Slurm中运行混合MPI和openmp程序

问题描述 投票:0回答:1

如何使用salloc在Slurm中运行混合MPI和openmp程序,可以 使用以下命令指定 cpu 数量和 openmp 线程数量:salloc ?

mpi openmp slurm
1个回答
0
投票

通常,您可以使用

--ntasks
--ntasks-per-node
选项(或在节点独占情况下使用
--nodes
--ntasks-per-node
)指定任务数量(相当于 Slurm 中的 MPI 进程),然后使用
--cpus-per-task
选项指定任务之间的 stride 以便为 OpenMP 线程腾出空间。 (您可能还需要保留内存的选项,但这取决于您正在使用的系统上 Slurm 的设置方式,请查阅本地文档或询问服务台。)一旦您从
salloc
获得了资源分配,您然后以通常的方式设置
OMP_NUM_THREADS
,假设 MPI 是在 Slurm 支持下编译的,则使用
srun
启动。注意:在最新版本的 Slurm 中,
--cpus-per-task
选项不会从
salloc
传播到
srun
,因此您需要设置
SRUN_CPUS_PER_TASK
环境变量才能实现这一点。

具体示例:总共 512 个 MPI 进程,每个 MPI 进程有 4 个 OpenMP 线程。在具有 128 个核心的节点之间均匀分配(因此,16 个节点,每个节点有 32 个 MPI 进程)。请注意,这是一个最小的示例,您可能需要其他选项

salloc
来指定分区/QoS/帐户,但它们将取决于您正在使用的本地系统。

prompt> salloc --nodes=16 --ntasks-per-node=32 --cpus-per-task=4

salloc: Pending job allocation 6434425
salloc: job 6434425 queued and waiting for resources
salloc: job 6434425 has been allocated resources
salloc: Granted job allocation 6434425
salloc: Waiting for resource configuration
salloc: Nodes nid[001328-001329,001378,001382] are ready for job

prompt> export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
prompt> export SRUN_CPUS_PER_TASK=$SLURM_CPUS_PER_TASK

prompt> srun /path/to/my/program.x

prompt> exit
salloc: Relinquishing job allocation 6434425

根据本地 Slurm 配置,您可能需要其他选项,例如

--hint=nomultithread
仅放置在物理核心上。

英国国家超级计算服务 ARCHER2 有一个页面描述了所有这些选项,包括如何在其系统上使用

salloc
。有些选项特定于其设置,但很多信息通常都是有用的。参见:

https://docs.archer2.ac.uk/user-guide/scheduler/

© www.soinside.com 2019 - 2024. All rights reserved.