SanityCheck:算力健康检测

更新时间:
复制 MD 格式

算力健康检测(SanityCheck)在DLC训练任务启动前或容错重启后,自动检测GPU算力和通信性能,隔离故障节点,减少训练初期因资源问题导致的失败和算力浪费。

功能介绍

AI训练场景,可能会遇到以下问题:

  • 资源故障导致任务中断与GPU浪费:任务完成初始化后,若资源存在故障,无法开始训练,需排查问题并重新提交,浪费GPU资源。

  • 性能问题难以定位:训练性能下降可能由慢节点引起,但缺少快捷的定位手段。资源组内也缺少便捷可靠的GPU算力和通信性能基准测试。

DLC提供了算力健康检测(SanityCheck)功能,用于检查分布式训练任务的算力资源健康度与性能。开启后,系统会全面检测参与训练的资源,自动隔离故障节点并触发运维流程,减少训练初期的失败风险。检测完成后,系统会生成GPU算力和通信性能报告,帮助定位导致性能下降的问题。

使用限制

目前,该功能仅支持使用灵骏智算资源创建的PyTorch训练任务,且要求任务资源的GPU(卡数)为整机配置。灵骏智算资源目前仅对白名单用户开放,若有需要,请联系您的商务经理。

开启健康检测

通过控制台

PAI控制台创建DLC训练任务时,配置以下参数开启健康检测。任务创建后,系统会先检测资源健康度,再执行训练。

关键参数说明如下:

  • 资源信息配置:

    参数

    描述

    资源类型

    选择灵骏智算资源

    资源来源

    选择资源配额

    资源配额

    选择已创建的灵骏智算资源配额。如何创建资源配额,请参见创建资源配额

    框架

    选择PyTorch。

    任务资源

    GPU(卡数)需要是整机配置。

  • 容错与诊断配置:打开健康检测开关,并配置以下参数:

    参数

    描述

    检测时机

    • 任务运行前(默认):任务获取资源后,先检测算力节点健康状态,再执行用户代码。

    • 任务重启后:任务运行异常并由AIMaster自动容错重启后,进行算力健康检测。

      说明

      选择该配置项时,必须打开自动容错功能。更多内容介绍,请参见AIMaster:弹性自动容错引擎

    • 任务运行前+任务重启后:任务运行前和任务重启后均进行算力健康检测。

      说明

      选择该配置项时,必须打开自动容错功能。更多内容介绍,请参见AIMaster:弹性自动容错引擎

    检测项

    检测项包括计算性能检测、节点通信检测、计算通信交叉检测和模型模拟验证四类。详细说明请参见附录:检测项说明

    • 默认开启GPU GEMM(用于检测GPU GEMM性能情况)、All-Reduce(用于检测节点通信性能,识别通信慢节点/故障节点)检测。

    • 支持搜索或勾选检测项,也可通过快捷配置一键选定检测项模板。

    最长检测时间

    健康检测最长运行时间,默认为60分钟。若检测超时,会触发检测异常处理策略。

    检测异常处理策略

    健康检测未通过时的处理方式:

    • 结束任务:当识别到故障或可疑节点,任务将终止并标记为检测未通过。

    • 拉黑重跑:当识别到故障或可疑节点,系统将自动拉黑该节点,重启任务并重跑检测,直到检测全部通过。

    检测最大重启次数

    检测处理策略为”拉黑重跑”时可用。默认为10次,超过后任务自动失败。

    其他检测配置

    默认为空,支持高级参数配置。

通过OpenAPI

调用CreateJob接口时,在Settings参数中新增以下2个参数开启健康检测:

参数

描述

示例

EnableSanityCheck

任务是否打开算力健康检测。取值如下:

  • true:打开算力健康检测。

  • false:不打开算力健康检测。

"EnableSanityCheck" : "true"

SanityCheckArgs

