断点续训中故障发现功能是通过Ascend Device Plugin组件实现的。Ascend Device Plugin作为设备状态的监测组件,支持获取具体的设备故障。设备故障的故障码获取有轮询和订阅两种模式,故障码根据处理策略划分为六类。下文将分别介绍故障码的获取逻辑,以及故障码的类型判定逻辑。
故障码支持通过轮询和订阅两种方式获取。订阅可以连续的监测芯片上报的故障,而轮询只能在特定的时间点获取当时的芯片状态,对于快速恢复的故障可能存在遗漏。系统默认优先使用订阅方式获取故障码。当前环境的驱动不支持订阅接口时,会自动使用轮询方式获取。
服务启动后,使用轮询接口,查询一次芯片的故障状态,作为芯片的初始状态。当芯片产生故障被Ascend Device Plugin识别并恢复后,会再次初始化芯片状态。手动复位芯片时,某些情况下订阅接口不会返回故障恢复信息,需要再手动重启Ascend Device Plugin,以便服务获取到最新的芯片状态,如果未手动重启,则大约5分钟后订阅接口自动降级为轮询,识别故障恢复后再升级为订阅接口。
Volcano收集了内部的芯片故障、芯片网络故障、节点故障,将其作为对外的信息放在K8s的configmap中,以供外部查询和使用。
查询命令为kubectl describe cm -n volcano-system vcjob-fault-npu-cm,命令回显的参数说明见表1。
参数名 |
描述 |
---|---|
fault-node |
节点维度的故障信息 |
NodeName |
节点名称 |
FaultDeviceList |
故障列表 |
- fault_type |
故障类型对象,对象包含fault_type、npu_name、large_model_fault_level、fault_level和fault_code等5个字段
|
- npu_name |
故障的芯片名称,节点故障时为空 |
- large_model_fault_level |
大模型的故障处理类型
|
- fault_level |
普通的故障处理类型,节点故障时取值为空
|
- fault_code |
故障码,由英文逗号拼接而成的字符串
|
FaultTasks |
任务维度的故障信息列表,包含Reason字段 |
- Reason |
故障原因,字段就是故障列表下的五个字段组成的字符串 |
当一个芯片有多种故障时,芯片的处理方式按照最严重的类型来处理。
故障码和故障的处理类型对应关系,在配置文件faultCode.json中。下载的软件包中包含该文件,制作镜像时请保留该文件。faultCode.json为系统配置文件,请勿随意修改,否则可能会导致系统故障处理功能出错。故障码按照处理方式分为六类,如表2中所示。