(可选)构造故障

本章节将指导用户构造简单的故障,包括节点故障、参数面网络故障和业务面故障。

构造芯片故障存在安全风险,如需构造请联系华为工程师。

构造节点故障

通过重启训练节点,模拟节点下电导致节点心跳丢失。该故障在节点重启完成后可自动恢复。

  1. 在训练任务正常训练出epoch后,登录正在训练的节点。
  2. 执行以下命令,重启该训练节点,模拟节点心跳丢失故障。

    reboot

  3. 在Master节点多次执行以下命令,查看Pod状态。

    kubectl get pod -A

    可以看到Pod状态从Terminating到Pending,最后为Running状态,表示训练任务已经重新拉起。

  4. 在Master节点执行以下命令,查看训练日志,记录续训成功时间。

    kubectl logs -n 命令空间名称 {pod名字}
    回显示例如下,表示发生故障时,使用最近保存的第39步的checkpoint文件恢复,实现训练任务第40个epoch开始继续训练。
    ....2024-06-01 22:18:45,025:INFO:epoch: [40/90] loss: 3.465011, epoch time: 71.582 s, per step time: 1491.285 ms
    2024-06-01 22:18:49,453:INFO:epoch: [41/90] loss: 3.396700, epoch time: 4.428 s, per step time: 92.245 ms

构造参数面网络故障

通过断开NPU网络链路模拟的参数面网络故障。NPU网络故障不影响单机训练任务。用户在断开链路后需手动恢复,否则该故障会一直存在。

  1. 在训练任务正常训练出epoch后,登录正在训练的节点。
  2. 执行以下命令,构造NPU网络链路故障。

    hccn_tool -i {device_id} -link -s down

    device_id为NPU的ID,可以通过npu-smi info命令查看NPU的ID。

  3. 执行以下命令,查看NPU链路状态。

    hccn_tool -i {device_id} -net_health -g
    回显示例如下,表示NPU网络链路故障构造成功。
    net health status:Fault

  4. 在Master节点多次执行以下命令,查看Pod状态。

    kubectl get pod -A

    可以看到Pod状态从Terminating到Pending,最后为Running状态,表示训练任务已经重新拉起。

  5. 在Master节点执行以下命令,查看训练日志,记录续训成功时间。

    kubectl logs -n 命令空间名称 {pod名字}
    回显示例如下,表示发生故障时,使用最近保存的第39步的checkpoint文件恢复,实现训练任务第40个epoch开始继续训练。
    ....2024-06-01 22:18:45,025:INFO:epoch: [40/90] loss: 3.465011, epoch time: 71.582 s, per step time: 1491.285 ms
    2024-06-01 22:18:49,453:INFO:epoch: [41/90] loss: 3.396700, epoch time: 4.428 s, per step time: 92.245 ms

  6. 执行以下命令,恢复NPU网络链路故障。

    hccn_tool -i {device_id} -cfg recovery

  7. 执行以下命令,查看NPU链路状态。

    hccn_tool -i {device_id} -net_health -g
    回显示例如下,表示NPU网络链路故障已经恢复。
    net health status:Success

构造业务面故障

通过删除训练进程,模拟业务面故障。

  1. 在训练任务正常训练出epoch后,登录正在训练的节点。
  2. 执行以下命令,使用训练启动脚本,查询训练进程信息。

    ps -ef | grep python| grep 训练启动脚本.py

  3. 执行以下命令,手动删除Pid最小的训练进程。

    kill -9 pid

  4. 在Master节点多次执行以下命令,查看Pod状态。

    kubectl get pod -A

    可以看到Pod状态从Terminating到Pending,最后为Running状态,表示训练任务已经重新拉起。

  5. 在Master节点执行以下命令,查看训练日志,记录续训成功时间。

    kubectl logs -n 命令空间名称 {pod名字}

    回显示例如下,表示发生故障时,使用最近保存的第39步的checkpoint文件恢复,实现训练任务第40个epoch开始继续训练。

    ....2024-06-01 22:18:45,025:INFO:epoch: [40/90] loss: 3.465011, epoch time: 71.582 s, per step time: 1491.285 ms
    2024-06-01 22:18:49,453:INFO:epoch: [41/90] loss: 3.396700, epoch time: 4.428 s, per step time: 92.245 ms