昇腾社区首页
中文
注册

(可选)动态配置故障级别

断点续训针对芯片故障中的不同级别故障进行分级容错处理。MindCluster Ascend Device Plugin发现故障时会获取到当前故障的故障码,每个故障对应的故障码可参考Atlas A2 中心推理和训练硬件 健康管理故障定义Atlas A2 中心推理和训练硬件 黑匣子错误码信息列表

故障处理级别及类型

MindCluster Ascend Device Plugin从驱动获取到芯片故障码后,将根据故障码对设备及业务的影响将故障划分为以下六种级别,详细说明请参见表1

表1 故障级别及处理

故障级别

故障类型

说明

重调度处理

优雅容错处理

L1

NotHandleFault

对业务无影响的故障,无需处理

暂不处理

暂不处理

L2

RestartRequest

影响业务执行,需要重新执行业务请求

隔离设备,进行任务重调度

推理场景重执行推理请求,训练场景重新执行训练业务

L3

RestartBusiness

影响业务执行,需要重新执行业务

重新执行业务

L4

FreeRestartNPU

影响业务执行,待芯片空闲时需复位芯片

复位芯片后重新执行业务

L5

RestartNPU

影响业务执行,需立即复位芯片

L6

SeparateNPU

无法恢复,需要隔离设备

隔离设备,进行任务重调度

  • 复位芯片前需要停止训练进程,否则复位将失败。
  • MindCluster Ascend Device Plugin通过订阅的方式收到了无法识别的故障码(未保存在faultCode.json中),默认按照订阅接口给的处理意见进行故障处理。若订阅接口收到的故障等级为“提示”或“次要”,则按照L1级别处理;若故障等级为其他等级,则按照L6级别处理。

集群调度组件支持的故障码对应的故障类型可以参见MindCluster Ascend Device Plugin组件配置文件faultCode.json;该文件为系统配置文件,若用户无特殊需求,请勿随意修改。若用户需要修改故障码的故障级别,可以通过修改faultCode.json文件实现,操作指导请参见重调度模式优雅容错模式

重调度模式

以故障名称dmp_daemon心跳检测异常,对应故障码8C0A4E00为例。将当前故障的处理级别L1(无需处理)修改为L5级别(隔离设备,进行任务重调度)的操作示例如下。

重调度模式L2~L6级别的故障处理方式相同,都是隔离设备,进行任务重调度。

  1. 登录环境,进入MindCluster Ascend Device Plugin解压目录。
  2. 执行以下命令,创建动态配置故障码所需ConfigMap文件(mindx-dl-fault-config)。
    kubectl create cm mindx-dl-fault-config -n kube-system --from-literal="PollInterval=300" --from-file=./faultCode.json
    回显示例如下。
    configmap/mindx-dl-fault-config created
    表2 参数说明

    参数名

    是否必选

    说明

    mindx-dl-fault-config

    动态配置故障码所需的ConfigMap文件名称。

    kube-system

    mindx-dl-fault-config所在命令空间。

    PollInterval

    不指定该参数则默认取值为300s。用于指定查询mindx-dl-fault-config文件是否更新的周期时间,单位为秒,取值范围为30~3600。PollInterval的修改将在下一个周期生效。

    faultCode.json

    用于保存故障码,必须与faultCode.json文件名称保持一致。

  3. 执行以下命令,编辑mindx-dl-fault-config文件。
    kubectl edit cm -n kube-system mindx-dl-fault-config
  4. 在mindx-dl-fault-config文件中,找到故障码8C0A4E00。
    "NotHandleFaultCodes":[
        "8C0A4E00","80E20207","80E21007","80E38003","80F78006","80C98006","80CB8006","81318006","80A18006","80A18005",
    ...
      ],
    ...
  5. 将故障码8C0A4E00在L1(NotHandleFaultCodes)中删除,并添加到L5(RestartNPUCodes)中。
    "NotHandleFaultCodes":[ 
        "80E20207","80E21007","80E38003","80F78006","80C98006","80CB8006","81318006","80A18006","80A18005",
    ...
      ],
    ...
    "RestartNPUCodes":[
        "8C03A000","8C1FA006","8C2FA001","40F84E00","80E24E00","80E21E01","80E38008","80E3A202","80E3A203","80E39200","8C0A4E00", ... 
    ...
       ],
  6. 修改完成后,按“Esc”键,输入:wq!保存并退出。
  7. 等mindx-dl-fault-config文件更新生效(PollInterval取值,不指定则为300s)后,依次执行以下命令,查询MindCluster Ascend Device Plugin组件日志。
    cd /var/log/mindx-dl/devicePlugin
    vi devicePlugin.log
    • 若日志出现“handling 'mindx-dl-fault-config' configmap change succeed”,表示动态配置故障码操作成功。
    • 若日志出现“handling 'mindx-dl-fault-config' configmap change failed”,表示配置失败,用户可根据MindCluster Ascend Device Plugin日志提示进一步定位失败原因。

优雅容错模式

