mpirun 是不是知道请求的核心数量是不是大于或小于节点中的可用核心?

Posted

技术标签:

【中文标题】mpirun 是不是知道请求的核心数量是不是大于或小于节点中的可用核心?【英文标题】:Does mpirun know if the requested number of cores is bigger or smaller than the available cores in a node?mpirun 是否知道请求的核心数量是否大于或小于节点中的可用核心? 【发布时间】:2021-02-10 09:04:11 【问题描述】:

我正在考虑mpirunsrun 之间的哪个进程启动器更擅长优化资源。假设一个集群中的一个计算节点总共有 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 超过每个 CPU 内存(因此我的程序很糟糕,25 GB > 24 GB),或者

    当每个进程的内存超过每个核心内存时(因此我的程序很好,2.5 GB

【问题讨论】:

【参考方案1】:

mpirun 没有关于集群资源的信息。它不会请求资源;您必须首先请求分配,通常使用 sbatchsalloc,然后 Slurm 将设置环境,以便 mpirun 知道在哪个节点上启动进程。因此,您必须查看sbatchsalloc 选项来创建符合您需求的请求。默认情况下,Slurm 将尝试在最少数量的节点上“打包”作业。

srun 也可以在由sbatchsalloc 创建的分配中工作,但它也可以自己执行请求。

【讨论】:

我不知道mpirun也可以在slurm准备的资源上运行,一直以来我一直使用PBSmpirun(或mpiexec)和@987654336 @ 与 srun. 查看更多信息here

以上是关于mpirun 是不是知道请求的核心数量是不是大于或小于节点中的可用核心?的主要内容,如果未能解决你的问题,请参考以下文章

结束 mpirun 进程会终止 bash 循环

iOS 8 Mapkit 和位置 - 每天的请求数量是不是有任何限制?

如何知道请求是不是来自缓存或不使用 AFNetworking

运行比核心数量更多的分区是不是有意义?

mpirun - 没有足够的可用插槽

使用 maven surefire 使用 mpirun 运行 Junit 测试