产品背景
大模型训练过程往往比较长,根据业界数据,平均约两天,大模型训练会中断一次,经常遇到的问题例如:
- 程序出现故障
- 节点出现故障
- loss数据恶化,需要手动暂停,调参重训
- 服务器坏了、网络断了、开发平台挂了等等
断点续训过程需要排查节点、隔离节点、重新启动上一次CKPT,浪费了资源和训练时间,是大模型训练的重要痛点之一。针对这一问题,平台提供了断点续训能力并支持配置客户需要的策略。
断点续训
平台对节点故障、集群故障、程序故障等多种场景,支持故障感知、故障定位、故障修复。目前支持PyTorch、Mindspore框架。
支持以下故障类型:
- 网络故障:当网卡链接出现故障或状态异常(link status: DOWN)后,可正常触发重调度,实现断点续训
- 节点心跳故障:当节点因Label异常等原因导致心跳丢失后,可正常触发重调度,实现断点续训
- 节点Shutdown/Reboot故障:当节点被关闭或重启后,可正常触发重调度,实现断点续训
- 芯片PCIE故障:当节点发生芯片丢失等异常后,可正常触发重调度,实现断点续训
- 断点故障:当错误发生时断点正在写入,未正常完成保存即断点保存不完整时,可正常恢复至上一完整断点,实现断点续训
优雅容错
优雅容错功能可以在NPU芯片级别的故障发生时,优先尝试恢复故障芯片(需要在支持的场景下),从而实现训练任务的进程级别的重启,无需触发集群的重调度来切换新的节点再进行训练。
优雅容错有以下优点:
- 进程级别杀死和恢复,相比重调度切换节点的方式减少了耗时
- 底层组件尝试芯片故障热恢复,减少机器因故障隔离导致利用率下降
目前优雅容错支持PyTorch、Mindspore,支持以下故障类型:
- L3故障--tsdaemon异常:可正常恢复进程并断点续训
- L4故障--slogd心跳异常:可正常继续训练,L4级别故障不影响任务,故障等待任务结束后处理并恢复
- L5故障--内存超限异常:可正常恢复进程并断点续训
- L5故障--跨板心跳异常:可正常恢复进程并断点续训
- L5故障--小核心跳异常:恢复失败,节点隔离并触发重调度
所有故障处理级别
故障级别 | 故障类型 | 说明 | 重调度处理 | 优雅容错处理 |
---|---|---|---|---|
L1 | NotHandleFault | 对业务无影响的故障,无需处理 | 暂不处理 | 暂不处理 |
L2 | RestartRequest | 影响业务执行,需要重新执行业务请求 | 隔离设备,进行任务重调度 | 推理场景重执行推理请求,训练场景重新执行训练业务 |
L3 | RestartBusiness | 影响业务执行,需要重新执行业务 | 隔离设备,进行任务重调度 | 重新执行业务 |
L4 | FreeRestartNPU | 影响业务执行,待芯片空闲时需复位芯片 | 隔离设备,进行任务重调度 | 复位芯片后重新执行业务 |
L5 | RestartNPU | 影响业务执行,需立即复位芯片 | 隔离设备,进行任务重调度 | 复位芯片后重新执行业务 |
L6 | SeparateNPU | 无法恢复,需要隔离设备 | 隔离设备,进行任务重调度 | 隔离设备,进行任务重调度 |