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

通过qsub提交Batch脚本时openmpi模块加载失败的问题求助

解决qsub提交VASP作业时mpirun需加载openmpi模块的问题

核心问题分析

通过qsub提交VASP作业时,计算节点报错要求加载openmpi模块,但直接登录计算节点执行脚本却能正常运行,核心原因通常是调度器作业环境与计算节点登录环境的差异,或脚本中调度指令的位置错误。

排查与解决步骤

1. 调整SGE调度指令的位置

SGE(Sun Grid Engine)要求所有#$开头的调度指令必须放在脚本的最开头区域(shebang之后,任何实际执行命令之前)。你的脚本将模块加载命令放在了调度指令之前,会导致调度器无法正确解析指令,同时可能干扰作业启动的环境初始化。

修正后的脚本结构:

#!/bin/bash
#$ -P cmdlab
#$ -N vasp_test
#$ -l h_rt=48:00:00
#$ -pe mpi_32_tasks_per_node 256

NSLOTS=256
vasp_ver=vasp_std

export OMP_NUM_THREADS=1
export OMP_PLACES=cores
export OMP_PROC_BIND=close

module purge
module use /project/cmdlab/software/modules
module load intel/2021.1
module load vasp/6.3.2

mpirun -np ${NSLOTS} --map-by ppr:16:socket:PE=1 --bind-to core -v ${vasp_ver}

2. 检查VASP模块的依赖配置

直接登录计算节点时能正常运行,可能是因为登录环境中存在残留的模块或环境变量,但调度器启动的作业是干净的初始化环境。需要确认vasp/6.3.2模块是否正确关联了兼容的openmpi版本:

  • 在登录节点执行module show vasp/6.3.2,查看模块配置中是否包含自动加载openmpi的指令(如module load openmpi/xxx),或通过prereq声明了MPI依赖。
  • 如果模块未配置自动依赖,需在脚本中手动添加module load openmpi/对应版本(注意版本需与intel/2021.1兼容)。

3. 验证作业环境的差异

在脚本中添加环境检查命令,对比调度器作业环境与计算节点登录环境的差异:

# 添加到模块加载之后、mpirun之前
echo "Loaded modules:"
module list
echo "Current PATH:"
echo $PATH
echo "MPI installation path:"
which mpirun

提交作业后查看输出文件,对比直接登录计算节点时的module list和环境变量,确认是否存在模块未加载或路径未覆盖的情况。

4. 指定mpirun的绝对路径

如果报错是因为调度器环境中默认的mpirun是系统提示脚本而非实际MPI二进制文件,可直接使用绝对路径调用:

  • 直接登录计算节点执行which mpirun,获取正确的路径(如/project/cmdlab/software/openmpi/4.1.1/bin/mpirun)。
  • 在脚本中替换mpirun为该绝对路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:57:31