我想编写slurm批次(sbatch)来运行几个mpi应用程序。因此,我希望能够运行类似的东西
salloc --nodes=1 mpirun -n 6 hostname
但是我收到了这条消息:
系统中没有足够的插槽可满足6个插槽 应用程序要求: 主机名
为您的应用程序请求更少的插槽,或者提供更多可供使用的插槽。
该节点实际上有4个CPU。因此,我寻找的东西允许每个CPU更多的任务,但我找不到合适的选项。我知道只有当物理资源丢失时,mpi才能运行多个进程。我认为这个问题是在愚蠢的一面。 你有什么建议/意见吗?
答案 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实施都有糟糕的性能。如何解决这个问题是一个不同的,更加困难的问题。