You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Slurm的sbatch实现MPI Rank到指定节点的绑定

实现指定MPI Rank到节点的绑定配置

要搞定你这个MPI Rank绑定的需求(把Rank 0固定在node001,剩下7个Rank分配到node002-node004),有两种实用的方法,我给你详细拆解下:

方法一:直接通过sbatch + srun参数配置

这种方式不用额外创建配置文件,直接在sbatch脚本里就能搞定:

  1. 先写一个sbatch脚本(比如命名为mpi_bind_job.sh):
#!/bin/bash
#SBATCH --nodes=4
#SBATCH --nodelist=node001,node002,node003,node004
#SBATCH --ntasks=8
#SBATCH --cpus-per-task=1  # 这里根据你的任务实际CPU需求调整,不需要的话可以去掉

# 用srun的分段语法拆分Rank组:Rank0绑node001,其余绑剩下的节点
srun --rank 0 --nodelist=node001 ./your_mpi_program : \
     --rank 1-7 --nodelist=node002,node003,node004 ./your_mpi_program

参数说明:

  • --nodes=4和--nodelist明确指定要使用的4个目标节点
  • --ntasks=8声明总共有8个MPI任务(也就是8个Rank)
  • srun的:是分隔符,把不同Rank组的配置分开:
    • 第一组锁定Rank 0到node001
    • 第二组把Rank 1-7分配到node002-node004,MPI默认会均匀分配这7个Rank到三个节点(你要是想手动分配每个节点的Rank数,可以在第二组加--ntasks-per-node=3,2,2这样的参数,指定每个节点分别跑3、2、2个Rank)
  1. 提交脚本的命令:
sbatch mpi_bind_job.sh

方法二:使用MPI Rankfile文件做精细控制

如果需要更精准地指定每个Rank对应的节点(甚至绑定到具体CPU核心),可以用rankfile文件:

  1. 创建一个rankfile.txt,内容如下:
rank 0=node001 slot=0
rank 1=node002 slot=0
rank 2=node002 slot=1
rank 3=node002 slot=2
rank 4=node003 slot=0
rank 5=node003 slot=1
rank 6=node004 slot=0
rank 7=node004 slot=1

注:如果只需要绑定到节点而不用指定CPU核心,slot填0就行;要是需要绑定到具体核心,就把slot改成对应的核心编号。

  1. 编写sbatch脚本:
#!/bin/bash
#SBATCH --nodes=4
#SBATCH --nodelist=node001,node002,node003,node004
#SBATCH --ntasks=8

# 告诉MPI要使用我们的rankfile
export MPI_RANKFILE=./rankfile.txt
srun ./your_mpi_program
  1. 提交脚本:
sbatch mpi_bind_job.sh

一些额外提醒

  • 确保你的MPI实现(比如OpenMPI、MPICH)支持这些配置,不同版本的MPI参数可能有细微差异,OpenMPI对rankfile的支持是比较完善的
  • 如果需要把Rank绑定到具体CPU核心,可以在srun里加上--cpu-bind=core参数,结合rankfile里的slot来精准控制
  • 提交任务前,建议用sinfo命令确认node001-node004节点处于可用状态

内容的提问来源于stack exchange,提问作者Yoni4949

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:07:27