概述

LSF 的分布式应用集成框架 blaunch 提供了对跨多个执行主机运行的并行作业的完整控制。该框架能够在以下错误情况下执行作业清理:

  • 节点崩溃
  • 节点挂起
  • 网络连接问题
  • 意外的网络延迟问题
  • 任务异常退出

作业清理包含的操作

  1. 清理所有执行节点上的残留进程
  2. 在所有执行节点上执行作业后清理操作(如清理 cgroups、Kerberos 凭据、重置 CPU 频率等)
  3. 从 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

注意:修改应用配置文件中的心跳参数仅对新提交的作业生效,不影响已运行的作业。

参考资料

  1. IBM Documentation - Cleaning up parallel job execution problems
  2. IBM Documentation - Best practices and tips for LSF