跳到主要内容

bsub

介绍

bsub用于提交作业到FSCHED集群,兼容LSF命令行接口。支持批处理作业和交互式作业提交,提供丰富的资源管理和调度选项。


参数说明

IO与工作目录

参数是否需要值格式说明功能描述
-cwd路径字符串指定作业的工作目录。支持相对路径和绝对路径。
-i文件路径从指定文件读取作业的标准输入。
-o文件路径(支持%J%I占位符)将标准输出追加到指定文件。
-oo文件路径(支持%J%I占位符)将标准输出覆盖写入到指定文件。
-e文件路径(支持%J%I占位符)将标准错误追加到指定文件。
-eo文件路径(支持%J%I占位符)将标准错误覆盖写入到指定文件。
占位符说明
  • %J - 作业ID(在FSCHED中自动转换为%A)
  • %I - 数组任务索引(在FSCHED中自动转换为%a)

资源分配

参数是否需要值格式说明功能描述
-nmin_tasks[,max_tasks]指定作业的任务数量。可指定最小值或最小/最大范围。
-m主机名列表(空格分隔)指定作业运行的主机节点。
-R资源需求表达式指定资源需求,支持spanrusage[mem=...]rusage[tmp=...]
-x独占模式,作业独占所分配的节点。
-gpunumber[/mode][/j_exclusive][/mps]指定GPU资源需求。
资源表达式说明

-R选项支持以下格式:

  • span[hosts=N] - 跨N个主机分配
  • span[ptile=N] - 每个主机分配N个任务
  • rusage[mem=SIZE] - 内存需求(如rusage[mem=4G])
  • rusage[tmp=SIZE] - 临时空间需求(如rusage[tmp=10G])

进程资源限制(ulimit)

参数是否需要值格式说明功能描述
-M内存大小(MB)设置每进程内存限制(ulimit -m)。
-C大小或unlimited设置core文件大小限制(ulimit -c)。
-c时间(毫秒)设置CPU时间限制(ulimit -t)。
-D大小或unlimited设置数据段大小限制(ulimit -d)。
-F大小或unlimited设置文件大小限制(ulimit -f)。
-S大小或unlimited设置栈大小限制(ulimit -s)。
-v大小或unlimited设置虚拟内存限制(ulimit -v)。
-p数量或unlimited设置进程数限制(ulimit -u)。
-T数量设置线程数限制。
-ul继承当前shell的资源限制。

时间与调度

参数是否需要值格式说明功能描述
-W[hour:]minute设置作业运行时间限制。如2:30表示2小时30分钟。
-b日期时间字符串设置作业最早开始时间。
-t日期时间字符串设置作业终止截止时间。
-w依赖表达式设置作业依赖关系。支持done()ended()exit()started()
-H提交后将作业置于挂起状态。
-ti启用孤儿作业自动终止机制。
依赖表达式示例
  • done(12345) - 等待作业12345成功完成
  • ended(12345) - 等待作业12345结束(无论成功或失败)
  • exit(12345,0) - 等待作业12345以退出码0结束
  • started(12345) - 等待作业12345开始运行

作业属性

参数是否需要值格式说明功能描述
-Jjobname[index_list]指定作业名称。支持数组作业,如myjob[1-10]
-Jd描述文本指定作业描述信息。
-q队列名称指定提交队列。
-P项目名称指定作业所属项目。
-G用户组名称指定公平调度组。
-sp优先级(0-100)设置用户指定的作业优先级,数值越大优先级越高。
-r启用作业失败自动重试。
-rn禁用作业失败自动重试。

交互式作业

参数是否需要值格式说明功能描述
-I提交交互式作业,直接转发输入输出。
-Is提交带伪终端和shell的交互式作业。
-Ip提交带伪终端的交互式作业,支持终端控制符。
-IX提交X11图形界面交互式作业。
-Lshell路径(绝对路径)指定登录shell。
-tty在屏幕上显示作业输出和错误信息。
互斥选项

-I-Is-Ip-IX选项互斥,只能使用其中一个。

执行命令

参数是否需要值格式说明功能描述
-E命令字符串在作业执行前运行的预执行命令。
-Ep命令字符串在作业结束后运行的后执行命令。

环境变量控制

参数是否需要值格式说明功能描述
-env环境变量规范控制环境变量传播。支持allnone、选择性传播等模式。
环境变量规范格式
  • all - 传播所有环境变量(默认)
  • none - 不传播任何环境变量
  • VAR1,VAR2 - 仅传播指定变量
  • ~VAR1,~VAR2 - 排除指定变量
  • VAR=value - 设置变量值
  • 可组合使用,如all,~TMPDIR,MYVAR=newvalue

通知

参数是否需要值格式说明功能描述
-B作业开始时发送邮件通知。
-N作业结束时发送邮件通知。
-Ne作业退出时发送邮件通知。
-u邮件地址指定邮件接收地址(当前未完全实现)。

