一、LSF 的核心作用
- 作业调度
- 将用户提交的计算任务(作业)动态分配到集群中的空闲计算节点。
- 支持优先级调度、资源预留、抢占式调度等策略。
- 资源管理
- 实时监控集群资源(CPU、内存、GPU、存储等)使用情况。
- 根据作业需求自动分配资源,避免资源争用。
- 负载均衡
- 通过动态调整作业分布,最大化集群资源利用率。
- 作业依赖管理
- 支持作业间的依赖关系(如某作业需在其他作业完成后启动)。
- 容错与日志管理
- 自动重试失败作业,记录作业执行日志。
二、LSF 的典型应用场景
场景 | 说明 |
---|---|
科学计算 | 如分子动力学模拟、气候建模、基因测序分析等需大规模并行计算的任务。 |
工程仿真 | 有限元分析(FEA)、计算流体力学(CFD)等需要多节点协作的仿真任务。 |
大数据处理 | Hadoop/Spark 任务调度、ETL 数据处理等。 |
AI/深度学习 | 分布式训练任务(如 TensorFlow/PyTorch)的 GPU 资源分配与管理。 |
企业级批处理 | 金融风险分析、日志批量处理等周期性任务。 |
三、LSF 常用命令与配置实例
1. 提交作业
# 提交一个单核作业到默认队列,指定输出日志
bsub -o job.log -J my_job "python script.py"
# 提交多核作业(4核),指定内存(8GB)和队列(normal)
bsub -n 4 -M 8192 -q normal -R "span[hosts=1]" "mpirun ./simulation"
# 提交 GPU 作业(2块 GPU)
bsub -gpu "num=2:mode=shared" -q gpu_queue "python train.py"
2. 查看作业状态
# 查看所有作业
bjobs -a
# 查看特定作业详细信息
bjobs -l 12345 # 12345 为作业ID
# 查看队列资源占用
bqueues -l normal
3. 终止作业
# 终止单个作业
bkill 12345
# 终止用户所有作业
bkill -u username 0
4. 查看集群节点状态
# 显示所有节点资源使用情况
bhosts
# 显示节点详细信息(包含 GPU 状态)
lshosts -w # 显示节点负载
lsload # 显示节点实时负载
5. 作业依赖配置
# 提交一个依赖作业(job2 需在 job1 完成后运行)
job1_id=$(bsub -J job1 "sleep 60" | awk '{print $2}' | tr -d '<>' )
bsub -w "done($job1_id)" -J job2 "python step2.py"
四、作业脚本示例
以下是一个典型的 LSF 作业脚本 submit.lsf
:
#!/bin/bash
#BSUB -J simulation # 作业名称
#BSUB -q high_priority # 指定队列
#BSUB -n 8 # 申请 8 核
#BSUB -R "rusage[mem=4096]" # 每核内存 4GB
#BSUB -o %J.out # 输出日志
#BSUB -e %J.err # 错误日志
# 加载环境模块
module load intel/2020
module load openmpi/4.0
# 执行任务
mpirun -np 8 ./my_simulation
提交脚本:
bsub < submit.lsf
五、关键配置文件
- LSF 集群配置
- 主配置文件:
lsf.conf
(定义集群参数,如调度策略、资源限制)。 - 队列配置:
lsb.queues
(定义队列资源配额、权限等)。
- 主配置文件:
- 资源模板
lsf.shared
:定义共享资源(如 GPU、软件许可证)。
六、常见问题排查
- 作业长时间排队
- 检查队列资源配额:
bqueues -l queue_name
。 - 调整作业资源请求(如减少核心数)。
- 检查队列资源配额:
- 作业失败
- 查看错误日志:
cat job_id.err
。 - 检查命令语法或依赖环境是否配置正确。
- 查看错误日志:
- 节点资源不足
- 使用
bhosts
和lsload
监控节点负载。 - 联系管理员扩展集群资源。
- 使用
通过上述命令和配置,用户可以高效管理 HPC 集群任务,充分利用计算资源。对于复杂场景,建议结合 LSF 文档和实际需求进一步优化调度策略。