集群使用作业调度系统管理所有计算作业,该系统接受用户的作业请求,并将作业合理的分配到合适的节点上运行,因此所有用户均应通过作业调度系统提交计算作业,不可直接在任何节点上直接运行。用户使用bsub命令向作业调度系统提交作业,bsub可用参数非常繁多,可对作业进行非常细致的控制,这里简要介绍常用参数和方法。

  关于队列请详细阅读计算资源

bsub 使用方式

命令行方式

bsub [options] command [arguments]

[options]为bsub的参数,可以设定队列、cpu core数等
command为计算程序,如果是MPI并行程序需要使用mpirun启动
[arguments]为计算程序的参数

例:提交一个作业到e5v3ib队列,需要24核的MPI并行程序

[yaoge123]$ bsub -q e5v3ib -n 24 mpirun ./app
Job <3206000> is submitted to queue <e5v3ib>.

脚本方式

bsub < jobfile

jobfile 为作业的shell脚本文件,文件名任意且不需要运行权限,脚本内容如下:
#BSUB [options]
command [arguments]
脚本中以#BSUB开头的行后跟bsub的参数,其它行为作业运行脚本

例:提交一个作业到e5v3ib队列,需要48核,需要大内存节点,作业名为MgSiO3,标准输出文件为out,标准错误输出文件为err,Intel MPI的并行程序app

[yaoge123]$ cat job.lsf 
#BSUB -q e5v3ib
#BSUB -n 48
#BSUB -J MgSiO3
#BSUB -o out
#BSUB -e err
module load ips/2018u4
mpirun ./app

[yaoge123]$ bsub < job.lsf 
Job <3207099> is submitted to queue <e5v3ib>.

等价如下命令行方式

[yaoge123]$ bsub -q e5v3ib -n 48 -J MgSiO3 -o out -e err "module load ips/2018u4;mpirun ./app"
Job <3207099> is submitted to queue <e5v3ib>.

bsub 常用参数

  • -n min_proc[,max_proc]:作业需要CPU核数;例:需要四核 -n 4;-n 4,8, 需要4~8核均可
  • -J job_name:作业名称
  • -I:交互式作业,可在作业运行期间和程序进行交互(如输入参数等),可在调试期间使用,正常计算请勿使用
  • -m:作业运行的节点或节点组,多个节点写在双引号内并用空格分隔,节点组对应的具体节点可用bmgroup命令查看,此参数很复杂。在hostname/hostgroup前后可用这些符号:后加!指定头结点、后加+[num]指定节点使用顺序、前加~指定不使用这个节点。例:指定在c04n01和c04n02运行 -m "c04n01 c04n02";指定可在f01n01~n03,但是最希望在f01n01、次希望在f01n02 -m "f01n01+2 f01n02+1 f01n03";
  • -R "res_req":资源请求串,此参数非常复杂;例:有的队列某些节点内存较大,需要大内存节点可以指定-R largemem
  • -W [hour:]minute:作业运行最长时间,超过这个时间则被kill
  • -x:作业需要独占节点,无论申请多少核,作业均独占所运行的节点,只有!队列支持此参数
  • -K:等待作业执行完才返回
  • -i input_file:标准输入文件
  • -o output_file:标准输出文件
  • -e error_file:标准错误输出文件
  • 以上三个参数的文件名中可以包含%J用于表示JOBID。如果没有用-o或-oo指定标准输出文件,那么系统会自动设定为output_%J;如不想要输出文件请设置 -o /dev/null

作业脚本示例

串行作业

  提交一个串行作业到e52660队列,命令行方式和脚本方式分别为:

[yaoge123]$ bsub -q e52660 ./app
Job <3279929> is submitted to queue <e52660>.
[yaoge123]$ cat job.lsf 
#BSUB -q e52660
./app

[yaoge123]$ bsub < job.lsf 
Job <3279930> is submitted to queue <e52660>.

MPI并行作业

  注意:MPI程序需要使用mpirun启动

  提交一个需要48核的Intel MPI并行作业到e5v3ib,命令行方式为:

[yaoge123]$ bsub -q e5v3ib -n 48 "module load ips/2018u4;mpirun ./app"
Job <3280120> is submitted to queue <e5v3ib>.

  提交一个需要48核的Open MPI并行作业到e5v3ib,脚本方式为:

[yaoge123]$ cat job.lsf 
#BSUB -q e5v3ib
#BSUB -n 48
module load iccifort/15.0.3 imkl/11.2.3 openmpi/1.10.0-iccifort-15.0.3
mpirun ./app

[yaoge123]$ bsub < job.lsf 
Job <3280122> is submitted to queue <e5v3ib>.

 OpenMP并行作业

  注意:OpenMP不能跨节点,因此-n不能指定超过一个节点CPU Cores的数量

  提交一个需要64核的OpenMP并行作业到e7v4ib,使用程序参数-nt指定线程数量,命令行方式为:

[yaoge123]$ bsub -q e7v4ib -n 64 "./app-nt \$LSB_DJOB_NUMPROC"
Job <3348175> is submitted to queue <e7v4ib>.

  提交一个需要64核的OpenMP并行作业到e7v4ib,使用环境变量OMP_NUM_THREADS指定线程数量,脚本方式为:

[yaoge123]$ cat job.lsf 
#BSUB -q e7v4ib
#BSUB -n 64
OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"
./app

[yaoge123]$ bsub < job.lsf 
Job <3348182> is submitted to queue <e7v4ib>.

MPI-OpenMP 混合并行作业

  请参看MPI-OpenMP作业

海量作业

  请参看海量作业