本文へ移動
cccskills
無料GitHub で公開

ncpgr-lsf

NCPGR高性能计算集群LSF作业调度系统使用指南。用于提交、管理和监控LSF批处理作业,包括串行作业、多线程作业、MPI并行作业、GPU作业、数组作业等。当用户需要编写LSF作业脚本、提交计算任务、查询作业状态、调整作业参数或排查作业问题时使用此skill。

インストール方法を見る

含まれるファイル(9)

  • SKILL.md11.9 KB
  • references/faq.md7.6 KB
  • references/lsf-guide.md11.0 KB
  • references/quick-ref.md1.9 KB
  • scripts/array-job.lsf968 B
  • scripts/batch-submit.lsf1.2 KB
  • scripts/gpu-template.lsf968 B
  • scripts/rnaseq-pipeline.lsf2.1 KB
  • scripts/serial-template.lsf1.8 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

NCPGR LSF 作业调度使用指南

编写规范(重要)

提交LSF作业前必须遵守以下规范:

0. 网络访问规范

由于计算节点没有联网,所有需要网络的任务都必须在当前登录节点进行,不得提交到计算节点。

任务类型执行位置说明
需要网络(下载数据、下载参考基因组、安装软件包等)登录节点直接在登录节点执行,不能通过bsub提交
纯计算(比对、定量、组装、分析等)计算节点(通过LSF提交)通过编写 .lsf 脚本提交到计算节点

0.1 脚本编写原则

作业脚本应保持简洁易读,不可过度编码或使用高级技巧(如复杂的 sed/awk 变量替换、多重临时文件创建/清理、嵌套条件逻辑等)。用户需要能够轻松阅读、检查和自行修改脚本。

1. 脚本命名规范

LSF作业脚本后缀必须使用 .lsf

# 正确命名
my_job.lsf
bwa_mem.lsf
rnaseq_pipeline.lsf

# 避免使用
my_job.sh          # 不推荐
my_job.bash        # 不推荐

2. 极简编写规范

核心原则:由于队列已配置资源限制,作业脚本应尽可能简化

规则2.1:不设置内存参数

所有队列都已配置内存限制,不需要在作业脚本中设置 -M 和 rusage[mem=...]:

# 正确的简化写法(推荐)
#!/bin/bash
#BSUB -J my_job
#BSUB -q normal
#BSUB -n 4
#BSUB -R "span[hosts=1]"
#BSUB -o %J.out
#BSUB -e %J.err

your_program --threads $LSB_DJOB_NUMPROC

# 错误的冗余写法(不推荐)
#BSUB -M 8G                 # 不需要!
#BSUB -R "rusage[mem=8G]"   # 不需要!

规则2.2:不设置时间限制

不需要设置 -W 运行时间限制:

# 正确的简化写法(推荐)
#!/bin/bash
#BSUB -J my_job
#BSUB -q normal
#BSUB -n 4
#BSUB -R "span[hosts=1]"
#BSUB -o %J.out
#BSUB -e %J.err

# 错误的冗余写法(不推荐)
#BSUB -W 12:00             # 不需要!

规则2.3:资源规划(设置核数前查看资源)

# 第1步:查看当前集群资源
bhosts | grep -E "ok|closed" | head -10

# 第2步:根据结果决定核数
# 多数节点为 closed → 申请2-4核(易调度)
#BSUB -n 2

# 有空闲节点且核心充足 → 可申请8+核
#BSUB -n 8
场景建议策略
多数节点状态为closed申请2-4核,提高调度优先级
有空闲节点(ok)且有较多空核心可申请8-16核加速计算
急需作业跑上申请1-2核,几乎可以立即调度

警告:盲目申请过多核心(如32核)会导致作业长时间排队

快速参考

常用命令速查

命令用途
bsub < job.lsf提交作业脚本
bjobs查看作业状态
bjobs -l <jobid>查看作业详细信息
bpeek <jobid>查看作业输出
bkill <jobid>终止作业
bstop <jobid> / bresume <jobid>挂起/恢复作业
bmod -n 4 <jobid>修改作业参数
lsload查看节点负载
bhosts查看节点状态
bqueues查看队列信息

推荐别名

添加到 ~/.bashrc:

alias bbjobs='bjobs -o "jobid:10 user:6 stat:6 queue:6 exec_host:10 job_name:10 max_mem:14 submit_time:12"'
alias bbs='bjobs -o "jobid:8 user:8 stat:6 queue:6 exec_host:10 job_name:8 nreq_slot:6 slots:5 max_mem:12 submit_time:12 start_time:12 run_time:16 cpu_used"'

作业提交

1. 软件环境规范(重要)

如果用户使用集群已安装的软件,必须使用 module 命令加载:

# 查看可用软件
module av bwa          # 查看bwa相关模块
module av star         # 查看STAR相关模块
module av              # 查看所有可用模块

