如何通过sbatch提交节点间每节点rank数不同的SLURM作业?
实现SLURM集群混合节点rank配置的两种方案
方案一:单作业内分批次启动任务(推荐)
在sbatch脚本中先申请全部36个节点,再通过srun的节点筛选参数分别启动两组不同rank密度的任务:
- 编写sbatch脚本(示例命名为
mixed_rank_job.sh):
#!/bin/bash #SBATCH --nodes=36 #SBATCH --job-name=mixed-rank-job #SBATCH --time=01:00:00 # 针对前24个节点,每节点启动4个rank srun --nodes=1-24 --ntasks-per-node=4 --exclusive your_mpi_executable --task-args-group1 & # 针对后12个节点(节点25-36),每节点启动1个rank srun --nodes=25-36 --ntasks-per-node=1 --exclusive your_mpi_executable --task-args-group2 & wait
--exclusive参数确保每组任务独占对应节点,避免资源冲突&让两组任务并行启动,wait用于等待所有任务执行完成
- 提交作业:
sbatch mixed_rank_job.sh
方案二:通过作业依赖提交两组关联作业
若需要更精细化的资源管控,可将两组任务拆分为两个独立作业,通过依赖关系确保同时运行:
- 提交第一组作业(24节点,每节点4rank):
sbatch --nodes=24 --ntasks-per-node=4 --job-name=rank-group1 your_mpi_script.sh
记录该作业的ID(示例记为JOBID1)
- 提交第二组作业(12节点,每节点1rank),设置依赖于第一组作业启动:
sbatch --nodes=12 --ntasks-per-node=1 --job-name=rank-group2 --dependency=afterany:JOBID1 your_mpi_script.sh
--dependency=afterany:JOBID1确保第二组作业在第一组启动后再分配资源,保证两组节点同时可用
关键注意事项
- 确认你的MPI实现支持跨不同rank密度的节点运行,部分MPI可能需要额外配置参数
- 若节点存在硬件差异,可结合
--constraint参数筛选匹配的节点(例如--constraint="xeon") - 使用
scontrol show job <JOBID>命令查看作业的节点分配详情,验证rank配置是否符合预期
内容的提问来源于stack exchange,提问作者TheGitPuller
相关产品推荐
相关产品推荐

