PBS 脚本中的 mpirun 命令后无法执行 GNUPlot

GNUPlot cannot be executed after mpirun command in PBS script

我有类似这样的 PBS 命令

#PBS -N marcell_single_cell
#PBS -l nodes=1:ppn=1
#PBS -l walltime=20000:00:00
#PBS -e stderr.log
#PBS -o stdout.log
# Specific the shell types
#PBS -S /bin/bash
# Specific the queue type
#PBS -q dque

#uncomment this if you want to debug the process
#set -vx

cd $PBS_O_WORKDIR

ulimit -s unlimited

NPROCS=`wc -l < $PBS_NODEFILE`

#export PATH=$PBS_O_PATH

echo This job has allocated $NPROCS nodes
echo Cleaning old files...
rm -rf *.png *.plt *.log
echo Cleaning success
/opt/Lib/openmpi-2.1.3/bin/mpirun -np $NPROCS  /scratch4/marcell/CellMLSimulator/bin/CellMLSimulator -ionmodel grandi2010 -solverType CVode  -irepeat 4 -dt 0.01
gnuplot -p plotting.gnu

PBS 错误日志抛出了类似这样的错误。

/var/spool/torque/mom_priv/jobs/6265.node01.SC: line 28: gnuplot: command not found

我已经确定GNUPlot的路径已经添加到PATH环境变量中了。

然而,奇怪的是,如果我交换命令的顺序,比如先gnuplot再mpi运行,没有任何错误。我怀疑 mpi运行 之后的某些命令需要一些特殊配置,但我不知道该怎么做

已经按照此解决方案,但无济于事。

sleep command not found in torque pbs but works in shell

已编辑:

mpi运行前后好像还是报错了。这是哪个结果:

which: no gnuplot in (/opt/intel/composer_xe_2011_sp1.9.293/bin/intel64:/opt/intel/composer_xe_2011_sp1.9.293/bin/intel64:/opt/pgi/linux86-64/9.0-4/bin:/opt/openmpi/bin:/usr/kerberos/bin:/prog/tools/grace/grace/bin:/home/prog/ansys_inc/v121/fluent/bin:/bin:/usr/bin:/opt/intel/composer_xe_2011_sp1.9.293/mpirt/bin/intel64:/opt/intel/composer_xe_2011_sp1.9.293/mpirt/bin/intel64:/scratch7/feber/jdk1.8.0_101:/scratch7/feber/code/apache-maven/bin:/usr/local/bin:/scratch7/cml/bin) 

这很奇怪,因为当我试图找到 gnuplot 时,/usr/local/bin

中有一个
ls -l /usr/local/bin/gnuplot 
-rwxr-xr-x 1 root root 3262113 Sep 18 2017 /usr/local/bin/gnuplot

此外,如果我 运行 那些没有 PBS 的命令,它似乎按我预期的那样执行:

/scratch4/marcell/CellMLSimulator/bin/CellMLSimulator -ionmodel grandi2010 -solverType CVode  -irepeat 4 -dt 0.01
gnuplot -p plotting.gnu

很可能您的系统有不同的 "login/head nodes" 和 "compute nodes"。这是许多超级计算集群中常用的做法。当您从头节点构建和启动应用程序时,它会在一个或多个计算节点上执行。

与头节点相比,计算节点可以具有不同的硬件和软件。在您的情况下,gnuplot 仅安装在头节点上,您可以从 which gnuplot 的不同输出中看到这一点。要解决这个问题,您可以采用三种方法:

  1. 请求系统管理员在计算节点上安装gnuplot。

  2. 在可从计算节点访问的文件系统中构建并安装您自己的 gnuplot 版本。它可以是您的主目录或其他地方,具体取决于您的集群。通常,您的应用程序所在的文件系统将可用。在您的情况下,/scratch4/marcell/ 以下的任何地方都可能有效。

  3. 运行 MPI 作业完成后头节点上的 gnuplot 作为 post 处理步骤。 PBS/Torque 没有提供直接的方法来做到这一点。您需要编写一个单独的 bash(不是 PBS)脚本来执行此操作。