mprun with slurm:如何在单个CPU上运行多个进程

时间:2016-06-10 09:43:13

标签: mpi cpu slurm

我想编写slurm批次(sbatch)来运行几个mpi应用程序。因此,我希望能够运行类似的东西

salloc --nodes=1 mpirun -n 6 hostname 

但是我收到了这条消息:

  

系统中没有足够的插槽可满足6个插槽   应用程序要求:    主机名

     

为您的应用程序请求更少的插槽,或者提供更多可供使用的插槽。

该节点实际上有4个CPU。因此,我寻找的东西允许每个CPU更多的任务,但我找不到合适的选项。我知道只有当物理资源丢失时,mpi才能运行多个进程。我认为这个问题是在愚蠢的一面。 你有什么建议/意见吗?

1 个答案:

答案 0 :(得分:1)

使用srun并提供选项--overcommit,例如那样:

test.job:

#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks=6
#SBATCH --overcommit

srun hostname

运行sbatch test.job

来自man srun

  

通常,srun不会为每个CPU分配多个进程。通过指定--overcommit,您明确允许每个CPU使用多个进程。

请注意,根据您的群集配置,这可能也可能不适用于mpirun,但我会坚持使用srun,除非您有充分的理由不这样做。

一个重要的警告:在overcommited中运行时,默认情况下,大多数MPI实施都有糟糕的性能。如何解决这个问题是一个不同的,更加困难的问题。