以故障名称tsdaemon心跳检测异常,对应故障码8C204E00为例。将当前故障的处理级别L3(重新执行业务进程)修改为L5级别(复位芯片后重新执行业务进程)的操作示例如下。

  1. 登录环境,进入MindCluster Ascend Device Plugin解压目录。
  2. 执行以下命令,创建动态配置故障码所需ConfigMap文件(mindx-dl-fault-config)。
    kubectl create cm mindx-dl-fault-config -n kube-system --from-literal="PollInterval=300" --from-file=./faultCode.json --from-file=./faultCustomization.json
    回显示例如下。
    configmap/mindx-dl-fault-config created
    表3 参数说明

    参数名

    是否必选

    说明

    mindx-dl-fault-config

    动态配置故障码所需的ConfigMap文件名称。

    kube-system

    mindx-dl-fault-config所在命令空间。

    PollInterval

    不指定该参数则默认取值为300s。用于指定查询mindx-dl-fault-config文件是否更新的周期时间,单位为秒,取值范围为30~3600。PollInterval的修改将在下一个周期生效。

    faultCode.json

    用于保存故障码,必须与faultCode.json文件名称保持一致。

    faultCustomization.json

    用于自定义优雅容错时间、故障频率、故障持续时间(仅支持参数面网络故障)等配置,不指定该参数则没有故障频率配置,其余配置使用默认值进行处理。必须与faultCustomization.json文件名称保持一致;该文件的参数说明请参见表4

    表4 faultCustomization.json文件参数说明

    一级参数名称

    二级参数名称

    说明

    GraceTolerance

    -

    优雅容错相关配置。

    -

    WaitFlushingCMTime

    使用优雅容错模式时,等待杀死训练进程以及等待训练容器中同步Reset-Info ConfigMap信息的总时长,单位为秒,取值范围为90~300,默认值为90。

    -

    WaitDeviceResetTime

    使用优雅容错模式时,等待芯片重启的最大时长,单位为秒,取值范围为60~120,默认值为60。

    FaultFrequency

    -

    自定义配置故障频率,即某一故障在时间窗口内出现次数达到次数上限时,会上报一次指定的故障等级。

    -

    EventId

    故障ID。

    -

    TimeWindow

    时间窗口,即统计当前时间减去TimeWindow的时间至当前时间,这段时间范围内的故障次数,单位为秒,取值范围为60~864000。

    -

    Times

    同一个故障出现的次数上限,取值范围为2~100。如果在时间窗口内该故障出现次数大于或等于该值,则按照FaultHandling中定义的策略处理和上报。

    -

    FaultHandling

    故障级别对应的故障处理策略,支持配置L1~L6级别故障的处理策略,同时还支持配置PreSeparateNPU以及ManuallySeparateNPU故障处理策略。

    说明:
    • PreSeparateNPU:大模型的故障处理策略。该故障处理模式为预隔离芯片,根据训练任务实际运行情况判断是否重调度。
    • ManuallySeparateNPU:需人工干预的故障处理策略。
      • 出现该策略时,将直接上报K8s该芯片不健康并将芯片名字写入中Device-Info ConfigMap中。
      • 芯片名称只要保存于该字段中,即使故障恢复也仍然隔离芯片,直到运维人员手动在该字段中删除芯片名称。
      • 该字段只允许MindCluster Ascend Device Plugin新增或修改,维护人员只能删除该字段中的芯片名称。
      • faultCode.json暂不支持该策略。

    FaultDuration

    -

    自定义配置故障持续时间,当前只支持参数面网络故障。

    -

    EventId

    只能是故障ID为81078603的参数面网络故障,其他故障类型会被忽略。

    -

    FaultTimeout

    故障持续时间超过该值,则按照FaultHandling中定义的策略处理和上报,单位为秒,取值范围为1~30,默认值为MindCluster Ascend Device Plugin启动yaml中的linkdownTimeout字段取值。

    -

    RecoverTimeout

    故障恢复时间超过该值,则上报故障恢复,单位为秒,取值范围为1~60,默认值为60。

    -

    FaultHandling

    故障处理策略,当前支持的参数面网络故障中,该字段只按照PreSeparateNPU策略处理,其他策略无效且也按照PreSeparateNPU策略处理。

    注:

    • GraceTolerance及其子参数和FaultDuration及其子参数不存在或者超出取值范围,则使用默认值。
    • FaultFrequency及其子参数若存在格式错误或取值范围不正确,则忽略该条配置。
    • 每个故障码(EventId)只允许配置一个FaultFrequency参数,如果配置了多个,则只有第一条正确的会生效。
  3. 执行以下命令,编辑mindx-dl-fault-config文件。
    kubectl edit cm -n kube-system mindx-dl-fault-config
  4. 在mindx-dl-fault-config文件中,找到故障码8C204E00。
    ...
    "RestartBusinessCodes":[
        "8C084E00","8C204E00","8C124E00","A8028802","A4302003","A4302004","A4302005","A4302006","A4302009","A430200A",
    ...
      ],
    ...
  5. 将故障码8C204E00在L3(RestartBusinessCodes)中删除,并添加到L5(RestartNPUCodes)中。
    ...
    "RestartBusinessCodes":[
        "8C084E00","8C124E00","A8028802","A4302003","A4302004","A4302005","A4302006","A4302009","A430200A",
    ...
      ],
    ...
    "RestartNPUCodes":[
        "8C03A000","8C1FA006","8C2FA001","40F84E00","80E24E00","80E21E01","80E38008","80E3A202","80E3A203","80E39200", "8C204E00", ...
    ...
      ],
    ...
  6. (可选)在mindx-dl-fault-config文件中,根据实际需求修改由faultCustomization.json文件创建的相关参数取值;不修改则使用默认值进行处理。
  7. 修改完成后,按“Esc”键,输入:wq!保存并退出。
  8. 等mindx-dl-fault-config文件更新生效(PollInterval取值,不指定则为300s)后,依次执行以下命令,查询MindCluster Ascend Device Plugin组件日志。
    cd /var/log/mindx-dl/devicePlugin
    vi devicePlugin.log
    • 若日志出现“handling 'mindx-dl-fault-config' configmap change succeed”,表示动态配置故障码操作成功。
    • 若日志出现“handling 'mindx-dl-fault-config' configmap change failed”,表示配置失败,用户可根据MindCluster Ascend Device Plugin日志提示进一步定位失败原因。