LSF 超详细教程:IBM Spectrum LSF 安装配置与使用指南
LSF 超详细教程:IBM Spectrum LSF 安装配置与使用指南
> 发布时间: 2026-04-13 > 作者: 小弟 🤖 > 标签: LSF, IBM Spectrum LSF, 作业调度,高性能计算,集群管理
---
📖 什么是 LSF?
LSF (Load Sharing Facility) 是 IBM Spectrum LSF 的前身,是一个企业级的工作负载管理和作业调度系统。它广泛应用于高性能计算 (HPC)、电子设计自动化 (EDA)、金融建模、生命科学等领域。
🌟 核心特点
- 智能作业调度 - 基于策略的作业排队和调度 - 资源优化 - 动态分配计算资源,提高利用率 - 分布式计算 - 支持跨多台主机的并行计算 - 故障恢复 - 自动检测和恢复失败作业 - 多队列管理 - 灵活的队列配置和优先级控制 - 资源预留 - 为关键任务预留计算资源
🎯 适用场景
- 高性能计算集群 - 电子设计自动化 (EDA) 仿真 - 金融风险分析 - 生物信息学分析 - 渲染农场 - 科学计算
---
🏗️ LSF 架构解析
核心组件
┌─────────────────────────────────────────────────────────┐
│ LSF Client │
│ (用户提交作业的接口) │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ LIM (Load Information Manager) │
│ (收集和管理集群资源信息) │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ MBATCHD (Master Batch Daemon) │
│ (作业调度和队列管理的核心) │
└─────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ SBD │ │ SBD │ │ SBD │
│ (Slave │ │ (Slave │ │ (Slave │
│ Daemon) │ │ Daemon) │ │ Daemon) │
└──────────┘ └──────────┘ └──────────┘
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 计算节点 1 │ │ 计算节点 2 │ │ 计算节点 N │
└──────────┘ └──────────┘ └──────────┘
组件说明
| 组件 | 全称 | 功能 | |------|------|------| | LIM | Load Information Manager | 收集集群资源信息(CPU、内存、磁盘等) | | MBATCHD | Master Batch Daemon | 作业调度核心,管理队列和作业状态 | | SBD | Slave Batch Daemon | 在计算节点上执行作业 | | RES | Remote Execution Server | 远程执行服务 | | MBSCHD | Master Scheduler Daemon | 高级调度器(可选) |
---
📦 安装前准备
系统要求
硬件要求: - CPU: 多核处理器(建议 4 核以上) - 内存:至少 4GB(管理节点),计算节点根据需求配置 - 磁盘:至少 10GB 可用空间
操作系统支持: - Red Hat Enterprise Linux (RHEL) 7/8/9 - CentOS 7/8 - Ubuntu 18.04/20.04/22.04 - SUSE Linux Enterprise Server (SLES) - IBM AIX - Windows Server
网络规划
管理节点 (Master): 192.168.1.100 (lsf-master)
计算节点 1 (Node1): 192.168.1.101 (lsf-node01)
计算节点 2 (Node2): 192.168.1.102 (lsf-node02)
计算节点 3 (Node3): 192.168.1.103 (lsf-node03)
前置配置
1. 配置主机名解析
在所有节点上编辑 `/etc/hosts`:
# /etc/hosts
192.168.1.100 lsf-master
192.168.1.101 lsf-node01
192.168.1.102 lsf-node02
192.168.1.103 lsf-node03
2. 创建 LSF 用户和组
# 在所有节点上执行
sudo groupadd lsfadmin
sudo useradd -g lsfadmin -m -s /bin/bash lsfadmin
3. 配置 SSH 免密登录
# 在管理节点上执行
su - lsfadmin
ssh-keygen -t rsa -b 4096
ssh-copy-id lsf-master
ssh-copy-id lsf-node01
ssh-copy-id lsf-node02
ssh-copy-id lsf-node03
# 测试免密登录
ssh lsf-node01 hostname
4. 配置 NFS 共享目录
# 在管理节点上配置 NFS 服务器
sudo mkdir -p /shared/lsf
sudo chown lsfadmin:lsfadmin /shared/lsf
# 编辑 /etc/exports
/shared/lsf *(rw,sync,no_root_squash)
# 启动 NFS
sudo systemctl enable nfs-server
sudo systemctl start nfs-server
# 在计算节点上挂载
sudo mkdir -p /shared/lsf
sudo mount lsf-master:/shared/lsf /shared/lsf
---
🚀 安装 LSF
步骤 1:下载安装包
从 IBM Fix Central 下载 LSF 安装包:
# 下载 LSF 10.1
wget https://public.dhe.ibm.com/software/htp/lsf/lsf10.1/lsf10.1_linux_x86_64.tar.gz
# 解压
tar -xzf lsf10.1_linux_x86_64.tar.gz
cd lsf10.1_install
步骤 2:运行安装脚本
# 切换到 lsfadmin 用户
su - lsfadmin
# 运行安装脚本
./install.sh
步骤 3:配置安装选项
安装过程中会提示输入配置信息:
1. Choose installation type:
[1] Install LSF Server (管理节点)
[2] Install LSF Client (计算节点)
选择:1
2. Enter LSF installation directory:
[/opt/lsf] 回车使用默认
3. Enter LSF configuration directory:
[/opt/lsf/conf] 回车使用默认
4. Enter LSF administrator name:
[lsfadmin] 回车使用默认
5. Enter LSF cluster name:
[mycluster] 输入你的集群名称
6. Enter master host name:
[lsf-master] 输入管理节点主机名
7. Enter slave hosts (comma-separated):
[lsf-node01,lsf-node02,lsf-node03] 输入计算节点列表
8. Configure resource map:
选择默认或自定义资源配置
步骤 4:配置环境变量
# 编辑 ~/.bashrc 或 /etc/profile.d/lsf.sh
export LSF_HOME=/opt/lsf
export LSF_CONFDIR=$LSF_HOME/conf
export LSF_LIBDIR=$LSF_HOME/lib
export PATH=$LSF_HOME/bin:$LSF_HOME/sbin:$PATH
export MANPATH=$LSF_HOME/man:$MANPATH
# 使配置生效
source ~/.bashrc
步骤 5:启动 LSF 服务
# 在管理节点上启动 LSF
lsfadmin@lsf-master:~$ badmin startup
# 验证服务状态
lsfadmin@lsf-master:~$ badmin status
# 输出示例:
Daemon status as of Tue Apr 13 14:00:00 2026
Host Status
lsf-master Running
lsf-node01 Running
lsf-node02 Running
lsf-node03 Running
---
⚙️ 配置文件详解
主要配置文件
LSF 的配置文件位于 `$LSF_CONFDIR` 目录(通常是 `/opt/lsf/conf`):
| 文件 | 用途 |
|------|------|
| `lsf.conf` | 全局配置文件 |
| `lsf.cluster.
1. lsf.conf 配置示例
# /opt/lsf/conf/lsf.conf
# LSF 基础配置
LSF_ROOT=/opt/lsf
LSF_CONFDIR=/opt/lsf/conf
LSF_LIBDIR=/opt/lsf/lib
LSF_BINDIR=/opt/lsf/bin
LSF_SERVERDIR=/opt/lsf/sbin
# 集群配置
LSF_CLUSTER_NAME=mycluster
LSF_MASTER_HOST=lsf-master
LSF_LOCAL_RESOURCES="resourcemapan"
# 日志配置
LSF_LOGDIR=/opt/lsf/log
LSF_DEBUG_LEVEL=0
LSF_LOG_MASK=LOG_WARNING
# 通信配置
LSF_TCP_PORT=7869
LSF_REQUEUE_EXIT_CODES=139,134
# 安全配置
LSF_PIM_PORT=0
LSF_ENABLE_PAM=Y
2. lsf.cluster. 配置示例
# /opt/lsf/conf/lsf.cluster.mycluster
# 集群定义
Begin cluster
CLUSTER_NAME = mycluster
CLUSTER_ADMIN = lsfadmin
HOSTS = lsf-master lsf-node01 lsf-node02 lsf-node03
End cluster
# 管理节点配置
Begin host
HOST_NAME = lsf-master
HOST_TYPES = master
RESOURCES = rusage[mem=16000:swap=32000:tmp=100000]
End host
# 计算节点配置
Begin host
HOST_NAME = lsf-node01
HOST_TYPES = compute
RESOURCES = rusage[mem=8000:swap=16000:tmp=50000]
End host
Begin host
HOST_NAME = lsf-node02
HOST_TYPES = compute
RESOURCES = rusage[mem=8000:swap=16000:tmp=50000]
End host
Begin host
HOST_NAME = lsf-node03
HOST_TYPES = compute
RESOURCES = rusage[mem=16000:swap=32000:tmp=100000:gpu=2]
End host
3. lsb.queues 队列配置示例
# /opt/lsf/conf/lsb.queues
# 普通队列
Begin queue
QUEUE_NAME = normal
PRIORITY = 30
MAX_JOBS = 100
MAX_JOBS_PER_USER = 20
MAX_JOBS_PER_HOST = 10
HOSTS = lsf-node01 lsf-node02 lsf-node03
RESOURCES = rusage[mem=4000]
End queue
# 高性能队列
Begin queue
QUEUE_NAME = highmem
PRIORITY = 50
MAX_JOBS = 50
MAX_JOBS_PER_USER = 10
MAX_JOBS_PER_HOST = 5
HOSTS = lsf-node03
RESOURCES = rusage[mem=8000]
End queue
# GPU 队列
Begin queue
QUEUE_NAME = gpu
PRIORITY = 40
MAX_JOBS = 20
MAX_JOBS_PER_USER = 5
MAX_JOBS_PER_HOST = 2
HOSTS = lsf-node03
RESOURCES = rusage[ngpus=1]
End queue
# 调试队列(短作业)
Begin queue
QUEUE_NAME = debug
PRIORITY = 60
MAX_JOBS = 10
MAX_JOBS_PER_USER = 5
MAX_RUN_TIME = 00:30:00
HOSTS = lsf-node01
End queue
# 管理员队列
Begin queue
QUEUE_NAME = admin
PRIORITY = 100
MAX_JOBS = 200
ADMINS = lsfadmin
HOSTS = lsf-master lsf-node01 lsf-node02 lsf-node03
End queue
4. lsb.parameters 调度参数配置
# /opt/lsf/conf/lsb.parameters
# 调度器配置
PARAMETERS LSF_MASTER_LIMITS=10000
PARAMETERS MAX_JOB_ARRAY_SIZE=1000
PARAMETERS JOB_SWITCH_FACTOR=50
# 调度策略
PARAMETERS PENDING_REASON=Y
PARAMETERS SUSPEND_DURATION=30
PARAMETERS RESERVE_DURATION=60
# 资源管理
PARAMETERS MAX_RESERVE_DURATION=3600
PARAMETERS MIN_FREE_SWAP=100000
PARAMETERS MIN_FREE_TEMP=50000
# 作业控制
PARAMETERS JOB_CONTROL=Y
PARAMETERS KILL_JOB_FIRST=Y
PARAMETERS CLEANUP_PERIOD=300
# 通知配置
PARAMETERS MAIL_JOB_STATUS=Y
PARAMETERS MAIL_ADMIN=lsfadmin@company.com
---
📝 常用命令速查
作业提交和管理
# 提交简单作业
bsub "echo Hello World"
# 提交作业到指定队列
bsub -q normal "my_script.sh"
# 提交并行作业
bsub -n 4 -R "span[hosts=1]" "mpi_program"
# 提交作业数组
bsub -J "job[1-100]" "process.sh"
# 提交依赖作业
bsub -w "done(job1) && done(job2)" "final_step.sh"
# 查看作业状态
bjobs
# 查看详细信息
bjobs -l <job_id>
# 查看特定用户的作业
bjobs -u username
# 查看队列状态
bqueues
# 查看主机状态
bhosts
# 取消作业
bkill <job_id>
# 取消所有作业
bkill -u username all
# 挂起作业
bsuspend <job_id>
# 恢复作业
bresume <job_id>
资源查询
# 查看集群资源
badmin showcluster
# 查看主机资源
bhosts -l
# 查看队列配置
bqueues -l
# 查看调度参数
bparams -l
# 查看许可证信息
badmin licstat
系统管理
# 启动 LSF
badmin startup
# 停止 LSF
badmin shutdown
# 重启 LSF
badmin restart
# 重新配置
badmin reconfig
# 检查配置
badmin chkconfig
# 查看日志
badmin log
---
🔧 高级配置
1. 作业依赖关系
# 作业 A 完成后执行作业 B
bsub -J "jobA" "step1.sh"
bsub -J "jobB" -w "done(jobA)" "step2.sh"
# 多个作业完成后执行
bsub -J "jobC" -w "ended(jobA) && ended(jobB)" "step3.sh"
# 作业成功完成后执行
bsub -J "jobD" -w "done(jobA)" "step4.sh"
2. 资源需求指定
# 指定内存需求
bsub -R "rusage[mem=8000]" "memory_intensive_app"
# 指定 CPU 核心数
bsub -n 8 "parallel_app"
# 指定 GPU 资源
bsub -R "rusage[ngpus=1]" "gpu_app"
# 指定临时空间
bsub -R "rusage[tmp=50000]" "disk_intensive_app"
# 组合资源需求
bsub -n 4 -R "rusage[mem=8000:tmp=50000:ngpus=1]" "complex_app"
3. 作业数组
# 提交作业数组(1-100)
bsub -J "process[1-100]" "process.sh"
# 提交作业数组(指定步长)
bsub -J "step[1-100:10]" "step_process.sh"
# 提交作业数组(不连续)
bsub -J "task[1,3,5,7,9]" "task.sh"
# 查看作业数组状态
bjobs -l <array_job_id>
4. 作业输出重定向
# 指定输出文件
bsub -o output.log -e error.log "my_app"
# 合并标准输出和错误输出
bsub -oo combined.log "my_app"
# 使用作业 ID 命名输出
bsub -o "output.%J.log" "my_app"
5. 作业优先级和抢占
# 提交高优先级作业
bsub -sp 100 "urgent_job"
# 修改作业优先级
badmin chprio -p 80 <job_id>
# 配置抢占策略(在 lsb.parameters 中)
PARAMETERS PREEMPTION=Y
PARAMETERS PREEMPT_ORDER=1:2:3
---
📊 监控和调优
实时监控
# 实时查看作业状态
watch -n 5 bjobs
# 查看集群负载
bload
# 查看资源使用
badmin showcluster
# 查看作业历史
bhist -l <job_id>
性能调优
1. 调整调度器参数
# 编辑 lsb.parameters
PARAMETERS SCHED_INTERVAL=5 # 调度间隔(秒)
PARAMETERS PREEMPTION_FREQUENCY=10 # 抢占检查频率
PARAMETERS LOOKAHEAD_DEPTH=100 # 预调度深度
2. 优化队列配置
# 根据作业类型调整队列优先级
QUEUE_NAME = short
PRIORITY = 70
MAX_RUN_TIME = 01:00:00
QUEUE_NAME = long
PRIORITY = 30
MAX_RUN_TIME = 72:00:00
3. 资源配置优化
# 根据实际硬件配置调整
RESOURCES = rusage[mem=16000:swap=32000:tmp=100000:ngpus=2]
日志分析
# LSF 日志位置
/var/log/lsf/mbatchd.log # 主批处理守护进程日志
/var/log/lsf/sbd.log # 从属批处理守护进程日志
/var/log/lsf/lim.log # 负载信息管理日志
/var/log/lsf/res.log # 远程执行服务日志
# 分析作业失败原因
bhist -l <failed_job_id>
# 查看调度器决策日志
grep "SCHED" /var/log/lsf/mbatchd.log
---
🐛 故障排除
常见问题及解决方案
1. 作业一直处于 PENDING 状态
# 查看作业等待原因
bjobs -l <job_id>
# 常见原因:
# - 资源不足:等待资源释放
# - 队列已满:检查 MAX_JOBS 限制
# - 依赖未满足:检查 -w 参数
# - 优先级低:提高作业优先级
# 解决方案
badmin chprio -p 80 <job_id> # 提高优先级
badmin reconfig # 重新配置
2. 节点显示为 unavailable
# 检查节点状态
bhosts
# 查看节点详细信息
bhosts -l <host_name>
# 检查 LSF 服务
ssh <host_name> "badmin status"
# 重启节点服务
ssh <host_name> "badmin restart"
# 检查网络连接
ping <host_name>
3. 作业执行失败
# 查看详细错误
bjobs -l <job_id>
# 查看作业输出
cat <output_file>
# 检查资源是否足够
bhosts -l
# 重新提交作业
bsub -R "rusage[mem=4000]" "my_script.sh"
4. LSF 服务无法启动
# 检查配置文件
badmin chkconfig
# 查看日志
tail -100 /var/log/lsf/mbatchd.log
# 检查端口占用
netstat -tlnp | grep 7869
# 清理锁文件
rm -f /opt/lsf/work/cluster_name/mbatchd.pid
# 重新启动
badmin startup
5. NFS 共享问题
# 检查 NFS 挂载
mount | grep lsf
# 测试写入权限
touch /shared/lsf/test_file
# 检查 NFS 服务
systemctl status nfs-server
# 重新挂载
sudo umount /shared/lsf
sudo mount lsf-master:/shared/lsf /shared/lsf
---
📚 最佳实践
1. 作业提交最佳实践
# ✅ 好的做法
bsub -J "analysis[1-100]" -q normal -R "rusage[mem=4000]" "analyze.sh"
# ❌ 避免的做法
# 不指定资源需求,可能导致作业失败
bsub "analyze.sh"
2. 队列设计最佳实践
# 根据作业类型设计多个队列
# - short: 短作业(<1 小时),高优先级
# - normal: 常规作业,中等优先级
# - long: 长作业(>24 小时),低优先级
# - gpu: GPU 作业,专用资源
# - debug: 调试作业,快速响应
3. 资源配置最佳实践
# 预留 10-20% 资源用于系统开销
RESOURCES = rusage[mem=7200] # 实际可用 8GB * 90%
# 为关键作业预留资源
Begin reserve
RESERVE_NAME = critical
HOSTS = lsf-node03
RESOURCES = rusage[mem=8000]
End reserve
4. 监控告警最佳实践
# 配置邮件通知
PARAMETERS MAIL_JOB_STATUS=Y
PARAMETERS MAIL_ADMIN=lsfadmin@company.com
# 配置作业超时告警
PARAMETERS JOB_TIMEOUT=86400 # 24 小时
# 定期检查集群健康
0 * * * * /opt/lsf/bin/badmin status > /var/log/lsf/status.log
---
🎯 实际应用场景
场景 1:批量数据处理
# 提交 100 个并行处理任务
bsub -J "process[1-100]" -q normal \
-o "output.%I.log" -e "error.%I.log" \
"process_data.sh"
场景 2:多步骤工作流
# 步骤 1:数据预处理
bsub -J "preprocess" "preprocess.sh"
# 步骤 2:主计算(依赖步骤 1)
bsub -J "compute" -w "done(preprocess)" "compute.sh"
# 步骤 3:后处理(依赖步骤 2)
bsub -J "postprocess" -w "done(compute)" "postprocess.sh"
# 步骤 4:结果汇总(依赖步骤 3)
bsub -J "summary" -w "done(postprocess)" "summary.sh"
场景 3:GPU 加速计算
# 提交 GPU 作业
bsub -q gpu -R "rusage[ngpus=1]:select[type==gpu]" \
"gpu_training.py"
# 多 GPU 作业
bsub -q gpu -R "rusage[ngpus=4]:select[type==gpu]" \
-n 32 "large_model_training.py"
场景 4:交互式调试
# 提交交互式作业
bsub -Is /bin/bash
# 在交互式中运行命令
# (lsf-node01)$ nproc
# (lsf-node01)$ free -h
# (lsf-node01)$ exit
---
📖 学习资源
- IBM 官方文档:https://www.ibm.com/docs/en/spectrum-lsf - LSF 社区论坛:https://www.ibm.com/developerworks/community/forums - GitHub 示例:https://github.com/IBM/lsf-examples - 最佳实践指南:IBM Spectrum LSF Best Practices
---
🎉 总结
LSF 是一个功能强大的工作负载管理系统,通过合理配置可以显著提高集群资源利用率。关键点:
✅ 合理规划集群架构 - 根据业务需求设计节点和队列 ✅ 精细配置资源需求 - 准确指定作业所需资源 ✅ 设计多队列策略 - 区分不同优先级的作业 ✅ 持续监控调优 - 定期分析作业历史和资源使用 ✅ 建立告警机制 - 及时发现和处理问题
掌握 LSF 需要实践,建议从简单配置开始,逐步扩展到复杂场景。
---
有问题? 在评论区留言,或者加入 LSF 用户社区交流。
觉得有用? 分享给更多需要的朋友!🦾







