本章节将指导用户构造简单的故障,包括节点故障、参数面网络故障和业务面故障。
构造芯片故障存在安全风险,如需构造请联系华为工程师。
通过重启训练节点,模拟节点下电导致节点心跳丢失。该故障在节点重启完成后可自动恢复。
reboot
kubectl get pod -A
可以看到Pod状态从Terminating到Pending,最后为Running状态,表示训练任务已经重新拉起。
kubectl logs -n 命令空间名称 {pod名字}
....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网络故障不影响单机训练任务。用户在断开链路后需手动恢复,否则该故障会一直存在。
hccn_tool -i {device_id} -link -s down
device_id为NPU的ID,可以通过npu-smi info命令查看NPU的ID。
hccn_tool -i {device_id} -net_health -g
net health status:Fault
kubectl get pod -A
可以看到Pod状态从Terminating到Pending,最后为Running状态,表示训练任务已经重新拉起。
kubectl logs -n 命令空间名称 {pod名字}
....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
hccn_tool -i {device_id} -cfg recovery
hccn_tool -i {device_id} -net_health -g
net health status:Success
通过删除训练进程,模拟业务面故障。
ps -ef | grep python| grep 训练启动脚本.py
kill -9 pid
kubectl get pod -A
可以看到Pod状态从Terminating到Pending,最后为Running状态,表示训练任务已经重新拉起。
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