# 在作业脚本中加载
module load BWA/0.7.17-foss-2018b
module load STAR/2.6.0a-foss-2016b

规则:

  • 优先原则:只要应用软件已通过module安装在集群,必须优先使用module版本
  • 当用户说"使用集群已安装的bwa/star/samtools"等时,不要假设软件已在PATH中
  • 必须使用 module load 加载对应的模块
  • 先用 module av 软件名 查看具体模块名

2. 极简串行/多线程作业模板(推荐)

#!/bin/bash
#BSUB -J job_name          # 作业名
#BSUB -n 4                  # 申请4个核心(根据bhosts结果调整)
#BSUB -R "span[hosts=1]"    # 限制在单节点运行
#BSUB -o %J.out             # 输出文件
#BSUB -e %J.err             # 错误文件
#BSUB -q normal             # 队列名

# 加载集群已安装的软件(如果有)
# module load SoftwareName/Version

# 使用 $LSB_DJOB_NUMPROC 自动获取申请的核心数
your_program --threads $LSB_DJOB_NUMPROC

极简原则:

  • ✅ 不设置 -M 和 rusage[mem=...](队列已自动管理)
  • ✅ 不设置 -W 时间限制
  • ✅ 使用 module load 加载集群已安装的软件
  • ✅ 只保留最核心的参数

重要: 生物信息软件大多不支持跨节点并行,务必使用 -R "span[hosts=1]" 限制在单节点运行。

2. 其他作业类型模板

MPI并行作业(多节点)

#!/bin/bash
#BSUB -J MPIJob
#BSUB -q normal
#BSUB -n 400
#BSUB -R "span[ptile=20]"   # 每节点20核
#BSUB -o stdout_%J.out
#BSUB -e stderr_%J.err

module load intel/2018.4
module load mpi/intel/2018.4

mpirun -np $LSB_DJOB_NUMPROC ./MPI_program

警告: 生物软件绝大多数不支持MPI,请勿随意使用多节点并行。

GPU作业

注意: 使用 GPU 队列前,需先向管理员申请 GPU 队列使用权限。

#!/bin/bash
#BSUB -J gpu_job
#BSUB -q gpu
#BSUB -n 4
#BSUB -R "span[hosts=1]"
#BSUB -gpu "num=1:mode=shared"
#BSUB -o %J.out
#BSUB -e %J.err

python train.py

交互式作业

# 基础交互
bsub -q interactive -Is bash

# 带X11转发(图形界面)
bsub -q interactive -XF -Is bash

限制:只能在interactive队列,最长48小时。

批量作业提交

方式1: Shell循环提交(推荐)

