文档:链接
LSF 基本介绍
LSF(Load Sharing Facility)是IBM旗下的一款分布式集群管理系统软件,负责计算资源的管理和批处理作业的调度。它给用户提供统一的集群资源访问接口,让用户透明地访问整个集群资源。同时提供了丰富的功能和可定制的策略。LSF 具有良好的可伸缩性和高可用性,支持几乎所有的主流操作系统。它通常是高性能计算环境中不可或缺的基础软件。作用上与PBS一样,使用方法略有不同。
用户命令
查看有关集群的信息
命令 | 描述 |
---|---|
bhosts | 显示主机及其静态和动态资源 |
blimits | 显示有关正在运行的作业资源分配限制的信息 |
bparams | 显示有关可调整的批处理系统参数的信息 |
bqueues | 显示有关批处理队列的信息 |
busers | 显示有关用户和用户组的信息 |
lshosts | 显示主机及其静态资源信息 |
lsid | 显示当前LSF 长期稳定性试验版本号、群集名称和管理主机名 |
lsinfo | 显示负载共享配置信息 |
lsload | 显示主机的动态加载索引 |
监控工作和任务
命令 | 描述 |
---|---|
bacct | 报告已完成的会计统计数字LSF 长期稳定性试验 jobs 工作 |
bapp | 显示关于附加到应用程序配置文件的作业的信息 |
bhist | 显示有关作业的历史信息 |
bjobs 工作 | 显示有关作业的信息 |
bpeek | 显示标准输出和未完成的工作 |
bsla | 显示服务类配置信息,用于面向目标的服务级别协议/服务调度 |
bstatus | 读取或设置外部作业状态消息和数据文件 |
提交和控制作业
命令 | 描述 |
---|---|
bbot | 将挂起的作业相对于队列中的最后一个作业移动 |
bchkpnt | 检查点是一个可检查的任务 |
bkill | 发出信号以杀死、暂停或恢复未完成的工作 |
bmig | 迁移可检查的或可重新运行的作业 |
bmod | 修改工作提交选项 |
brequeue | 杀死并重新等待一个工作 |
bresize | 释放插槽并取消挂起的作业调整大小分配请求 |
brestart | 重新启动检查作业 |
bresume | 恢复一份暂停的工作 |
bstop | 暂停工作 |
bsub | 提交作业 |
bswitch | 将未完成的作业从一个队列移动到另一个队列 |
btop | 将挂起的作业相对于队列中的第一个作业移动 |
用IBM Spectrum LSF运行作业
关于IBM Spectrum LSF
集群、作业和队列
IBM Spectrum LSF(”LSF”,load sharing facility)软件是业界领先的企业级软件,它在现有的异构IT资源中分配工作,创建一个共享的、可扩展的和容错的基础设施,提供更快的、平衡的、更可靠的工作负载性能并降低成本。
集群
一组运行LSF的计算机(主机),作为一个单元一起工作,结合计算能力,共享工作负载和资源。集群为计算资源的网络提供了一个单一的系统图像。
主机可以通过多种方式被分组为集群。一个集群可以包含。
- 一个管理组中的所有主机
- 一个文件服务器或子网络上的所有主机
-
集群命令
lshosts - 查看集群中主机的静态资源信息
- bhosts - 查看集群中服务器主机的资源和工作信息
- lsid - 查看集群的名称
- lsclusters - 查看集群的状态和大小
作业
一个工作单位在LSF系统中运行。工作是一个提交给LSF执行的命令。LSF根据配置的策略来安排、控制和跟踪工作。
工作可以是复杂的问题,模拟场景,广泛的计算,任何需要计算能力的东西。
作业命令
- bjobs - 查看系统中的工作
-
工作槽
工作槽是一个桶,在LSF系统中,一个单一的工作单位被分配到这个桶中。主机被配置为有一定数量的工作槽可用,队列调度工作以填补工作槽。
工作槽命令
bhosts - 查看主机和主机组的工作槽限制
- bqueues - 查看队列的工作槽位限制
-
工作状态
LSF作业有以下状态。
PEND - 在队列中等待调度和派遣
- RUN - 派遣到一个主机并运行
- DONE - 正常完成,退出值为零
- EXIT - 以非零的退出值完成。
- PSUSP - 待定时暂停运行
- USUSP - 由用户暂停运行
- SSUSP - 由LSF系统暂停运行
- POST_DONE - 后处理已经完成,没有错误
- POST_ERR - 后处理完成,有错误。
-
队列
一个集群范围内的作业容器。所有作业都在队列中等待,直到它们被安排和派发到主机上。队列不对应于单个主机;每个队列可以使用集群中的所有服务器主机,或配置的服务器主机子集。当你提交一个作业到队列时,你不需要指定一个执行主机。LSF会将作业分派到集群中最可用的执行主机上,以运行该作业。队列实施不同的作业调度和控制策略。
队列命令
bqueues - 查看可用的队列
- bsub -q - 将作业提交到一个特定的队列中
-
主机
主机是集群中的一个单独的计算机。每个主机可以有一个以上的处理器。多处理器主机是用来运行并行作业的。一个有单一进程队列的多处理器主机被认为是一台机器,而一个装满处理器的盒子,每个处理器都有自己的进程队列,被当作一组独立的机器。
主机命令
lsload - 查看主机上的负载
- lshosts - 查看集群中主机的配置信息,包括CPUS的数量、型号、类型,以及主机是客户端还是服务器。
-
提交主机
向集群提交作业的主机。工作是使用sub命令或从使用LSF API的应用程序提交的。客户端主机和服务器主机可以作为提交主机。
命令。 bsub - 提交一个作业
-
执行主机
工作运行的主机。可以与提交主机相同。所有执行主机都是服务器主机。
命令 -
服务器主机
能够提交和运行作业的主机。服务器主机运行sbatchd来执行服务器请求并应用本地策略。
命令 lshosts - 查看作为服务器的主机(server=Yes)。
客户端主机
只能够向集群提交作业的主机。客户端主机运行LSF命令,只作为提交主机。客户端主机不执行作业或运行LSF守护程序。
命令lshosts - 查看作为客户的主机(server=No)
管理主机
管理主机LIM和mbatchd运行的地方。一个LSF服务器主机,作为该集群的总体协调者。每个集群都有一个管理主机来做所有的工作调度和派遣。如果管理主机发生故障,集群中的另一个LSF服务器就会成为管理主机。所有的LSF守护程序都在管理主机上运行。管理主机上的LIM是管理主机LIM。
命令
-
批处理作业和任务
链接
您可以在作业存放在队列中的批处理系统中运行作业,也可以交互式地运行任务,而无需通过批处理系统(如测试)。主机类型和主机模型
用户和管理员
与作业有关的工作
提交作业(bsub)
向特定队列提交作业
作业队列表示不同的作业调度和控制策略。提交给相同队列的所有作业都共享相同的调度和控制策略。每个作业队列可以使用集群中已配置的服务器主机子集; 缺省情况是使用所有服务器主机。系统管理员可以配置作业队列来控制不同用户和应用程序类型的资源访问。用户选择最适合每个作业的作业队列。默认队列通常适用于运行大多数作业,但默认队列可能会为您的作业分配低优先级,或限制执行条件,以尽量减少与其他作业的干扰。如果自动队列选择不令人满意,则为每个任务选择最合适的队列。影响队列选择的因素有用户访问限制、作业大小、队列的资源限制、队列的调度优先级、队列的活动时间窗口、队列使用的主机、调度负载条件以及 bqueues-l 命令显示的队列描述。
查看可用队列
若要查看可用队列,请运行bqueues.
- 若要仅显示接受来自特定用户或用户组的作业的队列,请运行bqueues -u username Bqueues-u user name.
- 若要仅显示使用特定主机名或主机组名运行作业的队列,请运行bqueues -m hostname Bqueues-m host name.
将作业提交到队列中
要在非工作时间运行一个作业,因为该作业对文件服务器和网络都会产生非常高的负载,你可以将它提交到夜间队列:
如果您有一个紧急作业要运行,您可能希望将其提交到优先级队列:bsub -q "night" my_job
如果你想使用别人拥有的主机,你不想打扰所有者,你可能想在空闲队列上运行你的低优先级作业,这样一旦所有者回来,你的作业就会暂停:bsub -q "priority" my_job
如果您正在运行小作业,并且不希望等待太长时间以获得结果,那么您可以将作业提交到短队列,以便以更高的优先级分派:bsub -q "idle" my_job
注意:确保您的作业足够短,不会因为超过队列的 CPU 时间限制而被杀死(如果有的话,请检查队列的资源限制)。bsub -q "short" my_job
提交与项目相关的作业(bsub-p)
若要将项目名称与作业关联,请运行
bsub -P project_name
提交一个与用户组相关的作业(bsub -G)
例如,提交与用户组special相关的工作myjob:
bsub -G special myjob
提交带有工作名称的工作(bsub -J)
工作名称最多可以包含4094个字符。你以后可以使用工作名称来识别工作。工作名称不需要是唯一的。例如,提交一项工作并指定名称为my_job。
bsub -J my_job sleep 1000
在作业组下提交作业 (bsub -g)
bsub -g /risk_group/portfolio1/current myjob
Job <105> is submitted to default queue.
使用 YAML 文件提交作业以指定作业提交选项 (bsub -yaml)
yaml语法,可以用pyyaml输出yaml文件。
对于以下作业提交命令:
bsub -r -H -N -Ne -i /tmp/input/jobfile.sh -outdir /tmp/output -C 5 -c 2020:12:12 -cn_mem 256 -hostfile /tmp/myHostFile.txt -q normal -G myUserGroup -u "user@example.com" myjob
以下 YAML 文件指定了等效的作业提交命令:
io:
inputFile: /tmp/input/jobfile.sh
outputDir: /tmp/output
limit:
coreLimit: 5
cpuTimeLimit: 2020:12:12
resource:
computeNodeMem: 256
hostFile: /tmp/myHostFile.txt
properties:
queueName: normal
rerun: null
schedule:
hold: ""
userGroup: myUserGroup
notify:
notifyJobDone: ""
notifyJobExit:
mailUser: user@example.com
command: myjob
控制作业
终止作业
通过终止作业来取消正在运行或挂起的作业。如果您的作业是作业组的一部分,则命令bkill只会终止您指定的作业组中的作业。它不会终止路径中较低级别作业组中的作业。
杀死工作 3421:
bkill 3421
使用bkill的-g选项并指定作业组路径以终止作业组中的作业。例如:
bkill -g /risk_group 106
使用作业 ID 0(零)终止作业组中的所有作业:
bkill -g /risk_group 0
监测工作
查看作业信息
使用bjobs和bhist命令来查看工作的信息。
- bjobs报告工作的状态,各种选项允许你显示特定的信息。
- bhist报告系统中一个或多个作业的历史。
你还可以找到特定队列或主机上的作业,找到由特定项目提交的作业,并通过作业ID或名称检查特定作业的状态。
查看所有作业
# 所有仍在系统中的工作和最近完成的工作都会显示出来。
bjobs -a
查看正在运行的作业
# 显示所有正在运行的作业。
bjobs -r
查看待处理作业的原因
当你提交一个作业时,它在开始运行前可能会被保留在队列中,并且在运行时可能被暂停。你可以用bjobs -p选项找出作业被搁置或暂停的原因。
# 显示待处理作业(PEND状态)的信息及其原因。作业挂起的原因可以有一个以上。挂起的原因也显示每个条件下的主机数量。
bjobs -p
# 获得具体的主机名称以及待处理的原因,请运行
bjobs -lp
# 要查看所有用户的待处理原因,请运行
bjobs -p -u all
# 运行bjobs -psum,显示每个待处理原因的作业、主机和发生次数的汇总。
bjobs -psum
# 运行 busers -w all 来查看所有用户的最大待处理作业阈值。
busers -w all
查看作业暂停的原因
# 运行bjobs -s命令。显示暂停的作业(SUSP状态)及其原因的信息。作业被暂停的原因可能不止一个。挂起的原因还显示每个条件下的主机数量。
bjobs -s
# 运行bjobs -ls可以看到暂停作业的详细信息,包括具体的主机名称以及暂停原因。导致LSF暂停作业的负载阈值,连同调度参数,都会显示。
bjobs -ls
# 注意:STOP_COND参数会影响bjobs命令所显示的暂停原因。如果在队列中指定了STOP_COND参数,并且没有指定loadStop阈值,则不显示每个单独的负载指数的暂停原因。
#要查看所有用户的暂停原因,请运行bjobs -s -u all。
查看详细的作业信息
# bjobs的-l选项显示关于作业状态和参数的详细信息,比如作业的当前工作目录、提交作业时指定的参数以及作业开始运行的时间。
bjobs -l job_id
查看作业输出
bpeek job_id