LSF的使用方法总结

2023-11-18

一、LSF 基本介绍

LSF(Load Sharing Facility)是IBM旗下的一款分布式集群管理系统软件,负责计算资源的管理和批处理作业的调度。它给用户提供统一的集群资源访问接口,让用户透明地访问整个集群资源。同时提供了丰富的功能和可定制的策略。LSF 具有良好的可伸缩性和高可用性,支持几乎所有的主流操作系统。它通常是高性能计算环境中不可或缺的基础软件。作用上与PBS一样,使用方法略有不同。
LSF的功能和命令非常多,这里主要介绍普通用户常用命令,更详细的命令文档参见https://www.ibm.com/docs/en/spectrum-lsf/10.1.0?topic=reference-command

二、提交作业

与PBS不同,大部分情况下,可以不需要写作业脚本,直接一行命令就可以提交作业:
bsub -J blast -n 10 -R span[hosts=1] -o %J.out -e %J.err -q normal "blastn -query ./ZS97_cds.fa -out ZS97_cds -db ./MH63_cds -outfmt 6 -evalue 1e-5 -num_threads \$LSB_DJOB_NUMPROC"

1.LSF作业脚本1-串行作业(单节点)

LSF中用户运行作业的主要方式为,编写LSF作业脚本,使用bsub命令提交作业脚本。如下所示为使用LSF脚本blastn.lsf

#BSUB -J blast
#BSUB -n 10
#BSUB -R span[hosts=1]
#BSUB -o %J.out
#BSUB -e %J.err
#BSUB -q normal
mpirun perl sub.pl
time blastn -query ./ZS97_cds.fa -out ZS97_cds -db ./MH63_cds -outfmt 6 -evalue 1e-5 -num_threads $LSB_DJOB_NUMPROC

或者可以提交作业blastn.lsf
bsub < blastn.lsf
脚本中每行内容解释:
-J 指定作业名称
-n 作业使用核心数,LSF中一般称之为slot
-R span[hosts=1] 指定作业只能在单个节点运行,不能跨节点(跨节点作业需要MPI支持,生物中比较少),-R 可以使得作业在需要满足某种条件的节点上运行
-o 作业标准输出,%J为作业ID,即此处的作业输出文件为 jobid.out
-e 作业错误输出,%J为作业ID,即此处的作业输出文件为 jobid.err
-q 作业提交的作业队列
$LSB_DJOB_NUMPROC 为LSF系统变量,表示作业脚本申请的CPU核心数
另外还有一些常用选项:
-M 内存控制参数,作业占用的内存超过其指定值时,作业会被系统杀掉。如 -M 20GB -R “rusage[mem=20GB]” 申请20GB的内存,且其内存使用量不能超过20G
-m 指定作业运行节点
-W hh:mm 设置作业运行时间
-w 作业依赖,方便写流程,如-w “done(JobA)”,作业名为JobA的作业完成之后,该作业才开始运行;作业依赖详细用法
-K 提交作业并等待作业结束,在写流程时会用得上,可以见后面的例子
-P 指定project name,如果我们需要统计某个项目消耗的计算资源,如CPU时等,可以将相关的作业都指定为同一个project name,然后根据project name统计资源消耗
-r rerun选项,即作业失败后自动重新运行,提交大量作业时此选项比较有用

2.LSF作业脚本2-并行作业(多节点)

#BSUB -J MPIJob       	### set the job Name
#BSUB -q normal        	### specify queue
#BSUB -n 400           	### ask for number of cores (default: 1)
#BSUB -R "span[ptile=20]"  	### ask for 20 cores per node
#BSUB -W 10:00        	### set walltime limit: hh:mm
#BSUB -o stdout_%J.out  	### Specify the output and error file. %J is the job-id 
#BSUB -e stderr_%J.err  	### -o and -e mean append, -oo and -eo mean overwrite 
 
# here follow the commands you want to execute
# load the necessary modules
# NOTE: this is just an example, check with the available modules
module load intel/2018.4
module load mpi/intel/2018.4
 
