SLURM:在同一节点集运行不同配置的两个Intel MPI任务
解决Intel MPI在SLURM下的进程布局问题
要实现你需要的进程布局,核心是给每个mpiexec任务强制指定节点与对应进程数,绕过SLURM对Intel MPI进程分配的自动干预。以下是具体实现步骤:
1. 提取SLURM分配的节点信息
先从SLURM环境变量中获取分配的节点名,避免硬编码:
# 拆分SLURM分配的节点列表为单个节点名 NODES=($(scontrol show hostnames $SLURM_JOB_NODELIST)) NODE0=${NODES[0]} NODE1=${NODES[1]}
2. 为每个mpiexec任务指定进程布局
利用Intel MPI的-host参数直接定义每个节点的进程数(格式:节点名:进程数),同时禁用PMI避免冲突:
第一个MPI任务(8进程,node0/4个,node1/4个)
# 禁用PMI,用SSH启动进程,强制指定节点进程数 mpiexec -bootstrap ssh -np 8 -host ${NODE0}:4,${NODE1}:4 ./your_first_mpi_program
此配置会严格在node0分配rank 0-3,node1分配rank 4-7。
第二个MPI任务(2进程,node0/1个,node1/1个)
mpiexec -bootstrap ssh -np 2 -host ${NODE0}:1,${NODE1}:1 ./your_second_mpi_program
此配置会在node0分配rank 0,node1分配rank 1。
3. 并行运行两个任务(可选)
如果需要两个任务同时执行,可将它们后台运行后等待完成:
mpiexec -bootstrap ssh -np 8 -host ${NODE0}:4,${NODE1}:4 ./your_first_mpi_program & mpiexec -bootstrap ssh -np 2 -host ${NODE0}:1,${NODE1}:1 ./your_second_mpi_program & wait
为什么之前的参数无效?
在SLURM环境下,Intel MPI默认会自动读取SLURM的节点分配信息,这会覆盖-ppn、I_MPI_PERHOST等手动设置的布局参数。而-host参数属于显式强制指定,优先级高于SLURM的自动分配逻辑,因此能精准控制进程分布。
内容的提问来源于stack exchange,提问作者dk619
相关产品推荐
相关产品推荐

