Bedic 全文索引

搜索公开内容

知识库WIKI

初识lsf&bsub

更新
阅读
4 分钟
分类
软件工具

初识lsf&bsub

LSF是什么

LSF是IBM旗下一款高性能计算(HPC)工作负载管理平台,它的核心作用是在由大量计算节点组成的集群中,对用户的作业(job)进行调度、管理和资源分配,确保集群资源被高效、公平地利用。

LSF的核心架构

LSF 采用主从(Master-Slave)架构,主要由以下几个组件构成:

Master 节点(mbatchd):这是整集群的大脑,运行 mbatchd 守护进程。它负责接收用户的作业提交、维护作业队列、根据调度策略决定作业何时在哪个节点上运行,并将调度决策下发给执行节点。主节点还会维护一个备节点以实现高可用。

Server 节点(sbatchd):每个执行节点上运行的 sbatchd 守护进程,它接收 Master 的指令,在本节点上启动作业进程,并实时向 Master 汇报节点的负载信息(CPU、内存、swap 等)。

Master 候选节点(LIM):每个节点都运行 LIM(Load Information Manager)进程,负责收集本节点的静态资源信息(如 CPU 核数、内存大小)和动态负载信息(如 CPU 利用率、可用内存),并上报给 Master。Master 节点上的 LIM 还负责集群成员管理。

RES(Remote Execution Server):负责在远程节点上实际执行作业进程。

调度策略

LSF 的调度不只看作业提交的先后顺序,而是综合多种维度:

首先是作业优先级,由队列优先级、用户优先级、作业本身的 priority 值、作业等待时间等因素共同决定。其次是资源匹配,只有满足作业资源需求(如 CPU 核数、内存、特定 License)的节点才会被调度。然后是公平共享(Fairshare),防止某个用户或组独占资源,系统会根据历史使用量动态调整优先级。最后是回填(Backfill),在大的作业等待资源时,允许小的短作业插队先跑,提高整体资源利用率。


bsub是什么

bsub 是用户与 LSF 交互最主要的方式,用于将作业提交到 LSF 集群。其基本概念是:你告诉 LSF 你的作业需要什么资源、运行什么命令,LSF 负责找到合适的节点执行它。

基本语法

bsub [option] command [parameter]

常用选项分类

资源需求类

-n N 指定需要的 CPU 核心数。-R "rusage[mem=4096]" 指定每个核心的内存需求(单位 MB)。-R "select[os==linux]" 指定节点选择条件。-M 8192 设置作业的内存上限,超过即被杀死。-W 01:30 设置作业的 walltime 上限(1 小时 30 分钟),超时自动终止。-q queue_name 指定提交到哪个队列。

输出与日志类

-o output.log 将标准输出重定向到指定文件。-e error.log 将标准错误重定向到指定文件。-J job_name 给作业起一个名字,方便用 bjobs 查看。-oo output.log 带有 overwrite 语义,如果文件存在就覆盖而非追加。

依赖与交互类

-w "done(12345)" 设置作业依赖,只有当作业 ID 为 12345 的作业成功完成后才运行。-w "ended(12345)" 无论前一个作业成功还是失败,只要结束就运行。-I 交互模式,提交后阻塞等待作业完成,适合短作业。-Is 交互式 Shell 模式,直接获得一个到执行节点的终端。

其他常用选项

-P project_name 指定项目名称,用于计费和统计。-gpu - 请求 GPU 资源。-K 提交作业后等待完成,完成后返回作业的退出码。

提交模式

交互式提交:使用 -I-Is 选项,提交后终端会阻塞,直接连接到执行节点。适合需要人工交互的调试场景。

批量提交:默认模式,作业提交后立即返回作业 ID,作业在后台排队等待调度。这是最常用的方式。

作业数组:使用 -J "jobname[1-100]" 一次性提交一个包含 100 个子作业的数组,每个子作业的索引通过环境变量 $LSB_JOBINDEX 获取。对于参数扫描类的任务非常高效。

作业脚本提交

对于复杂的作业,通常将命令写进脚本文件,然后用 < 重定向提交:

#!/bin/bash
#BSUB -J my_job
#BSUB -n 4
#BSUB -R "rusage[mem=4096]"
#BSUB -W 2:00
#BSUB -o %J.out
#BSUB -e %J.err

cd /path/to/workdir
./my_program --input data.in --output result.out

提交方式:bsub < job_script.sh

%J 会被自动替换为作业 ID,这样输出文件名就会带上作业 ID,便于区分。

作业状态流转

一个作业在 LSF 中的生命周期大致如下:

PEND(等待)→ RUN(运行)→ DONE(完成)或 EXIT(异常退出)

PEND 的原因通常包括:资源不足(没有满足条件的空闲节点)、队列中有更高优先级的作业、作业被用户或管理员挂起等。RUN 表示作业正在某个节点上执行。DONE 表示正常退出。EXIT 表示异常退出。此外还有 PSUSP(管理员挂起)、USUSP(用户挂起)、SSUSP(系统自动挂起)等中间状态。