mpi - mpirun 是否知道请求的核心数量是否大于或小于节点中的可用核心?
问题描述
我正在考虑mpirun
和之间的哪个进程启动器srun
更擅长优化资源。假设一个集群中的一个计算节点总共有 16 个内核,我有一个工作要使用 10 个进程来运行。
如果我使用 启动它
mpirun -n10
,它是否能够检测到我的请求的核心数量少于每个节点中可用的核心数量,并会自动从单个节点分配所有 10 个核心?不像srun
那-N <number>
得指定节点数,mpirun
好像没有这样的标志。我认为在一个节点上运行所有进程可以减少通信时间。在上面的示例中,我们进一步假设每个节点有 2 个 CPU,并且内核平均分布,因此 8 个内核/CPU 和规范说每个节点有 48 GB 内存(或 24 GB/CPU 或 3 GB/内核)。假设我的工作中每个生成的进程都需要 2.5 GB,所以所有进程都将使用 25 GB。什么时候说一个程序超过了内存限制,是什么时候需要的总内存:
- 超过每个节点的内存(因此我的程序很好,25 GB < 48 GB),或者
- 超过每个 CPU 内存(因此我的程序很糟糕,25 GB > 24 GB),或者
当每个进程的内存超过每个核心内存时(因此我的程序很好,2.5 GB < 3 GB)?
解决方案
mpirun
没有关于集群资源的信息。它不会请求资源;您必须首先请求分配,通常使用sbatch
,或者salloc
然后 Slurm 将设置环境,以便mpirun
知道在哪个节点上启动进程。因此,您必须查看sbatch
和salloc
选项来创建符合您需求的请求。默认情况下,Slurm 将尝试在最少数量的节点上“打包”作业。
srun
也可以在sbatch
or创建的分配中工作salloc
,但它也可以自己执行请求。