更新时间:2024-08-26 GMT+08:00
分享

训练作业容错检查

用户在训练模型过程中,存在因硬件故障而产生的训练失败场景。针对硬件故障场景,ModelArts提供容错检查功能,帮助用户隔离故障节点,优化用户训练体验。

容错检查包括两个检查项:环境预检测与硬件周期性检查。当环境预检查或者硬件周期性检查任一检查项出现故障时,隔离故障硬件并重新下发训练作业。针对于分布式场景,容错检查会检查本次训练作业的全部计算节点。

下图中有四个场景,其中场景四为正常训练作业失败场景,其他三个场景下可开启容错功能进行训练作业自动恢复。

  • 场景一:环境预检测失败、硬件检测出现故障,系统隔离所有故障节点并重新下发训练作业。
    图1 预检失败&硬件故障
  • 场景二:环境预检测失败、硬件无故障,系统随机再分配节点并重新下发训练作业。
    图2 预检失败&硬件正常
  • 场景三:环境预检测成功并进入用户业务阶段,硬件检测出现故障并且用户业务非正常退出,系统隔离所有故障节点并重新下发训练作业。
    图3 业务失败&硬件故障
  • 场景四:环境预检测成功并进入用户业务阶段,硬件无故障,当用户业务异常时系统以失败状态结束作业。
    图4 业务失败&硬件正常

隔离故障节点后,系统会在新的计算节点上重新创建训练作业。如果资源池规格紧张,重新下发的训练作业会以第一优先级进行排队。如果排队时间超过30分钟,训练任务会自动退出。该现象表明资源池规格任务紧张,训练作业无法正常启动,推荐您购买专属资源池补充计算节点。

如果您使用专属资源池创建训练作业,容错检查识别的故障节点会被剔除。系统自动补充健康的计算节点至专属资源池。(该功能即将上线)

容错检查详细介绍请参考:

  1. 开启容错检查
  2. 检测项目与执行条件
  3. 触发容错环境检测达到的效果
  4. 环境预检查通过后,如果发生硬件故障会导致用户业务中断。您可以在训练中补充reload ckpt的代码逻辑,使能读取训练中断前保存的预训练模型。指导请参考设置断点续训练

开启容错检查

用户可以在创建训练作业时通过设置自动重启的方式开启容错检查。

  • 使用ModelArts Standard控制台的创建训练作业页面设置自动重启:

    用户可以在控制台页面通过开关的方式开启自动重启。“自动重启”开关默认不开启,表示不做重新下发作业,也不会启用环境检测。打开开关后,允许设置重启次数为1~128次。

    图5 自动重启设置
  • 使用API接口设置容错检查:

    用户可以通过API接口的方式开启自动重启。创建训练作业时,在“metadata”字段的“annotations”中传入“fault-tolerance/job-retry-num”字段。

    添加“fault-tolerance/job-retry-num”字段,视为开启自动重启,value的范围可以设置为1~128的整数。value值表示最大允许重新下发作业的次数。如果不传入则默认为0,表示不做重新下发作业,也不会启用环境检测。

    图6 设置API

检测项目与执行条件

检测项目

item(日志关键字)

执行条件

检测成功要求

域名检测

dns

volcano容器的域名都解析成功(/etc/volcano下的“.host”文件中的域名解析成功)

磁盘空间-容器根目录

disk-size root

大于32GB

磁盘空间-/dev/shm目录

disk-size shm

大于1GB

磁盘空间-/cache目录

disk-size cache

大于32GB

ulimit检查

ulimit

使用IB网络时

  • max locked memory > 16000
  • open files > 1000000
  • stack size > 8000
  • max user processes > 1000000

gpu检查

gpu-check

使用gpu,且使用v2训练引擎时(北京四暂无)

检测到gpu

触发容错环境检测达到的效果

  • 容错检查正常通过时,会打印检测项目的日志,表示具体涉及的检查项目成功。您可以通过在日志中搜索“item”关键字查看。当容错检查正常通过时,可以减少运行故障上报问题。

  • 容错检查失败时,会打印检查失败的日志。您可以通过在日志中搜索“item”关键字查看失败信息。

    如果作业重启次数没有达到设定的次数,则会自动做重新下发作业。您可以通过搜索“error,exiting”关键字查找作业重启失败结束的日志。

使用reload ckpt恢复中断的训练

在容错机制下,如果因为硬件问题导致训练作业重启,用户可以在代码中读取预训练模型,恢复至重启前的训练状态。用户需要在代码里加上reload ckpt的代码,使能读取训练中断前保存的预训练模型。具体请参见断点续训练

相关文档