
# 故障检测机制
ModelArts提供了[容错检测]和[卡死检测]两大类故障检测机制，用于保证模型训练作业的高可用性。本章将详细介绍两种故障检测机制的原理和检测规则。
 #### 容错检测
本节将通过[视频介绍]和[容错检查场景原理]介绍ModelArts容错检查的执行原理。
如果您想了解如何配置高可用性，请参考[开启和查看高可用配置](https://support.huaweicloud.com/usermanual-standard-modelarts/modelarts_trouble_0003.html)。
 #### 视频介绍
<video controls="controls" preload="none" id="object137702211118" class="idp-external-video" src="https://res-video.hc-cdn.com/cloudbu-site/china/zh-cn/support/modelarts-video/1727666949639298668.mp4" title="什么是训练作业容错检查？" poster="https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002412101497.png" style="width:100%;height:auto;max-width:600px"></video>
 #### 容错检查场景原理
用户在训练模型过程中，存在因硬件故障而产生的训练失败场景。针对硬件故障场景，ModelArts提供容错检查功能，帮助用户隔离故障节点，优化用户训练体验。
容错检查包括两个检查项：环境预检测与硬件周期性检查。当环境预检查或者硬件周期性检查任一检查项出现故障时，隔离故障硬件并重新下发训练作业。针对于分布式场景，容错检查会检查本次训练作业的全部计算节点。
下图中有四个场景，其中场景四为正常训练作业失败场景，其他三个场景下可开启容错功能进行训练作业自动恢复。
- 场景一：环境预检测失败、硬件检测出现故障，系统隔离所有故障节点并重新下发训练作业。
  图1预检失败\&硬件故障   
  ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002631266402.png) 
- 场景二：环境预检测失败、硬件无故障，系统随机再分配节点并重新下发训练作业。
  图2预检失败\&硬件正常   
  ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002661745525.png) 
- 场景三：环境预检测成功并进入用户业务阶段，硬件检测出现故障并且用户业务非正常退出，系统隔离所有故障节点并重新下发训练作业。
  图3业务失败\&硬件故障   
  ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002631426300.png) 
- 场景四：环境预检测成功并进入用户业务阶段，硬件无故障，当用户业务异常时系统以失败状态结束作业。
  图4业务失败\&硬件正常   
  ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002661745519.png) 
隔离故障节点后，系统会在新的计算节点上重新创建训练作业。如果资源池规格紧张，重新下发的训练作业会以第一优先级进行排队。如果排队时间超过30分钟，训练作业会自动退出。该现象表明资源池规格任务紧张，训练作业无法正常启动，推荐您购买专属资源池补充计算节点。
如果您使用专属资源池创建训练作业，容错检查识别的故障节点会被剔除。系统自动补充健康的计算节点至专属资源池。（该功能即将上线）。
 #### 卡死检测
本节将介绍[什么是训练作业卡死检测]以及卡死检测的[检测规则]。
如果您想了解如何配置高可用性，请参考[开启和查看高可用配置](https://support.huaweicloud.com/usermanual-standard-modelarts/modelarts_trouble_0003.html)。
 #### 什么是训练作业卡死检测
训练作业在运行中可能会因为某些未知原因导致作业卡死，如果不能及时发现，就会导致无法及时释放资源，从而造成极大的资源浪费。为了节省训练资源成本，提高使用体验，ModelArts提供了卡死检测功能，能自动识别作业是否卡死，并在日志详情界面上展示，同时能配置通知及时提醒用户作业卡死。
 #### 检测规则
卡死检测主要是通过监控作业进程的状态和资源利用率来判定作业是否卡死，会启动一个协程来周期性地监控上述两个指标的变化情况。卡死检测有单实例和全实例两种检测规则，是同时生效的。
- **单实例检测**
  - 进程状态：只要训练作业单实例中的进程IO存在变化，就进入下一个检测周期。如果在多个检测周期内，所有进程IO都没有变化，则进入资源利用率检测阶段。
  
  - 资源利用率：在作业单实例进程IO没有变化的情况下，采集一定时间段内的GPU利用率或NPU利用率，并根据这段时间内的GPU利用率或NPU利用率的方差和中位数来判断资源使用率是否有变化。如果没有变化，则判定作业卡死。
   
- **全实例检测**
  资源利用率：当作业在一段时间内所有运行中的实例的GPU利用率或者NPU利用率没有变化，同时每个实例的CPU使用也低于1核，则判定作业卡死。
  
系统预置了卡死检测的环境变量"MA_HANG_DETECT_TIME=30"，表示检测到指标异常并持续30分钟则判定作业卡死。如果需要修改卡死检测时间，则可以修改环境变量"MA_HANG_DETECT_TIME"的值，具体操作指导请参见[管理训练容器环境变量](https://support.huaweicloud.com/usermanual-standard-modelarts/develop-modelarts-0104.html)。
![](https://support.huaweicloud.com/usermanual-standard-modelarts/public_sys-resources/caution_3.0-zh-cn.png)
- 由于检测规则的局限性，当前卡死检测存在一定的误检率。如果是作业代码本身逻辑（如长时间sleep）导致的卡死，请忽略。
- 如果对于误检有疑问或者卡死问题无法自行解决，您可以前往[ModelArts开发者论坛](https://bbs.huaweicloud.com/forum/forum-718-1.html)进行提问或者搜索问题。
 
