You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将循环脚本转换为LSF集群的Job-array并批量并行执行

LSF Job Array 改造方案

改造后的完整脚本

#BSUB -J ExampleJobArray[1-100]%10  # 定义任务数组:100个任务,同时运行10个
#BSUB -L /bin/bash                  # 使用bash登录shell初始化环境
#BSUB -W 2:00                       # 任务最长运行时间2小时
#BSUB -n 1                          # 每个任务请求1核
#BSUB -R "span[ptile=1]"            # 每个节点只分配1核
#BSUB -R "rusage[mem=5000]"         # 每个任务请求5000MB内存
#BSUB -M 5000                       # 每个任务的内存上限5000MB
#BSUB -o Example1Out.%I             # 输出文件用数组索引命名(比如Example1Out.1、Example1Out.2)

# 把所有bam文件存入bash数组
bam_files=(*.bam)

# 根据LSF数组索引获取当前任务要处理的文件(注意LSB_JOBINDEX从1开始,bash数组从0开始,所以要减1)
current_bam=${bam_files[$((LSB_JOBINDEX-1))]}

# 执行samtools coverage命令
samtools coverage ${current_bam} -o ${current_bam}_coverage.txt

关键修改说明

  • 任务数组定义:把原脚本的#BSUB -J ExampleJob1改成#BSUB -J ExampleJobArray[1-100]%10,其中[1-100]对应100个文件的任务数量,%10强制LSF同时最多运行10个任务,避免占用过多集群资源。
  • 输出文件区分:把#BSUB -o Example1Out.%J改成#BSUB -o Example1Out.%I,%I会替换成当前数组任务的索引编号(1到100),每个任务的输出文件独立,不会互相覆盖。
  • 单任务处理逻辑:去掉原脚本的循环,改用bash数组存储所有bam文件,通过LSF提供的环境变量LSB_JOBINDEX定位到当前任务要处理的单个文件,每个数组任务只处理一个bam文件,实现并行执行。

提交与管理命令

  • 提交任务:bsub < your_script.sh(将脚本保存为文件,比如run_coverage.sh,执行此命令提交)
  • 查看所有数组任务状态:bjobs -a
  • 停止某个范围的数组任务:bkill ExampleJobArray[1-20](停止索引1到20的任务)
  • 停止整个任务数组:bkill ExampleJobArray

内容的提问来源于stack exchange,提问作者LDT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:42:05