BSUB很多matlab工作到一个集群?

时间:2015-12-17 04:38:34

标签: linux bash matlab cluster-computing lsf

我正在使用以下bash文件将matlab作业提交到群集

#!/bin/bash
#BSUB -L /bin/bash
#BSUB -J matlab.01
#BSUB -q long
#BSUB -n 32
#BSUB -R "span[hosts=1]"
#BSUB -W 20:00
#BSUB -R "rusage[mem=3072]"

#BSUB -o %J.out
#BSUB -e %J.err

# the working directory
work=/home/models
cd $work

# run matlab on the main function
matlab -logfile ./output.txt -nodisplay -r "foo('model', day);"

假设文件名是mat.bash,那么我使用命令

bsub < mat.bash 

将一个作业提交到群集。 bash文件中的最后一行包含一个函数

fool(model, day)

在此功能中, 模型 将有四种选择, 将有200个替代方案,这意味着我有4 X 400 = 800个作业要提交到群集,每个作业将运行大约16个小时。

提交800个工作的最便捷方式是什么,而不是一个一个地提交?

目标是在群集上同时运行多个作业,不需要等待一个作业完成而不是再启动另一个作业。

提前致谢!

2 个答案:

答案 0 :(得分:1)

我的建议是从脚本中删除对matlab的实际调用,然后编写一个单独的脚本来迭代'model'和'day'的可能值,附加相应的matlab调用,并为你提交每个作业

类似的东西:

#!/bin/sh

for model in one two three four
do
    for day in `seq 200`
    do  
        cp mat.bash mat.bash.$model.$day
        echo "matlab -logfile ./output.txt -nodisplay -r \"foo('$model', $day);\"" >> mat.bash.$model.$day
        bsub < mat.bash.$model.$day
        rm mat.bash.$model.$day
    done
done

答案 1 :(得分:1)

您可以尝试使用job array。分解数组索引以获取模型和日期参数。像这样:

#!/bin/bash
#BSUB -L /bin/bash
#BSUB -J matlab.01[1-6]
#BSUB -R "span[hosts=1]"

#BSUB -o %J-%I.out
#BSUB -e %J-%I.err

PARAM1=$(((LSB_JOBINDEX-1)%2))
PARAM2=$(((LSB_JOBINDEX-1)/2))
echo "PARAM1=$PARAM1"
echo "PARAM2=$PARAM2"

然后您可以使用单个bsub提交所有作业

bsub < testit.bash

这将运行6个作业,PARAM1的范围为0-1,PARAM2的范围为0-2。

我对你的模型和日期参数做了一些假设。