### This uses the LSB_DJOB_NUMPROC to assign all the cores reserved
### This is a very basic syntax. For more complex examples, see the documentation
mpirun -np $LSB_DJOB_NUMPROC ./MPI_program

此脚本申请400核,每个节点20个核。
多节点并行作业需要程序本身支持,使用mpirun等MPI命令运行,绝大部分生物软件不支持多节点并行。如不确定程序是否支持多节点并行,请勿使用,避免资源浪费。
使用系统范围的intelmpi / openmpi时,可以省略-np $ LSB_DJOB_NUMPROC命令,因为程序会自动获取有关核心总数的信息。如果使用不同的MPI库,可能需要明确指定MPI的数量 以这种方式在命令行上进行处理。
三、LSF批量提交作业及注意事项
以跑多样本的STAR为例,将下面的脚本保存为run_STAR.sh,运行该脚本,即可同时提交一批作业,而不用一个个手动提交。如果对作业需要消耗的资源不是很清楚的用户,建议在提交批量作业前,先用交互模式跑一个,看看资源消耗情况,然后再合理申请资源,使用诸如-n 4 -M 20GB -R “rusage[mem=20GB]” 等选项,限制每个作业占用的资源,避免多个作业挤在一个节点,导致节点负载过高或内存耗尽而崩溃。

