我正在使用以下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个工作的最便捷方式是什么,而不是一个一个地提交?
目标是在群集上同时运行多个作业,不需要等待一个作业完成而不是再启动另一个作业。
提前致谢!
答案 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。
我对你的模型和日期参数做了一些假设。