for sample in /path/to/data/*_1.fq.gz; do
    index=$(basename $sample | sed 's/_1.fq.gz//')
    bsub -J ${index} -n 8 -R span[hosts=1] -o %J.${index}.out \
        "your_program -t 8 -i $sample"
    sleep 10  # 避免瞬间提交过多
done

方式2: 流程脚本 + 批量提交(带依赖)

使用 -K 参数让作业按顺序执行:

# 在流程脚本内
bsub -K -J step1 -n 8 ... "command1"   # -K等待完成
bsub -K -J step2 -n 1 ... "command2"   # step1完成后执行
bsub -K -J step3 -n 2 ... "command3"

方式3: 数组作业

#BSUB -J array[1-100]  # 提交100个任务

# 使用 $LSB_JOBINDEX 区分不同任务
input="sample_${LSB_JOBINDEX}.fq"

作业查询与监控

作业状态说明

状态含义
PEND排队中
RUN运行中
DONE正常完成
EXIT异常退出
SSUSP系统挂起(节点内存不足等)
USUSP用户挂起

排查作业问题

查看排队原因:

bjobs -p <jobid>

常见原因:

  • User has reached the pre-user job slot limit: 用户作业数达队列上限
  • The user has reached his job slot limit: 用户总作业数达系统上限
  • The queue has reached its job slot limit: 队列总核数已满

检查作业效率:

# 比较 run_time (walltime) 和 cpu_used (cputime)
# 若 cpu_used << run_time * 核数,说明作业可能空跑或出错

作业运行异常/资源不合理检查原则:

当分析已完成作业的 bjobs 输出时,如果同时满足以下两个条件,必须提醒用户:

  1. walltime (实际运行时间) 远小于 cputime (CPU总时间)

    • walltime ≈ cputime → 程序实际上只使用了单核,多核心未被利用
    • 例如:申请了8核,walltime=1小时,cputime=1.2小时 → 说明只用到约1核
  2. 单核实际内存使用 < 队列单核内存限制

提醒内容应包括:

  • 指出资源申请不合理:程序没有充分利用申请的所有核心
  • 建议减少核数重新提交,这样排队更快且不浪费集群资源
  • 可能原因:程序本身不支持多线程,或多线程参数配置不正确

判断示例:

申请核数walltimecputime实际内存队列限制结论
8核60分钟70分钟2GB6GB提醒:只用到1核,建议减少核数
8核60分钟420分钟2GB6GB正常:有效利用了约7核
4核30分钟35分钟1GB6GB提醒:只用到1核,建议减少核数

作业控制

bkill <jobid>           # 终止作业
bkill 0                 # 终止用户所有作业
bstop <jobid>           # 挂起作业
bresume <jobid>         # 恢复作业
bmod -n 8 <jobid>       # 修改核心数
bmod -q high <jobid>    # 修改队列
btop <jobid>            # 作业移到队首
bbot <jobid>            # 作业移到队尾
brequeue <jobid>        # 重新提交作业

集群特定信息

队列选择

队列用途特点
normal普通计算默认队列,自动内存限制(6-10GB)
smp大内存大内存节点(s001-s006),自动内存限制(12-20GB)
high384GB内存大内存作业,自动内存限制(11-15GB)
q2680v2计算队列自动内存限制(6-10GB)
gpuGPU计算gpu01-04,自动内存限制(需确认)
parallelMPI并行跨节点并行,自动内存限制(需确认)
interactive交互调试限48小时,自动内存限制(30-500GB)

队列自动资源限制

所有队列都已配置资源限制,用户无需在脚本中设置:

队列内存限制时间限制说明
normal默认6GB,最大10GB无默认用户无需设置内存和时间
smp默认12GB,最大20GB无默认用户无需设置内存和时间
high默认11GB,最大15GB无默认用户无需设置内存和时间
q2680v2默认6GB,最大10GB无默认用户无需设置内存和时间
interactive默认30GB,最大500GB48小时仅限48小时交互

使用原则:

  • ✅ 不要设置 -M 和 rusage[mem=...](队列已自动管理)
  • ✅ 不要设置 -W 时间限制(除非是测试性作业)
  • ✅ 只设置 -n 核心数和 -q 队列名

内存超限处理:

  • 超出默认限制:作业会被挂起(SSUSP),稍后自动恢复
  • 超出最大限制:作业会被终止(EXIT)
  • 频繁被挂起:考虑换到smp/high队列或优化程序

重要系统变量

变量说明
$LSB_JOBID作业ID
$LSB_JOBINDEX数组作业索引
$LSB_DJOB_NUMPROC申请的核心数
$LSB_QUEUE队列名

参考资料

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

生成图文并茂的分析报告/实验报告/质检报告(固定模版)。当用户要求"生成报告/总结报告/实验报告/质检报告/QC报告",或分析流程收尾需要交付报告时使用。报告必须基于真实分析输出,包含固定章节结构、关键指标表格和真实结果图。

日本語の概要は準備中です。原文の説明を表示しています。

peacezha/HPClaw32026年10月11日 更新

Predicts ADMET properties using ADMETlab 3.0 (119 endpoints with uncertainty), ADMET-AI, DeepChem MolNet, and chemprop D-MPNN with explicit handling of OECD QSAR principles, applicability domain assessment, calibration, hERG/CYP/AMES gold-standard endpoints, and PAINS / Lipinski / Ro5 / Veber / BBB druglikeness filters. Use when filtering compounds for drug-likeness, prioritizing leads by predicted safety, or building an in-house ADMET QSAR model.

日本語の概要は準備中です。原文の説明を表示しています。

peacezha/HPClaw32026年10月11日 更新

Trim PCR primers from aligned reads in amplicon-panel BAMs using samtools ampliconclip. Use when processing SARS-CoV-2 ARTIC, hereditary cancer panels, ctDNA hot-spot panels, or any amplicon assay where primer-derived bases would falsely confirm reference at primer footprints.

日本語の概要は準備中です。原文の説明を表示しています。

peacezha/HPClaw32026年10月11日 更新

Filter alignments by flags, mapping quality, and regions using samtools view and pysam. Use when extracting specific reads, removing low-quality alignments, or subsetting to target regions.

日本語の概要は準備中です。原文の説明を表示しています。

peacezha/HPClaw32026年10月11日 更新

Create and use BAI/CSI indices for BAM/CRAM files using samtools and pysam. Use when enabling random access to alignment files or fetching specific genomic regions.

日本語の概要は準備中です。原文の説明を表示しています。

peacezha/HPClaw32026年10月11日 更新

Read, write, and convert multiple sequence alignment files using Biopython Bio.AlignIO. Supports Clustal, PHYLIP, Stockholm, FASTA, Nexus, and other alignment formats for phylogenetics and conservation analysis. Use when reading, writing, or converting alignment file formats.

日本語の概要は準備中です。原文の説明を表示しています。

peacezha/HPClaw32026年10月11日 更新

peacezha のスキルをすべて見る

このスキルの問題を報告する