Linux下Sbatch提交Srun作业输出数据重复的脚本修正求助
问题解决:Slurm srun提交VASP作业输出重复修复方案
问题根因
- Intel MPI未正确对接Slurm的PMI接口,每个MPI进程启动时独立打印报错信息
- 默认配置下所有MPI进程都会向标准输出写入内容,多进程输出叠加导致日志重复
- 未限制VASP仅主进程(rank 0)打印计算日志
修复步骤
1. 配置Intel MPI与Slurm的对接
先在集群计算节点执行find / -name "libpmi2.so" 2>/dev/null确认PMI库路径,绝大多数集群通用默认路径为/usr/lib64/slurm/libpmi2.so,配置后即可消除PMI相关报错。
2. 限制仅主进程输出
设置Intel MPI环境变量,仅允许rank 0进程打印标准输出与标准错误,直接解决多进程重复输出问题。
可选优化
如果使用VASP 5.4及以上版本,可在INCAR中添加NWRITE = 1进一步减少冗余日志输出,不需要修改源码即可生效。
修改后的完整提交脚本
#!/bin/bash #SBATCH --partition=short #SBATCH --job-name="vasp" #SBATCH --nodes=2 #SBATCH --time=24:00:00 #SBATCH --constraint=ib #SBATCH --exclusive #SBATCH --err=std.err #SBATCH --output=std.out #----------------------------------------------------------# export OMP_NUM_THREADS=1 # 新增:配置Intel MPI对接Slurm PMI接口,路径请根据集群实际情况调整 export I_MPI_PMI_LIBRARY=/usr/lib64/slurm/libpmi2.so # 新增:限制仅rank 0进程输出标准流 export I_MPI_HYDRA_PRINT_RANK=0 #----------------------------------------------------------# echo "The job ${SLURM_JOB_ID} is running on ${SLURM_JOB_NODELIST}" #----------------------------------------------------------# source /shared/centos7/intel/oneapi/2021.1_u9-base/setvars.sh # 若仍有PMI报错可在srun参数中添加--mpi=pmi2 srun --ntasks=40 --hint=nomultithread --ntasks-per-node=20 --ntasks-per-socket=2 --ntasks-per-core=1 --mem-bind=v,local /work/bin/v_c
验证说明
提交作业后查看std.out,只会保留单份计算日志,PMI启动报错也会同步消失。如果你的集群使用PMI v1而非v2,将libpmi2.so替换为libpmi.so即可。
内容的提问来源于stack exchange,提问作者Kieran
相关产品推荐
相关产品推荐