算力健康检测的执行参数,取值如下:

  • --sanity-check-timing:检测时机,可选值如下:

    • BeforeJobRunning(默认值):任务在每次运行前进行检测(包括任务重启后)。

    • AfterJobFaultTolerant:在任务容错发生后进行检测。

    • BeforeAndAfterRestart:任务运行前和任务重启后均进行算力健康检测。

  • --sanity-check-max-time:最长检测时间,单位为分钟。

  • --sanity-check-timeout-ops:检测超时处理,可选值如下:

    • MarkJobFail(默认值):以失败状态结束任务。

    • KeepJobHang:挂起任务。

  • --sanity-check-envs:设置检测的环境变量,默认为空。格式为key=value,多个变量之间用半角逗号(,)分隔。例如key1=value1,key2=value2

  • --sanity-check-timeout-per-test:每个测试超时时间,单位为分钟,默认为6分钟。

  • --micro-benchmarks:指定要执行的micro benchmarks,多个检测项以半角逗号(,)分隔。

  • --model-benchmarks:执行要执行的model benchmarks,多个检测项用逗号分隔

  • --max-num-of-sanity-check-restart拉黑重跑最大次数。例如,--max-num-of-sanity-check-restart=10,表示开启拉黑重跑模式,当SanityCheck识别到异常节点后,系统将自动拉黑异常节点,并重跑检测直到全部通过。检测重跑最大次数为10次。

"SanityCheckArgs" : "--sanity-check-timing=AfterJobFaultTolerant --sanity-check-timeout-ops=MarkJobFail"

查看检测结果

健康检测状态说明

DLC任务健康检测的状态说明:

  • 检测中:正在进行算力健康检测环节。

  • 检测未通过:检测发现异常节点或检测超时。

  • 检测通过:所有检测项通过,任务进入运行状态。

查看健康检测结果

通过控制台

DLC任务详情页,事件页签,单击健康检测,可以查看检测进度及检测结果。

健康检测包含检测环境准备GPU GEMMGPU Kernel LaunchAll-Reduce-单节点MatMul/All-Reduce OverlapMini GPT-单节点等检测项,各项完成后以绿色对勾标记通过状态。

单击重启记录页签,可以查看重启次数、重启原因、重启结果等信息。

通过OpenAPI

配置消息通知

PAI工作空间的事件通知配置中创建消息通知规则,其中事件类型选择DLC任务>任务自动容错,其他参数配置详情,请参见消息通知。当算力健康检测未通过时,会发送消息通知。

说明

工作空间创建消息通知使用说明: 事件通知配置

附录:检测项说明

说明

预估检测时长以2台机器为单位,数值仅供参考,请以实际情况为准。

检测项

含义说明(推荐场景)

预估检测时长

计算性能检测

GPU GEMM

用于检测GPU GEMM性能情况,可识别:

  • 故障GPU:计算报错、计算 Hang 住。

  • 性能慢节点:计算 TFLOPS 比较低。

1 分钟

GPU Kernel Launch

用于检测 GPU Kernel 启动延迟情况,可识别:

  • 故障节点:Kernel 启动报错、Kernel 启动 Hang 住。

  • 性能慢节点:Kernel 启动耗时较长。

1 分钟

节点通信检测

All-Reduce

用于检测节点通信性能,识别通信慢节点/故障节点。在不同的通信模式下,可识别:

  • 通信故障节点:通信报错、Hang住。

  • 通信慢节点:通信带宽较低。

单个集合通信检测

5 分钟

All-to-All

All-Gather

Multi-All-Reduce

Network Connectivity

用于检测机头或机尾网络连通性,识别通信连通异常节点。

2 分钟

计算通信交叉检测

MatMul/All-Reduce Overlap

用于检测通信kernel和计算kernel重叠时单节点的性能情况,可识别:

  • 故障节点:重叠计算报错、Hang住。

  • 性能慢节点:重叠计算耗时较长。

1 分钟

模型模拟验证

Mini GPT

使用模型模拟验证AI系统可靠性,可识别:

  • 故障节点:训练loss异常、训练Hang住、训练报错。

  • 性能慢节点:单步训练耗时较长。

1 分钟

Megatron GPT

5 分钟

ResNet

2 分钟