本文提供IBM Spectrum LSF常用命令、配置参数和环境变量的快速参考,便于管理员和用户日常查阅。

核心用户命令

作业提交和管理

命令 用途 常用选项
bsub 提交批处理作业 -q 队列, -n 核心数, -J 作业名, -o 输出文件
bjobs 查看作业状态 -a 所有作业, -l 详细信息, -u 用户, -p 挂起原因
bkill 终止作业 -s 信号, -r 作业ID范围
bstop 暂停作业 作业ID
bresume 恢复作业 作业ID
bpeek 查看作业输出 -f 实时跟踪
bhist 作业历史 -l 详细, -a 所有
bacct 作业会计 -l 详细资源使用
bmod 修改作业参数 -q 改队列, -n 改核心数

集群信息查询

命令 用途 说明
bhosts 查看主机状态 显示主机负载和可用资源
bqueues 查看队列信息 显示队列状态和限制
lsid 集群标识 显示集群名和Master主机
lsload 主机负载 实时负载指标
lshosts 主机配置 静态主机信息
lsinfo 资源定义 显示可用资源类型
busers 用户信息 用户和用户组

交互式任务

命令 用途 示例
lsrun 远程执行 lsrun -m hostA command
lsgrun 组播执行 lsgrun -m "host[1-5]" uptime
lsplace 查找可用主机 lsplace -n 4

核心管理命令

集群管理 (lsadmin)

1
2
3
4
5
6
7
lsadmin limstartup        # 启动LIM
lsadmin limshutdown       # 关闭LIM
lsadmin limrestart        # 重启LIM
lsadmin reconfig          # 重新加载lsf.shared/lsf.cluster
lsadmin ckconfig          # 检查配置语法
lsadmin limlock           # 锁定集群
lsadmin limunlock         # 解锁集群

批处理管理 (badmin)

1
2
3
4
5
6
7
8
9
badmin hstartup           # 启动mbatchd
badmin hshutdown          # 关闭mbatchd  
badmin mbdrestart         # 重启mbatchd
badmin reconfig           # 重新加载lsb.*配置
badmin ckconfig           # 检查配置语法
badmin qopen <queue>      # 打开队列
badmin qclose <queue>     # 关闭队列
badmin hopen <host>       # 打开主机
badmin hclose <host>      # 关闭主机

关键配置文件

lsf.conf - 全局配置

1
2
3
4
5
6
7
8
9
LSF_TOP=/opt/ibm/lsf                    # 安装目录
LSF_CONF=/opt/ibm/lsf/conf/lsf.conf     # 配置文件路径
LSF_ENVDIR=/opt/ibm/lsf/conf            # 配置目录
LSF_SERVERDIR=/opt/ibm/lsf/10.1/linux3.10-glibc2.17-x86_64/etc
LSF_BINDIR=/opt/ibm/lsf/10.1/linux3.10-glibc2.17-x86_64/bin
LSF_LOGDIR=/opt/ibm/lsf/log             # 日志目录
LSF_MAIL_PROG=/usr/bin/mail             # 邮件程序
LSB_MAILTO=lsfadmin                     # 默认收件人
LSF_MASTER_LIST="master01 master02"     # 主控列表

lsb.params - 批处理参数

1
2
3
4
5
6
7
MBD_SLEEP_TIME=10                       # mbatchd调度间隔(秒)
JOB_ACCEPT_INTERVAL=1                   # 作业接受间隔(秒)
MAX_JOB_NUM=100000                      # 最大作业数
DEFAULT_QUEUE=normal                    # 默认队列
MAX_SBD_FAIL=3                         # sbatchd失败重试
PREEMPTION_POLICY=user_grp             # 抢占策略
JOB_TERMINATE_INTERVAL=10              # 作业终止间隔

lsb.queues - 队列配置模板

1
2
3
4
5
6
7
8
9
10
11
12
13
Begin Queue
QUEUE_NAME   = normal
PRIORITY     = 30                      # 队列优先级(0-100)
NICE         = 20                      # Unix nice值
USERS        = all                     # 允许的用户
HOSTS        = all                     # 允许的主机
RUN_WINDOW   = ()                      # 运行时间窗口
DESCRIPTION  = Normal priority queue
RUNLIMIT     = 24:00                   # 运行时长限制
MEMLIMIT     = 64G                     # 内存限制
CPULIMIT     = 48:00                   # CPU时间限制
PROCESSLIMIT = 256                     # 进程数限制
End Queue

lsb.hosts - 主机配置

1
2
3
4
5
Begin Host
HOST_NAME   MXJ    r15s   r1m   r15m  tmp  DISPATCH_WINDOW
compute01   20     -      -     -     -    ()
compute02   20     -      -     -     -    (5:18:00-8:00)  # 时间窗口
End Host

lsb.users - 用户配置

1
2
3
4
5
6
7
8
9
10
11
12
Begin UserGroup
GROUP_NAME    USERS
admin         (admin1 admin2)
developers    (dev1 dev2 dev3)
End UserGroup

Begin User
USER_NAME     MAX_JOBS    SHARES    MAX_PEND
admin         100         30        200
developers    50          20        100
default       20          10        50
End User

环境变量

核心环境变量

1
2
3
4
5
6
7
8
9
10
LSF_ENVDIR          # 配置文件目录
LSF_BINDIR          # LSF命令目录
LSF_SERVERDIR       # LSF守护进程目录
LSF_LOGDIR          # 日志目录
LSB_JOBID           # 当前作业ID(在作业脚本中可用)
LSB_JOBINDEX        # 作业阵列索引
LSB_HOSTS           # 分配的主机列表
LSB_MCPU_HOSTS      # 主机和CPU分配
LSB_QUEUE           # 作业所在队列
LSB_JOBNAME         # 作业名称

