我使用下面的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)
在这个函数中,模型将有四个备选方案,day将有200个备选方案,这意味着我有4X400=800个作业要提交到集群,每个作业将运行大约16个小时。
提交800份工作最方便的方法是什么,而不是一个接一个提交?
目标是使多个作业可以同时在集群上运行,不需要等待一个作业完成而不是启动另一个作业。
提前感谢!
发布于 2015-12-17 16:26:19
我的建议是从脚本中删除对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
发布于 2015-12-18 02:11:37
您可以尝试使用作业阵列。对数组索引进行分解,得到模型和日参数。就像这样:
#!/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.
我在对你的模型和日参数做一些假设。
https://stackoverflow.com/questions/34326718
复制相似问题