> ## Documentation Index
> Fetch the complete documentation index at: https://docs.siflow.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 使用 Bisect Diagnose 诊断训练故障节点

> 使用 Bisect Diagnose 对多机训练的 hang、通信异常或慢节点问题进行二分诊断，定位疑似故障节点或故障通信环节。

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

## 诊断前确认

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

## 工作方式

一轮诊断通常包括：

1. **预检并锁定节点**：检查节点健康状态、GPU 资源和是否被其他诊断会话占用。预检通过后，平台会锁定相关节点，避免诊断过程被其他任务干扰。
2. **执行二分**：将节点拆分为 Group A 和 Group B，为每组创建独立子任务运行原始训练命令或诊断命令。
3. **判断故障侧**：根据两组任务是否复现异常，判断故障更可能位于哪一组。
4. **清理诊断会话**：诊断完成后，停止未完成的子任务并解除节点锁定。

如果某一组复现异常，平台会继续对该故障组执行二分，重复预检、分组运行和结果判断，直到范围收敛到疑似故障节点或无法继续二分。诊断详情通常以树状结构展示每轮子任务，每个子任务卡片会展示任务名称、所属 Group、状态和详情入口。

下图以 4 个节点为例，说明 Bisect Diagnose 如何沿复现异常的一侧继续二分。

<img src="https://mintcdn.com/siflow/avekptrv6O-LsLPz/ai-platform/training/media/bisect-diagnose-tree.svg?fit=max&auto=format&n=avekptrv6O-LsLPz&q=85&s=443b1bca8efaca85f4bc67570cb68934" alt="Bisect Diagnose 二分诊断树示意图" width="960" height="560" data-path="ai-platform/training/media/bisect-diagnose-tree.svg" />

诊断完成后请清理诊断会话，否则节点锁定可能影响后续任务调度。

## 判断故障侧

| Group A | Group B | 判定                             |
| ------- | ------- | ------------------------------ |
| 成功      | 失败      | 故障更可能在 Group B。                |
| 失败      | 成功      | 故障更可能在 Group A。                |
| 失败      | 失败      | 两侧都可能存在问题，或问题来自数据、配置、镜像等非节点因素。 |
| 成功      | 成功      | 故障可能已恢复，或属于偶发性问题。              |

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

## 诊断模式

| 模式       | 目标             | 结果                                               |
| -------- | -------------- | ------------------------------------------------ |
| fault 模式 | 定位故障节点或故障通信环节。 | 输出疑似故障节点或故障侧，并给出处理建议；通常用于隔离故障节点并重新调度。            |
| perf 模式  | 定位性能明显掉队的慢节点。  | 结合每轮分组的平均带宽、平均算力或平均 Model MFU 等指标判断慢节点，辅助原地恢复训练。 |

## 查看诊断结论

诊断结果通常会展示每轮分组结果、判定依据和处理建议。结论会区分故障节点和慢节点：故障节点通常表示复现失败或异常，可能在结果中以 `faultyNode` 表示；慢节点通常表示性能明显掉队但不一定直接失败，可能在结果中以 `slowNode` 表示。

对于 perf 模式，结果还可能包含每轮分组的平均带宽、平均算力或平均 Model MFU 等性能指标，用于判断是否存在明显掉队节点。

Bisect Diagnose 可以由您主动发起，也可能作为自动容错的处置动作触发。当自动容错需要进一步定位故障节点时，平台可能会通过 `NODE_BISECTION` 等处置动作拉起二分诊断；具体触发条件以当前容错配置和平台能力为准。

## 相关文档

* [排查训练任务问题](./troubleshoot-training-tasks)
* [使用自动容错恢复训练任务](./recover-training-tasks-with-auto-fault-tolerance)
