我希望您能帮助您了解是否有可能(如果可以的话)调整下面的bash文件。
我有一个主要的Matlab脚本main.m
,该脚本又调用了另一个Matlab脚本f.m
。
f.m
应该使用不同的输入多次执行。
我将其构造为数组作业。
我通常使用以下名为td.sh
的bash文件将阵列作业执行到我大学的HPC中
#$ -S /bin/bash
#$ -l h_vmem=5G
#$ -l tmem=5G
#$ -l h_rt=480:0:0
#$ -cwd
#$ -j y
#Run 237 tasks where each task has a different $SGE_TASK_ID ranging from 1 to 237
#$ -t 1-237
#$ -N mod
date
hostname
#Output the Task ID
echo "Task ID is $SGE_TASK_ID"
/share/[...]/matlab -nodisplay -nodesktop -nojvm -nosplash -r "main; ID = $SGE_TASK_ID; f; exit"
我在终端上所做的是
cd
到脚本main.m
,f.m
,td.sh
所在的文件夹
qsub td.sh
中输入
问题:我需要更改上面的bash文件,因为脚本f.m
调用了许可证为单节点单用户的求解器(Gurobi)。这是我被告知的:
” 此许可证已安装,仅在节点A
上有效。
由于作业必须在此节点上运行,因此您将无法qsub
编写脚本。
相反,您应该ssh
进入节点A
并直接在此节点上运行作业
提交给调度程序。 “
您能指导我了解一下如何更改上面的bash文件吗?特别是,我应该如何强制执行到节点A
中?
即使我只限于一个节点,我仍然能够使用数组作业并行化吗?还是根据定义,数组作业是在多个节点上执行的?
答案 0 :(得分:1)
如果无法使用调度程序,则无法使用其阵列作业。您将必须找到另一种并行处理这些作业的方法。根据定义,阵列作业不会在多个节点上执行(但是由于资源可用性,它们通常在多个节点上执行)。
关于脚本的改编,只需遵循系统管理员提供的指南即可:忘记SGE并直接通过ssh针对您被告知的节点启动演算:
date
hostname
for TASK_ID in {1..237}
do
#Output the Task ID
echo "Task ID is $TASK_ID"
ssh user@A "/share/[...]/matlab -nodisplay -nodesktop -nojvm -nosplash -r \"main; ID = $TASK_ID; f; exit\""
done
如果许可证是单节点和单用户(但同时执行多个),则可以尝试并行化演算。您将必须考虑节点A中的可用资源(CPU,内存的数量...)以及每次执行所需的资源,然后同时启动尽可能多的演算而不会使节点过载(否则)他们将花费更长的时间甚至失败)。