for sample in /public/home/test/haoliu/work/lsf_bwait/raw_data/*trim_1.fq.gz;do
 
index=$(basename $sample |sed 's/_trim_1.fq.gz//')
prefix=$(dirname $sample)
 
star_index=/public/home/test/haoliu/work/lsf_bwait/star/
gtf=/public/home/test/haoliu/work/lsf_bwait/MH63.gtf

bsub  -J ${index} -n 8 -o %J.${index}.out -e %J.${index}.err -R span[hosts=1] \
   "STAR --runThreadN 8 --genomeDir ${star_index} --readFilesIn ${prefix}/${index}_trim_1.fq.gz  ${prefix}/${index}_trim_2.fq.gz  --outFileNamePrefix ${index}. --sjdbGTFfile $gtf"
sleep 10
done

四、LSF提交批量流程作业

生信中经常会遇到需要跑大量作业以及复杂流程的情况,特别是当流程中使用的软件为多线程和单线程混杂时,如果把所有流程步骤写到同一个shell脚本,并按多线程需要的线程数来申请CPU 核心数,无疑会造成比较大的浪费。
在此建议将流程中的主要运行步骤直接用bsub提交,按需要申请核心数、内存等,需要用上文中提到的bsub的 -K 参数。
这里写了一个跑RNA-Seq流程的example,主要是2个脚本,RNA.sh 为具体处理每个样本的流程脚本,在batch_run.sh 对每个样本都提交运行RNA.sh脚本。
使用时,提交batch_run.lsf脚本即可, bsub < batch_run.lsf 。
RNA.sh

#!/bin/sh
sample=$1
 
index=$(basename $sample |sed 's/_trim_1.fq.gz//')
prefix=$(dirname $sample)
 
star_index=/public/home/test/haoliu/work/lsf_bwait/star/
gtf=/public/home/test/haoliu/work/lsf_bwait/MH63.gtf
 
bsub -K -J STAR1 -n 8 -o %J.STAR1.out -e %J.STAR1.err -R span[hosts=1] "module purge;module load STAR/2.6.0a-foss-2016b;STAR --runThreadN 8 --genomeDir ${star_index} \
--readFilesIn ${prefix}/${index}_trim_1.fq.gz  ${prefix}/${index}_trim_2.fq.gz \
--outSAMtype SAM --readFilesCommand zcat --alignIntronMax 50000 --outFileNamePrefix ${index}. --sjdbGTFfile $gtf  --outReadsUnmapped None"
 
bsub -K -J STAR2 -n 1 -o %J.STAR2.out -e %J.STAR2.err -R span[hosts=1] "grep -E '@|NH:i:1' ${index}.Aligned.out.sam >${index}.Aligned.out.uniq.sam"
 
bsub -K -J STAR3 -n 2 -o %J.STAR3.out -e %J.STAR3.err -R span[hosts=1] "module purge;module load SAMtools/1.3;samtools sort -@2  ${index}.Aligned.out.uniq.sam > ${index}.Aligned.out.bam"
 
rm ${index}.Aligned.out.sam
 
rm ${index}.Aligned.out.uniq.sam
 
rm ${index}.Aligned.out.uniq.bam
 
bsub -K -J STAR4 -n 1 -o %J.STAR4.out -e %J.STAR4.err -R span[hosts=1] "module purge;module load HTSeq/0.8.0;htseq-count -f bam -s no ${index}.Aligned.out.bam -t gene $gtf >${index}.G

batch_run.lsf

#BSUB -J STAR
#BSUB -n 1
#BSUB -R span[hosts=1]
#BSUB -o %J.out
#BSUB -e %J.err
 
for sample in /public/home/test/haoliu/work/lsf_bwait/raw_data/*trim_1.fq.gz;do
	index=$(basename $sample |sed 's/_trim_1.fq.gz//')
	sh RNA.sh ${sample} &
        sleep 10
done
wait

五、LSF交互作业

类似于PBS中的qsub -I,为了防止滥用(开了之后长期不关等)交互模式,目前只允许在interactive队列使用交互模式,且时间限制为48h,超时会被杀掉。

bsub -q interactive -Is bash
也可以

bsub -q interactive -Is sh
此时不会加载~/.bashrc 如果需要进行图形转发,如画图等,可以加-XF 参数

bsub -q interactive -XF -Is bash

六、查询作业

使用bjobs查看作业信息

可以查看作业的运行状态、队列、提交节点、运行节点及核心数、作业名称、提交时间,作业状态主要有:

PEND 正在排队
RUN 正在运行
DONE 正常退出
EXIT 异常退出
SSUSP 被系统挂起
USUSP 被用户自己挂起
bjobs还有一些常用的选项,

-r 查看正在运行的作业
-pe 查看排队作业
-p 查看作业排队的原因
-l 查看作业详细信息
-sum 查看所有未完成作业的汇总信息

七、修改排队作业运行参数

bmod可更改正在排队的作业的多个参数,如
bmod -n 2 jobid 更改作业申请的核心数
bmod -q q2680v2 jobid 更改作业运行队列

八、挂起/恢复作业

用户可自行挂起或者继续运行被挂起的作业,
bstop jobid 挂起作业,如被系统挂起(节点超负荷系统会自动挂起该节点上的部分作业),则作业状态为SSUSP;如被用户自己或管理员挂起,则作业状态为USUSP
bresume bjoid 继续运行被挂起的作业

九、调整排队作业顺序

bbot jobid 将排队的作业移动到队列最后(bottom)
btop jobid 将排队的作业移动到队列最前(top)

十、查询输出文件

在作业完成之前,输出文件out和error被保存在系统文件中无法查看,可以使用bpeek命令查看输出文件

十一、终止作业

如果用户要在作业提交后终止自己的作业,可以使用bkill命令,用法为bkill jobid。非root用户只能查看、删除自己提交的作业。

十二、资源查看

bhosts查看所有节点核心数使用情况

HOST_NAME 节点名称
STATUS: ok:表示可以接收新作业,只有这种状态可以接受新作业 closed:表示已被作业占满,不接受新作业 unavail和unreach:系统停机或作业调度系统服务有问题
JL/U 每个用户在该节点最多能使用的核数,- 表示没有限制
MAX 最大可以同时运行的核数
NJOBS 当前所有运行和待运行作业所需的核数
RUN 已经开始运行的作业占据的核数
SSUSP 系统所挂起的作业所使用的核数
USUSP 用户自行挂起的作业所使用的核数
RSV 系统为你预约所保留的核数
lsload查看所有节点的负载、内存使用等

bqueue查看队列信息

-l 查看队列的详细信息

-u 查看所用所能使用的队列
-m 查看节点所在的队列

本文参考自:
https://link.zhihu.com/?target=http%3A//hpc.ncpgr.cn%3A8093/mediawiki/index.php/LSF_%25E5%259F%25BA%25E6%259C%25AC%25E4%25BD%25BF%25E7%2594%25A8%23LSF.E6.89.B9.E9.87.8F.E6.8F.90.E4.BA.A4.E4.BD.9C.E4.B8.9A.E5.8F.8A.E6.B3.A8.E6.84.8F.E4.BA.8B.E9.A1.B9

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LSF的使用方法总结 的相关文章

  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • CentOS:无法安装 Chromium 浏览器

    我正在尝试在 centOS 6 i 中安装 chromium 以 root 用户身份运行以下命令 cd etc yum repos d wget http repos fedorapeople org repos spot chromium
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • 内核模式下的线程(和进程)与用户模式下的线程(和进程)有什么区别?

    我的问题 1 书中现代操作系统 它说线程和进程可以处于内核模式或用户模式 但没有明确说明它们之间有什么区别 2 为什么内核态线程和进程的切换比用户态线程和进程的切换花费更多 3 现在 我正在学习Linux 我想知道如何在LINUX系统中分别
  • 是否可以创建一个脚本来保存和恢复权限?

    我正在使用 Linux 系统 需要对一组嵌套文件和目录进行一些权限实验 我想知道是否没有某种方法可以保存文件和目录的权限 而不保存文件本身 换句话说 我想保存权限 编辑一些文件 调整一些权限 然后将权限恢复到目录结构中 将更改的文件保留在适
  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • Linux:如何设置进程的时区?

    我需要设置在 Linux 机器上启动的各个进程的时区 我尝试设置TZ变量 在本地上下文中 但它不起作用 有没有一种方法可以使用与系统日期不同的系统日期从命令行运行应用程序 这可能听起来很愚蠢 但我需要一种sandbox系统日期将被更改的地方
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost

随机推荐

  • RuntimeError: Attempting to deserialize object on CUDA device 1 but torch.cuda.device_count() is 1.

    成功解决 RuntimeError Attempting to deserialize object on CUDA device 1 but torch cuda device count is 1 报错内容 程序在这一步报错 check
  • Android kotlin自定义自动换行LinearLayout

    目录 1 概述 2 实现步骤 3 kotlin自定义自动换行LinearLayout核心代码实现功能 3 1自定义LinearLayout
  • spring快速入门

    1 导入坐标
  • stack容器

    stack容器 1 stack 基本概念 概念 stack是一种先进后出 First In Last Out FILO 的数据结构 它只有一个出口 栈中只有顶端的元素才可以被外界使用 因此栈不允许有遍历行为 栈中进入数据称为 入栈 push
  • dll load failed: 找不到指定的模块_【已解决】“由于找不到xinput1_3.dll,无法继续执行代码”...

    许多小伙伴在玩游戏或者使用电脑的过程中 电脑突然提示 由于找不到xinput1 3 dll 无法继续执行代码 导致游戏等程序无法正常启动运行 并且导致电脑系统弹窗报错 那xinput1 3 dll丢失怎么修复呢 下面让小编手把手教你解决方法
  • CentOS7安装OpenStack(Liberty)

    1 安装yum源 yum install https buildlogs centos org centos 7 cloud x86 64 openstack liberty centos release openstack liberty
  • 百度智能云千帆大模型三连击:接入LLaMA2等33个模型、上线插件功能和103个Prompt模板

    作为全球首个一站式企业级大模型平台 百度智能云 千帆大模型平台 在提供包括文心一言在内的大模型服务及第三方大模型服务的同时 还提供大模型开发和应用的整套工具链 帮助企业解决大模型从训练到开发过程中的全链条问题 自2023年3月发布以来 千帆
  • 看懂android中的adapter适配器

    首先需要知道一共有4个文件 fragment类 adapter fragment的布局文件 adapter中的item的布局文件 1 首先声明一个控件 RecyclerView 2 然后声明一个adapter类 3 在initView 上
  • python中typeerror_详解python中的TypeError错误解决办法

    新手在学习python时候 会遇到很多的坑 下面来具体说说其中一个 在使用python编写面向对象的程序时 新手可能遇到TypeError this constructor takes no arguments这个错误 例如下面的程序 cl
  • gtest 单元测试工具的基本使用

    gtest 单元测试 gtest 简介 gtest 优点 安装 gtest 测试 demo 总结 gtest 简介 gtest是Google的一套用于编写C 测试的框架 可以运行在很多平台上 包括Linux Mac OS X Windows
  • 获取时间和脸颊、下颚线灯模式

    电流检测的应用 电路检测电路常用于 高压短路保护 电机控制 DC DC换流器 系统功耗管理 二次电池的电流管理 蓄电池管理等电流检测等场景 对于大部分应用 都是通过感测电阻两端的压降测量电流 一般使用电流通过时的压降为数十mV 数百mV的电
  • android动画内存优化,Android 性能优化之内存优化

    定义 内存泄漏 Memory Leak 指 程序在申请内存后 当该内存不需再使用但却无法被释放的现象 内存溢出 OOM 应用程序所需的内存超出了为其分配的内存限额 Android将进程分为5个优先等级 前台进程 可见进程 服务进程 后台进程
  • google.api.http

    Http 定义api服务的http配置 它包含一个httprule列表 每个列表指定一个rpc方法到一个或多个http rest api方法的映射 字段 描述 rules HttpRule 一个适用于各个API方法的http配置规则列表 注
  • 编译优化之 - 向量化优化入门

    1 介绍 2 Intel高级向量扩展 3 GCC中向量化 4 ICC中向量化 5 AOCC LLVM中向量化 1 介绍 什么是自动向量化 自动向量化 automatic vectorization 是自动并行化 automatic para
  • STM32笔记:高精度脉冲宽度计 双输入捕获+DMA方式

    本文介绍如何用STM32F107VC Waveshare Open107V实验板 实现高精度的脉冲宽度计 占空比 开发环境 IDE STM32CubeIDE 1 8 固件库 STM32Cube FW F1 V1 8 4 函数发生 RIGOL
  • 人工智能开源社区论坛----开源助力多领域AI生态发展

    ChinaOSC 2022 人工智能开源社区论坛 开源助力多领域AI生态发展技术论坛将于2022年8月20日13 00 17 00在陕西省西安高新国际会议中心召开 本论坛将围绕 开源社区助力多领域AI生态发展 主题 邀请AI开源领域顶级技术
  • Filco圣手二代键盘蓝牙连接方法

    键盘前面的电源按钮按进去 即打开电源开关 同时按下Ctrl Alt Fn 看到蓝灯和红灯同时亮起 之后剩蓝灯闪烁 按下小键盘中数字键1 4中的一个 一共可以连4台设备 如果你选的数字之前连接过其他设备 可以在第2步做完之后先按两秒清除按钮
  • 托福综合写作套路

    1 文章认定 教授驳斥 2 The reading passage provides three possible functions of the carved stone balls However in the lecture the
  • 决策树算法原理+例题练习

    一 决策树的优缺点 优点 计算复杂度不高 输出结果易于理解 对中间值的缺失值不敏感 可以处理不相关特征数据 缺点 可能会产生过度匹配的问题 使用数据类型 数值型和标称型 二 一个实例 一天 老师问了个问题 只根据头发和声音怎么判断一位同学的
  • LSF的使用方法总结

    一 LSF 基本介绍 LSF Load Sharing Facility 是IBM旗下的一款分布式集群管理系统软件 负责计算资源的管理和批处理作业的调度 它给用户提供统一的集群资源访问接口 让用户透明地访问整个集群资源 同时提供了丰富的功能