如何调整bash文件以在单个节点上执行

时间:2018-12-05 11:09:34

标签: bash matlab

我希望您能帮助您了解是否有可能(如果可以的话)调整下面的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.mf.mtd.sh所在的文件夹

  • 在终端qsub td.sh

    中输入

问题:我需要更改上面的bash文件,因为脚本f.m调用了许可证为单节点单用户的求解器(Gurobi)。这是我被告知的:

此许可证已安装,仅在节点A上有效。 由于作业必须在此节点上运行,因此您将无法qsub编写脚本。 相反,您应该ssh进入节点A并直接在此节点上运行作业 提交给调度程序。 “

您能指导我了解一下如何更改上面的bash文件吗?特别是,我应该如何强制执行到节点A中?

即使我只限于一个节点,我仍然能够使用数组作业并行化吗?还是根据定义,数组作业是在多个节点上执行的?

1 个答案:

答案 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,内存的数量...)以及每次执行所需的资源,然后同时启动尽可能多的演算而不会使节点过载(否则)他们将花费更长的时间甚至失败)。