概述
LSF 的分布式应用集成框架 blaunch 提供了对跨多个执行主机运行的并行作业的完整控制。该框架能够在以下错误情况下执行作业清理:
- 节点崩溃
- 节点挂起
- 网络连接问题
- 意外的网络延迟问题
- 任务异常退出
作业清理包含的操作
- 清理所有执行节点上的残留进程
- 在所有执行节点上执行作业后清理操作(如清理 cgroups、Kerberos 凭据、重置 CPU 频率等)
- 从 LSF 中清理作业并标记退出状态
三种典型场景
| 场景 | 描述 |
|---|---|
| 首执行节点崩溃或挂起 | 作业的第一个执行节点出现问题 |
| 非首执行节点崩溃或挂起 | 其他执行节点出现问题 |
| 并行任务异常退出 | 任务进程非正常退出 |
场景一:首执行节点崩溃或挂起
REMOVE_HUNG_JOBS_FOR 参数
当首执行节点崩溃或挂起时,LSF 默认将运行中的作业标记为 UNKNOWN 状态,直到主机恢复后才清理作业。这可能导致挂起的作业长时间占用资源。
在 lsb.params 中配置 REMOVE_HUNG_JOBS_FOR 可以自动移除挂起的作业:
1
REMOVE_HUNG_JOBS_FOR = runlimit:host_unavail
支持的条件
1
2
3
4
5
all[,wait_time=10]
runlimit[,wait_time=5]:host_unavail[,wait_time=10]
host_unavail[,wait_time=10]:runlimit[,wait_time=5]
runlimit[,wait_time=5]
host_unavail[,wait_time=10]
条件组合示例
1
2
3
4
5
# 超过运行限制或主机不可用10分钟后移除
REMOVE_HUNG_JOBS_FOR = runlimit:host_unavail
# 自定义等待时间
REMOVE_HUNG_JOBS_FOR = runlimit[,wait_time=5]:host_unavail[,wait_time=10]
心跳与超时参数
非首执行节点可以通过心跳机制检测首执行节点故障并触发清理。
| 参数 | 配置位置 | 说明 | 默认值 |
|---|---|---|---|
DJOB_HB_INTERVAL |
lsb.applications | 心跳消息发送间隔 | 120秒/1000节点 |
DJOB_RU_INTERVAL |
lsb.applications | 资源使用报告间隔 | 300秒/1000节点 |
LSF_RES_ALIVE_TIMEOUT |
lsf.conf | 心跳响应超时时间 | 60秒 |
提示:对于大型长时间运行的并行作业,可以将
LSB_DJOB_RU_INTERVAL设置为较大值或设为 0 禁用,以减少网络带宽和 CPU 消耗。但LSB_DJOB_HB_INTERVAL不能禁用。
场景二:非首执行节点崩溃或挂起
LSB_FANOUT_TIMEOUT_PER_LAYER 参数
并行作业执行前,LSF 需要在每个执行主机上进行设置并传播作业信息。如果执行主机故障,扇出框架使用超时值来确定何时回滚作业调度决策。
1
2
# lsf.conf 中配置,默认20秒/层
LSB_FANOUT_TIMEOUT_PER_LAYER=60 # 推荐用于1000+节点的作业
故障诊断
如果 bhist -l 显示作业在 starting 和 pending 状态之间反复跳转,可能需要调整此参数:
1
2
3
4
$ bhist -l 100
...
Mon Oct 21 19:20:43: Starting (Pid 19137);
Mon Oct 21 19:21:06: Pending: Failed to send fan-out information to other SBDs;
LSF_DJOB_TASK_REG_WAIT_TIME 参数
并行作业启动时,首执行节点需要接收其他节点的注册消息。超时后 LSF 开始清理作业。
1
2
# lsf.conf 中配置,默认300秒
LSF_DJOB_TASK_REG_WAIT_TIME=600 # 推荐用于5000+节点的作业
故障诊断
检查 res.log 中的超时消息:
1
2
$ grep "waiting for all tasks to register" res.log.hostA
Oct 20 20:20:29 2013 ... job 101 timed out <20> waiting for all tasks to register, registered <315> out of <320>
DJOB_COMMFAIL_ACTION 参数
作业成功启动后,LSF 持续监控首节点与其他执行节点的连接。检测到连接失败时,默认终止整个作业。
在 lsb.applications 中配置自定义行为:
1
2
3
4
Begin Application
NAME = myApp
DJOB_COMMFAIL_ACTION=IGNORE_COMMFAIL
End Application
场景三:并行任务异常退出
RTASK_GONE_ACTION 参数
某些任务异常退出时,LSF 默认终止并清理整个作业。在 lsb.applications 中可自定义此行为:
1
2
3
4
5
6
Begin Application
NAME = myApp
DJOB_COMMFAIL_ACTION=IGNORE_COMMFAIL
RTASK_GONE_ACTION="IGNORE_TASKCRASH KILLJOB_TASKEXIT"
DESCRIPTION = Application profile example
End Application
使用示例
1
2
# 使用应用配置文件提交作业
$ bsub -app myApp -n4 -R "span[ptile=2]" mpiexec.hydra ./cpi
配置生效命令
| 配置文件 | 生效命令 |
|---|---|
lsb.params |
badmin reconfig |
lsb.applications |
badmin reconfig |
lsf.conf (sbatchd参数) |
badmin hrestart all |
lsf.conf (RES参数) |
lsadmin resrestart all |
注意:修改应用配置文件中的心跳参数仅对新提交的作业生效,不影响已运行的作业。