Slurm脚本在Thin节点运行Reduce基准测试失败求助
Slurm任务在Thin节点运行osu_reduce时异常终止排查
问题描述
运行以下Slurm脚本时,任务启动约4秒后即终止,既未生成包含测试数据的output_file,也未产生Slurm的输出/错误文件。该脚本在FAT节点(每节点36任务配置)可正常运行,Thin节点上执行osu-bcast算法也无问题,但Thin节点运行reduce时失败。集群规则为:任务数>24使用FAT节点,否则使用Thin节点,程序逻辑无明显问题,怀疑是Slurm或集群配置相关问题。
测试脚本
#!/bin/bash #SBATCH --job-name=reduce_thin_benchmark #SBATCH --nodes=2 #SBATCH --ntasks-per-node=24 #SBATCH --time=02:00:00 #SBATCH --partition=THIN #SBATCH --exclusive module load openMPI/5.0.5 # or alternative version collective_path="../benchmark/osu-micro-benchmarks-7.5.1/libexec/osu-micro-benchmarks/mpi/collective" reduce_path="$collective_path/osu_reduce" output_file="../results/reduce_thin.csv" # Header for CSV file echo "Algorithm,Processes,Size,AvgLatency,MinLatency,MaxLatency,Iter,Q25,Q50,Q75,Q90,Q95" > $output_file # Algorithms to be tested declare -A algorithms algorithms[0]="default" warmup=1000 repetitions=1000 min_processes=2 max_processes=48 for alg in "${!algorithms[@]}" do for ((processes=$min_processes; processes<=$max_processes; processes+=2)) do # Execute osu_bcast with varying number of processes # printf " info = $alg, $processes" mpirun --map-by core -np $processes \ $reduce_path \ -f -i $repetitions -x $warmup -z25,50,75,90,95 \ | grep -v '^#' | sed '/^\s*$/d' \ | while IFS= read -r line do csv_line=$(echo "$line" | tr -s '[:space:]' ',') echo "${algorithms[$alg]},$processes,$csv_line" >> "$output_file" done done done
排查步骤
- 强制生成Slurm日志:在SBATCH参数中添加
#SBATCH --output=slurm-%j.out和#SBATCH --error=slurm-%j.err,强制捕获任务运行的日志信息,哪怕快速失败也能定位错误点。 - 调整MPI启动方式:
- 替换
mpirun为Slurm原生的srun,改为srun -n $processes $reduce_path ...,Slurm环境下srun更适配集群资源调度。 - 去除或调整
--map-by core参数,Thin节点的CPU核心布局可能与FAT节点不同,尝试--map-by node或默认绑定规则。
- 替换
- 验证可执行文件路径:登录Thin节点,手动检查
$reduce_path指向的文件是否存在、是否有执行权限,确认共享存储在Thin节点上正常挂载。 - 缩小测试范围:将
max_processes改为2,仅测试最小进程数的场景,确认是特定进程数阈值导致失败,还是所有进程数都无法运行。 - 核对MPI环境一致性:在Thin节点执行
module list和mpirun --version,确认加载的OpenMPI版本与FAT节点完全一致,避免版本兼容性问题。 - 添加调试输出:在脚本关键位置增加调试信息,比如:
确认脚本执行流程是否符合预期。echo "当前节点: $(hostname)" echo "测试进程数: $processes" echo "osu_reduce路径: $reduce_path" echo "输出文件路径: $output_file" - 查看任务退出状态:用
sacct -j <任务ID> --format=JobID,Elapsed,State,ExitCode查询任务退出码,非0退出码可指示错误类型。 - 验证基础MPI通信:在Thin节点运行简单的MPI HelloWorld程序,确认多节点间MPI通信链路正常,排除网络或集群MPI基础配置问题。
内容的提问来源于stack exchange,提问作者andreg
相关产品推荐
相关产品推荐

