bsub 作业提交
busb 命令用于向 LSF 作业管理系统提交作业请求。 bsub 可接收的参数很多,通过指定不同的运行参数,可以精细地设定作业运行需求。
$ bsub -h 命令参数
-q 选择队列
-i 指定输入文件
-o 指定输出文件,作业提交后标准输出的信息会保存到这个文件中
-e 指定输出文件,作业提交后标准错误输出的信息保存到这个文件夹中.
-n 指定作业需要的CPU 核
-J 作业的名字
-m 丢job到指定的机器上
-I 交互式模式,此时终端不能输入
-Ip 提交job的时候提供虚拟terminal支持,如vim这种应用是需要terminal支持的.
-R 指定为当前任务的资源需求。
————————————————
1、直接输入完整参数提交
直接输入 bsub 完整参数,可以方便地提交单线程作业。 下面这条命令提交了一个需要一个 CPU 核运行的单线程作业:
$ bsub -n 1 -q cpu -o job.out ./myprog “-input data.txt”
主要参数说明如下:
- -n 指定所需的计算核心数。
- -q 指定作业运行的队列,在集群上可用的计算队列有 cpu、fat、gpu和 mic等。
- -o 指定作业运行信息的输出文件。
- ./myprog 是要提交运行的可执行文件,
- “-input data.txt”是传递给 myprog 的命令行参数。
当然,这种用法仅适用于简单的作业,更复杂的作业控制需要编写作业脚本,请参考下面“使用作业脚本提交”。
2、作业脚本提交
作业脚本是带有“bsub 格式”的纯文本文件。 作业脚本易于编辑和复用,是提交复杂作业的最佳形式。 下面是名为 job.script 的作业脚本的内容:
#BSUB -n 4
#BSUB -q cpu
#BSUB -o job.out
# input file is data.txt
./mytest “-input data.txt”
其中以#BSUB 开头的行表示 bsub 作业参数,其他#开头的行为注释行,其他行为脚本运行内容。作业脚本的使用方法很简单,只需要把脚本内容通过标准输入重定向给 busb:
$ bsub < job.script
以上脚本等价于如下命令:
$ bsub -n 1 -q cpu -o job.out ./mytest “-input data.txt”
bsub 默认会调用/bin/sh 执行脚本内容,因此可以使用 Shell 编程脚本对作业参
数进行处理和控制。 下面这个作业脚本提交了一个需要 64核心的 MPI计算任务。在下面名为 64core.script 的作业脚本会由 LSF 使用 bash 解释运行,需要使用64 个核心,且要求每个节点提供 16 个计算核心。
# 64core.script
#BSUB -L /bin/bash
#BSUB -J HELLO_MPI
#BSUB -n 64
#BSUB -e %J.err
#BSUB -o %J.out
#BSUB -R “span[ptile=16]”
#BSUB -q cpu
MODULEPATH=/lustre/utility/modulefiles:$MODULEPATH
module purge
module load openmpi/gcc/1.6.5
mpirun ./mpihello
用户在命令行下用 bsub 提交作业:
$ bsub < 64core.script
关于 MPI 程序和作业脚本的详细例子,请参考《并行程序示例》中的内容。
3、交互提交
键入 bsub 回车后,可进入 bsub 交互环境输入作业参数和作业程序。 bsub 交互环境的主要有点是可以一次提交多个参数相同的作业。例如:
$ bsub
bsub> -n 1
bsub> -q cpu
bsub> -o job.out
bsub> PROG1
bsub> PROG2
bsub> PROG3
bsub> CTRL+d
等价于提交了 PROG1、PROG2 和 PROG3 三个作业程序:
$ bsub -n 1 -q cpu -o job.out PROG1
$ bsub -n 1 -q cpu -o job.out PROG2
$ bsub -n 1 -q cpu -o job.out PROG3 指定作业运行的节点
在作业脚本中可以使用#BSUB -R “select[hname=HOSTNAME]”指定作业运行的节点。譬如:
# 16core.script
#BSUB -L /bin/bash
#BSUB -J HELLO_MPI
#BSUB -n 16
#BSUB -e %J.err
#BSUB -o %J.out
#BSUB -R “span[ptile=16]”
#BSUB -R “select[hname=mic02]”
#BSUB -q cpu
MODULEPATH=/lustre/utility/modulefiles:$MODULEPATH
module purge
module load openmpi/gcc/1.6.5
mpirun ./mpihello