其他

参数是否需要值格式说明功能描述
-K等待作业完成并返回退出码。仅用于批处理作业。
-V打印版本信息并退出。
选项限制

-K选项仅适用于批处理作业,与交互式选项(-I-Is-Ip-IX)互斥。


使用示例

基本作业提交

# 提交简单的批处理作业
bsub ./myjob.sh

# 提交作业并指定名称
bsub -J myjob ./run.sh

# 提交数组作业
bsub -J "arrayjob[1-10]" ./process.sh

资源分配

# 指定任务数和运行时间
bsub -n 8 -W 2:30 ./parallel_job.sh

# 指定内存和临时空间需求
bsub -R "rusage[mem=4G,tmp=10G]" ./data_process.sh

# 跨多个节点分配
bsub -n 16 -R "span[hosts=4]" ./mpi_job.sh

# 指定GPU资源
bsub -gpu 2 ./gpu_task.sh

进程限制

# 设置内存和CPU时间限制
bsub -M 2048 -c 3600000 ./limited_job.sh

# 设置多种资源限制
bsub -M 4096 -S 102400 -F 1048576 ./constrained_job.sh

# 继承当前shell的资源限制
bsub -ul ./inherit_limits.sh

输入输出重定向

# 重定向输出到文件
bsub -o output.%J.log -e error.%J.log ./task.sh

# 覆盖写入输出文件
bsub -oo output.log -eo error.log ./task.sh

# 使用数组任务占位符
bsub -J "job[1-5]" -o "out.%J.%I.log" ./array_task.sh

调度控制

# 延迟启动作业
bsub -b "2025-01-01:09:00" ./morning_job.sh

# 设置依赖关系
bsub -w "done(12345)" ./dependent_job.sh

# 提交后挂起作业
bsub -H ./paused_job.sh

# 设置优先级
bsub -sp 80 ./high_priority.sh

交互式作业

# 基本交互式作业
bsub -I bash

# 带伪终端的交互式作业
bsub -Ip -n 4 python

# X11图形界面作业
bsub -IX matlab

# 使用登录shell
bsub -Is -L /bin/bash

环境变量控制

# 不传播任何环境变量
bsub -env "none" ./clean_env.sh

# 仅传播指定变量
bsub -env "PATH,HOME,USER" ./selective.sh

# 排除特定变量
bsub -env "all,~TMPDIR,~DISPLAY" ./filtered.sh

# 设置变量值
bsub -env "DEBUG=1,WORKERS=8" ./configured.sh

通知与等待

# 开始和结束时发送邮件
bsub -B -N ./notify_job.sh

# 等待作业完成
bsub -K ./wait_job.sh
echo "作业已完成,退出码: $?"

组合使用

# 完整的作业配置示例
bsub \
-J "production[1-100]" \
-q normal \
-n 8 \
-W 4:00 \
-R "span[hosts=1] rusage[mem=8G]" \
-M 8192 \
-o "logs/output.%J.%I.log" \
-e "logs/error.%J.%I.log" \
-P myproject \
-sp 50 \
-B -N \
./production_task.sh

注意事项

功能限制

  1. 资源表达式支持

    • -R选项仅支持span[hosts=N]span[ptile=N]rusage[mem=SIZE]rusage[tmp=SIZE]
    • 不支持LSF中的selectcuaffinity等高级资源语法
  2. 邮件通知

    • -u选项当前未完全实现,邮件通知功能可能受限于系统配置
  3. GPU资源

    • -gpu选项已支持参数解析,完整功能取决于FSCHED的GPU调度配置
  4. 优先级

    • -sp选项接受0-100的优先级值,实际调度效果取决于系统配置

占位符转换

  • LSF的%J(作业ID)自动转换为FSCHED的%A
  • LSF的%I(数组索引)自动转换为FSCHED的%a
  • 占位符仅在-o-oo-e-eo选项中有效

选项互斥

  • 交互式选项(-I-Is-Ip-IX)之间互斥
  • -K选项不能与交互式选项同时使用
  • -o-oo-e-eo互斥(后者覆盖前者)

默认行为

  • 未指定-o-e时,标准输出和错误默认丢弃(输出到/dev/null)
  • 未指定-cwd时,使用提交作业时的当前工作目录
  • 默认启用作业失败重试(-r),使用-rn可禁用

不支持的选项

以下LSF选项在当前版本中不支持,使用时会显示警告但不影响作业提交:

  • CSM相关选项(如-alloc_flags-cn_cu等)
  • LSF高级特性(如-app-sla-clusters等)
  • 文件暂存(如-f-stage等)
  • 检查点和迁移(如-k-mig等)
  • 替代提交格式(如-json-yaml等)

完整的不支持选项列表请参考FSCHED技术文档。