我想请您帮助了解是否可以(如果可以的话)调整下面的 bash 文件。
我有一个主要的 Matlab 脚本main.m
,它又调用另一个 Matlab 脚本f.m
。
f.m
应该使用不同的输入执行多次。
我将其构建为一个数组作业。
我通常使用以下调用的 bash 文件td.sh
将数组作业执行到我大学的 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 文件吗?特别是,我应该如何强制执行到 node 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
如果license是单节点单用户(但是多个同时执行),可以尝试并行演算。您必须考虑节点 A 中可用的资源(CPU 数量、内存...)以及每次执行所需的资源,然后同时启动尽可能多的演算,而不会使节点过载(否则他们将需要更长时间甚至失败)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句