Skip to main content
Bisect Diagnose 适合多机训练出现 hang、通信异常或疑似慢节点时定位问题节点。它会将参与训练的节点拆成两组,分别运行诊断任务,并根据哪一组复现异常逐轮缩小范围,直到定位到疑似故障节点或异常通信环节。

诊断前确认

  • 任务类型为 PyTorchJob。
  • 任务运行在 2 个或以上节点。
  • 任务状态为 运行中、失败、成功 或 异常。
  • 已评估诊断对当前任务的影响。对 运行中 任务发起诊断时,平台可能会先停止当前任务,再基于当前机器列表启动新的诊断任务;因此应先确认训练输出、checkpoint 或重要日志已写入持久化 Volume。
  • 诊断完成后需要清理诊断会话,避免节点锁定影响后续调度。

工作方式

一轮诊断通常包括:
  1. 预检并锁定节点:检查节点健康状态、GPU 资源和是否被其他诊断会话占用。预检通过后,平台会锁定相关节点,避免诊断过程被其他任务干扰。
  2. 执行二分:将节点拆分为 Group A 和 Group B,为每组创建独立子任务运行原始训练命令或诊断命令。
  3. 判断故障侧:根据两组任务是否复现异常,判断故障更可能位于哪一组。
  4. 清理诊断会话:诊断完成后,停止未完成的子任务并解除节点锁定。
如果某一组复现异常,平台会继续对该故障组执行二分,重复预检、分组运行和结果判断,直到范围收敛到疑似故障节点或无法继续二分。诊断详情通常以树状结构展示每轮子任务,每个子任务卡片会展示任务名称、所属 Group、状态和详情入口。 下图以 4 个节点为例,说明 Bisect Diagnose 如何沿复现异常的一侧继续二分。 Bisect Diagnose 二分诊断树示意图 诊断完成后请清理诊断会话,否则节点锁定可能影响后续任务调度。

判断故障侧

当某组只剩 1 个节点且仍复现故障时,通常可将该节点作为疑似故障节点继续处理。

诊断模式

查看诊断结论

诊断结果通常会展示每轮分组结果、判定依据和处理建议。结论会区分故障节点和慢节点:故障节点通常表示复现失败或异常,可能在结果中以 faultyNode 表示;慢节点通常表示性能明显掉队但不一定直接失败,可能在结果中以 slowNode 表示。 对于 perf 模式,结果还可能包含每轮分组的平均带宽、平均算力或平均 Model MFU 等性能指标,用于判断是否存在明显掉队节点。 Bisect Diagnose 可以由您主动发起,也可能作为自动容错的处置动作触发。当自动容错需要进一步定位故障节点时,平台可能会通过 NODE_BISECTION 等处置动作拉起二分诊断;具体触发条件以当前容错配置和平台能力为准。

相关文档