2

我正在使用以下 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)

在这个函数中,model将有 4 个备选方案,而day将有 200 个备选方案,这意味着我有 4 X 400 = 800 个作业要提交到集群,每个作业将运行大约 16 个小时。

提交800个职位最方便的方法是什么,而不是一一提交?

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

提前致谢!

4

2 回答 2

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
于 2015-12-17T16:26:19.357 回答
1

您可以尝试使用作业数组。分解数组索引得到模型和天参数。像这样的东西:

#!/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。

我正在对您的模型和日期参数进行一些假设。

于 2015-12-18T02:11:37.787 回答