在基于 linux 的集群上调用 Matlab:matlab 会话在我的文件完全执行之前停止

Calling Matlab on a linux based Cluster: matlab sessions stops before m file is completly executed

我是 运行 一个 bash 脚本,它多次在基于 Linux 的集群上提交一些 pbs 作业。每个提交调用 Matlab,读取一些数据,执行计算,并将结果写回我的目录。

这个过程没有任何异常。对于某些计算,m 文件开始,加载所有内容,然后执行计算,但在将结果打印到标准输出时,作业终止。

pbs的日志文件没有显示错误信息,matlab没有显示错误信息。 代码在我的电脑上完美运行。我没主意了。

如果有人知道我能做什么,我将不胜感激。

提前致谢 错误

编辑: 是否有可能强制 matlab 到达文件末尾?有帮助吗?

编辑@18:00: 正如 HBHB 在下面的评论中所要求的,这里是显示外部 *.sh 文件如何调用 matlab 的评论

#PBS -l nodes=1:ppn=2 
#PBS -l pmem=1gb 
#PBS -l mem=1gb 
#PBS -l walltime=00:05:00 
module load MATLAB/R2015b 
cd $PBS_O_WORKDIR 

matlab -nosplash -nodisplay -nojvm -r "addpath('./data/calc');myFunc("$a","$b"),quit()" 

其中 $a 和 $b 来自调用方 bash 文件中的循环,并且 ./data/calc 指向 myFunction 所在的目录

编辑@18:34:如果我手动执行计算,那么一切都运行良好。所以给定的数据很好,似乎缩小到 pbs?

编辑 @21:27 我在 matlab 调用周围放置了一个 until 循环,检查 matlab Returns 是否需要所需的数据。如果没有,它应该在一段时间后重新启动 matlab。但仍然。 matlab 在完成计算后停止,同时打印结果(一些矩阵),甚至作业完成。永远不会到达重启的检查部分。

我不明白。作业留在队列中,就像我计划的那样,稍有延迟。所以 sleep$w 会被执行吗?但是如果我检查错误文件,它只会向我显示第一轮冻结的 matlab,可被 i 识别。这是那部分代码。也许你可以帮助我

#w=w wait
i=1
until [[ -e ./temp/$b/As$a && -e ./temp/$b/Bs$a && -e ./temp/$b/Cs$a && -e ./temp/$b/lamb$a ]]
do
echo $i
  matlab -nosplash -nodisplay -nojvm -r "addpath('./data/calc');myFunc("$a","$b"),quit()"
  sleep $w
((i=i+1))
done

您很可能因为内存有限而阻塞了您的 matlab 进程。您的 PBS 文件:

#PBS -l nodes=1:ppn=2 
#PBS -l pmem=1gb 
#PBS -l mem=1gb 
#PBS -l walltime=00:05:00

您正在将物理内存设置为 1GB。没有任何文件的 Matlab 运行大约 900MB 的虚拟内存。尝试:

#PBS -l nodes=1:ppn=1
#PBS -l pvmem=5gb
#PBS -l walltime=00:05:00

此外,这是您应该联系本地系统管理员的事情。没有系统日志,我无法确定地告诉你为什么你的工作被缩短了(但我猜是资源限制)。作为 HPC 中心的 SA,我可以告诉您,他们可以在大约 5 分钟内告诉您您的工作无法正常工作的原因。此外,不同的 HPC 中心使用不同的 PBS 配置。所以 mem 甚至可能无法识别;这是您的本地管理员可以比 Whosebug 更好地帮助您的事情。