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

SLURM批处理作业中Python调用mpirun子进程失败求助

问题:SLURM批处理中Python调用mpirun子进程失败

原实现代码

Python脚本(script.py)

import subprocess
def run_mpi(config_name, np, working_dir):

    data_path = working_dir + "/" + config_name 
    subprocess.run(
       [
          "mpirun -np "
          + np
          + " "
          + working_dir
          + "/spk_mpi -echo log < "
          + data_path
          + "/in.potts"
        ],
     # mpirun -np 32 spk_mpi -echo log < /$PATH/in.potts
     check=True,
     stderr=subprocess.PIPE,
     universal_newlines=True,
     stdout=subprocess.PIPE,
     shell=True,
    )

SLURM批处理脚本

#!/bin/bash
#SBATCH --job-name=myjob            
#SBATCH --nodes=1
#SBATCH --ntasks=32
#SBATCH --time=2-00:00:00               # Time limit hrs:min:sec
#SBATCH --partition=thin

python script.py --working_dir=$PATH --np=$SLURM_NTASKS

遇到的问题

  • 子进程始终未执行;
  • 将shell=True改为shell=False时,出现返回非零退出状态1的错误;
  • 交互式通过salloc分配资源后执行则能正常运行,推测是子进程未正确继承SLURM配置变量导致无法并行。

最终解决方法

直接在批处理文件中调用mpirun,通过读取config_file中的路径处理输入,代码如下:

#SBATCH --ntasks=32

while IFS= read -r line; do
    path="$(echo -e "${line}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"

    echo "Processing: $path/in.potts_am_IN100_3d"
    mpirun -np 32 ${SPPARKS}/spk_mpi -echo log < ${SPPARKS}/${path}/in.potts

done < "$config_file"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 00:48:19