设置环境

1
2
3
4
5
6
# 在profile中设置
source /opt/ibm/lsf/conf/profile.lsf

# 或手动设置
export LSF_ENVDIR=/opt/ibm/lsf/conf
export PATH=$LSF_BINDIR:$PATH

资源需求字符串语法

select 选择表达式

1
2
3
4
5
6
7
8
9
10
11
# 选择有足够内存的主机
-R "select[mem>8000]"

# 选择特定类型主机
-R "select[type==linux]"

# 组合条件
-R "select[mem>16000 && tmp>10000]"

# 使用资源
-R "select[gpu>0]"

rusage 资源使用

1
2
3
4
5
6
7
8
# 请求每进程内存
-R "rusage[mem=4000]"

# 请求临时空间
-R "rusage[tmp=10000]"

# 请求许可证
-R "rusage[license_tool=1]"

span 分布策略

1
2
3
4
5
6
7
8
# 所有进程在同一主机
-R "span[hosts=1]"

# 每主机固定进程数
-R "span[ptile=16]"

# 平衡分布
-R "span[slots]"

作业状态码

状态 含义 说明
PEND Pending 挂起等待调度
RUN Running 正在运行
DONE Done 成功完成
EXIT Exited 异常退出
SSUSP System Suspended 系统挂起
USUSP User Suspended 用户挂起
PSUSP Pending Suspended 挂起作业被暂停
WAIT Waiting 等待依赖满足
ZOMBI Zombie 僵尸状态

常用bsub选项速查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 基本提交
bsub ./job.sh

# 队列和资源
bsub -q normal -n 16 ./job.sh

# 内存请求
bsub -R "rusage[mem=8000]" ./job.sh

# 作业名称和输出
bsub -J "my_job" -o output.%J -e error.%J ./job.sh

# 作业依赖
bsub -w "done(12345)" ./next_job.sh

# 作业阵列
bsub -J "array[1-100]" ./process.sh

# 并行作业
bsub -n 32 -R "span[ptile=16]" mpirun ./mpi_app

# 交互式作业
bsub -Is bash

# 邮件通知
bsub -u user@example.com -N ./long_job.sh

# 时间限制
bsub -W 2:00 ./short_job.sh  # 2小时墙钟时间

# GPU作业
bsub -gpu "num=2" ./cuda_app

常用bjobs选项速查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看当前作业
bjobs

# 所有作业(包括历史)
bjobs -a

# 特定用户
bjobs -u username

# 详细信息
bjobs -l 12345

# 挂起原因
bjobs -p

# JSON输出
bjobs -json

# 自定义格式
bjobs -o "jobid user stat queue exec_host"

# 宽格式输出
bjobs -w

日志文件位置

日志文件 内容 位置
lim.log.主机名 LIM日志 $LSF_LOGDIR/
res.log.主机名 RES日志 $LSF_LOGDIR/
mbatchd.log.主机名 mbatchd日志 $LSF_LOGDIR/
mbschd.log.主机名 mbschd调度日志 $LSF_LOGDIR/
sbatchd.log.主机名 sbatchd日志 $LSF_LOGDIR/
lsb.events 作业事件日志 $LSF_LOGDIR/
lsb.acct 作业会计日志 $LSF_LOGDIR/

端口配置

1
2
3
4
5
# lsf.conf中配置
LSF_LIM_PORT=7869                      # LIM端口
LSB_MBD_PORT=6878                      # mbatchd端口
LSB_SBD_PORT=6879                      # sbatchd端口
LSF_AUTH_DAEMONS=9988                  # 认证端口

许可证管理

1
2
3
4
5
6
7
8
# 查看许可证资源
lsinfo -R

# 提交需要许可证的作业
bsub -R "rusage[vcs_license=1]" ./simulation

# 查看许可证使用
bjobs -R "rusage[vcs_license>0]"

故障排查速查

检查集群健康

1
2
3
4
5
lsid                    # 集群基本信息
badmin showstatus       # mbatchd状态
lsadmin limstatus       # LIM状态  
bhosts                  # 主机状态
bqueues                 # 队列状态

查看作业问题

1
2
3
4
bjobs -p 12345          # 挂起原因
bhist -l 12345          # 作业历史
bacct -l 12345          # 资源使用
bpeek 12345             # 查看输出

日志检查

1
2
tail -f $LSF_LOGDIR/mbatchd.log.master    # mbatchd日志
tail -f $LSF_LOGDIR/lsb.events            # 作业事件

性能调优参数

1
2
3
4
5
6
# lsb.params
MBD_SLEEP_TIME=10                 # 调度周期,降低减少延迟
SBD_SLEEP_TIME=30                 # sbatchd报告周期
JOB_INCLUDE_POSTPROC=Y            # 后处理脚本支持
MAX_JOB_ARRAY_SIZE=10000          # 最大作业阵列大小
PREEMPT_FOR=RUNLIMIT|MEMLIMIT    # 抢占触发条件

快速参考卡片

新用户5分钟上手

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. 提交作业
bsub ./my_script.sh

# 2. 查看状态
bjobs

# 3. 查看输出
bpeek <JOB_ID>

# 4. 终止作业
bkill <JOB_ID>

# 5. 查看历史
bhist

管理员日常检查

1
2
3
4
5
6
# 早晨检查清单
lsid                           # 集群运行?
badmin showstatus              # Master健康?
bhosts | grep -v ok            # 有问题主机?
bjobs -p | head                # 为什么挂起?
tail $LSF_LOGDIR/mbatchd.log.* # 有错误?

总结

本参考文档涵盖了LSF的核心命令、配置参数和常用模式。建议将常用命令添加到shell别名或快速启动脚本中,以提高日常工作效率。

完整的命令参考请查阅LSF命令参考手册


参考资源