我希望您能帮助我了解是否可以(如果可以,如何(调整下面的bash文件。
我有一个主要的Matlab脚本main.m
,它反过来调用另一个Matlab脚本f.m
。
CCD_ 3应该用不同的输入执行多次。
我将其构造为数组作业。
我通常使用下面的名为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
?
即使我只限于一个节点,我仍然能够使用数组作业进行并行处理吗?或者阵列作业定义为在多个节点上执行?
如果不能使用调度程序,则不能使用其数组作业。您必须找到另一种方法来并行化这些作业。根据定义,阵列作业不会在多个节点上执行(但由于资源可用性,它们通常在多个结点上执行(。
关于脚本的改编,只需遵循系统管理员提供的指南:忘记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数量、内存…(以及每次执行所需的资源,然后在不使节点过载的情况下同时启动尽可能多的演算(否则会花费更长时间甚至失败(。