Ascend Device Plugin

芯片资源

mindx-dl-deviceinfo-<nodename>

Ascend Device Plugin上报的NPU芯片信息如表1所示。

表 1 DeviceInfoCfg

名称 含义 说明
huawei.com/Ascend910 标记当前节点可用的芯片名称信息,存在多个时用英文逗号拼接。
  • 该字段正在日落,后续版本该字段不再呈现。默认情况下,节点的可用芯片由Volcano维护,该字段不生效。如果需要生效,可以修改Volcano的配置参数“self-maintain-available-card”值为false。
  • Atlas 350 标卡、Atlas 850 系列硬件产品、Atlas 950 SuperPoD使用huawei.com/npu作为参数名称。
huawei.com/Ascend910-NetworkUnhealthy 标记当前节点网络不健康的芯片名称信息,存在多个时用英文逗号拼接。 Atlas 350 标卡、Atlas 850 系列硬件产品、Atlas 950 SuperPoD使用huawei.com/npu-NetworkUnhealthy作为参数名称。
huawei.com/Ascend910-Unhealthy 标记当前芯片不健康的芯片名称信息,存在多个时用英文逗号拼接。 Atlas 350 标卡、Atlas 850 系列硬件产品、Atlas 950 SuperPoD使用huawei.com/npu-Unhealthy作为参数名称。
huawei.com/Ascend910-Recovering 标记当前节点正在进行恢复的芯片,存在多个时用英文逗号拼接。 Atlas 350 标卡、Atlas 850 系列硬件产品、Atlas 950 SuperPoD使用huawei.com/npu-Recovering作为参数名称。
huawei.com/Ascend910-Fault 记录芯片具体的故障信息。
  • 数组对象,对象包含fault_type、npu_name、large_model_fault_level、fault_level、fault_handling、fault_code和fault_time_and_level_map这7个字段。
  • Atlas 350 标卡、Atlas 850 系列硬件产品、Atlas 950 SuperPoD使用huawei.com/npu-Fault作为参数名称。
-fault_type 故障类型。
  • CardUnhealthy:芯片故障
  • CardNetworkUnhealthy:芯片网络故障
  • NodeUnhealthy:节点故障
-npu_name 故障的芯片名称,节点故障时为空。 字符串

-large_model_fault_level

-fault_level

-fault_handling

故障处理类型,节点故障时取值为空。
  • NotHandleFault:不做处理
  • RestartRequest:推理场景需要重新执行推理请求,训练场景重新执行训练业务
  • RestartBusiness:需要重新执行业务
  • FreeRestartNPU:影响业务执行,待芯片空闲时需复位芯片
  • RestartNPU:直接复位芯片并重新执行业务
  • SeparateNPU:隔离芯片
  • PreSeparateNPU:预隔离芯片,会根据训练任务实际运行情况判断是否重调度
[!NOTE] 说明
  • large_model_fault_level、fault_level和fault_handling参数功能一致,推荐使用fault_handling。
  • 若推理任务订阅了故障信息,任务使用的推理卡上发生RestartRequest故障且故障持续时间未超过60秒,则不执行任务重调度;若故障持续时间超过60秒仍未恢复,则隔离芯片,进行任务重调度。
-fault_code 故障码,英文逗号拼接的字符串。 芯片故障码的详细说明请参见芯片故障码参考文档
-fault_time_and_level_map 故障码、故障发生时间及故障处理等级。 -
SuperPodID 超节点ID。 字符串
ServerIndex 当前节点在超节点中的相对位置。
  • 驱动上报的SuperPodID或ServerIndex的值为0xffffffff时,SuperPodID或ServerIndex的取值为-1。
  • 存在以下情况,SuperPodID或ServerIndex的取值为-2。
    • 当前设备不支持查询超节点信息。
    • 因驱动问题导致获取超节点信息失败。
CheckCode 校验码。 -

Ascend Device Plugin上报的灵衢总线设备故障信息如表2所示。

表 2 SwitchInfoCfg参数说明

名称 含义 说明
FaultCode 当前节点的灵衢总线设备故障码列表。 数组对象,包含EventType、AssembledFaultCode、PeerPortDevice、PeerPortId、SwitchChipId、SwitchPortId、Severity、Assertion、AlarmRaisedTime等字段。
-EventType 告警ID。 -
-AssembledFaultCode 故障码。 -
-PeerPortDevice 对接设备类型。
  • 0:CPU
  • 1:NPU
  • 2:SW
  • 0xFFFF:NA
-PeerPortId 对接设备ID。 -
-SwitchChipId 灵衢故障芯片ID。 从0开始编号。
-SwitchPortId 灵衢故障端口ID。 从0开始编号。
-Severity 故障等级。
  • 0:提示
  • 1:次要
  • 2:重要
  • 3:紧急
-Assertion 事件类型。
  • 0:故障恢复
  • 1:故障产生
  • 2:通知类事件
FaultLevel 当前节点故障处理等级。 取FaultCode中所有故障中等级最高的故障等级,取值包含:NotHandle、SubHealthFault、Separate和RestartRequest。
UpdateTime 故障上报刷新时间。 -
NodeStatus 当前节点健康状态。 对应FaultLevel取值,NotHandle:Healthy、SubHealthFault:SubHealthy、Separate:UnHealthy和RestartRequest:UnHealthy。
FaultTimeAndLevelMap 故障发生时间及故障处理等级列表。 数组对象,包含故障码、灵衢故障芯片ID、灵衢故障端口ID、fault_time和fault_level字段。键值为故障码、灵衢故障芯片ID、灵衢故障端口ID,由下划线连接组成。
-fault_time 故障发生时间。 -
-fault_level 故障处理等级。 -

Ascend Device Plugin的ConfigMap上报的人工干预的故障级别芯片信息如表3所示。

表 3 ManuallySeparateNPU说明

名称 含义 说明
ManuallySeparateNPU 因芯片多次故障,触发频率型故障升级策略,被ConfigMap记录到此键中。 多个芯片名称使用英文逗号分隔。

Ascend Device Plugin的ConfigMap上报的故障策略升级原因如表4所示。

表 4 UpgradeFaultReason说明

名称 含义 说明
UpgradeFaultReason 故障码配置了频率型策略和持续型策略后,当触发故障升级时,记录故障升级原因和升级时间。 JSON的Map形式,键为芯片名称,值为导致该芯片故障升级的原因。
-fault_code 芯片故障升级的故障码。 -
-fault_level 升级后的故障级别。 -
-upgrade_type 故障升级类型。
  • 频率型升级:FaultFrequency
  • 持续型升级:FaultDuration
  • 自动填充型升级:FaultAutofill
-upgrade_time 故障升级的时间点。 -

Note

  • 当Ascend Device Plugin从26.0.0之前版本升级到26.0.0及之后版本时,若Ascend Device Plugin的ConfigMap中已有的芯片故障升级到ManuallySeparateNPU,则会为该芯片隔离自动填充原因。其中-fault_code值为AutofillFaultCode,-upgrade_type为FaultAutofill。
  • 故障升级原因会随着故障降级而删除,同时删除事件会记录到K8s的kube-system命名空间下的event事件中。

Ascend Device Plugin的ConfigMap中的描述信息如表5所示。

表 5 Description说明

名称 含义 说明
Description 描述信息。 此ConfigMap中的节点的可用芯片信息正在日落。默认情况下,节点的可用芯片由Volcano维护,此ConfigMap中维护的不生效。如果需要生效,可以修改Volcano的配置参数“self-maintain-available-card”值为false。

Ascend Device Plugin上报的NPU设备故障信息如表6所示。对象名称是<device-plugin-pod-name>.<上报时间><故障芯片ID>,对象类型为Event。

Note

下表仅展示与MindCluster业务相关的字段说明,更多字段的说明详细请参见Event core

表 6 NPU设备故障信息

名称 含义 说明
type 事件的级别。 唯一值:Warning
message 事件的内容,包括节点名称、芯片编号、故障的产生或者恢复类型、故障码和故障级别信息。 字符串
reason 事件上报的原因。
  • Recovery:故障恢复
  • Occur:故障产生
  • Notice:一次性通知故障
action 故障的级别。 字符串。详细说明请参见表1
source 故障产生的源头。 结构体。表明故障产生的节点。
eventTime 故障产生的时间。 时间戳
involvedObject 故障绑定展示的对象。 结构体。通过Kind、Namespace和Name指向当前Ascend Device Plugin的Pod名称。指定后除了可以直接通过Event对象查询之外,查询当前的Pod详情时也能看到该事件。
reportingComponent 事件的控制者。 唯一值:device-plugin
reportingInstance 事件的上报实例。 字符串。取当前Ascend Device Plugin的Pod名称。

deviceNameCustomization.json

deviceNameCustomization.json支持自定义设备名称。编译Ascend Device Plugin镜像时,将该文件放在二进制包的同级目录下,即可将Ascend Device Plugin对外展示的资源类型、资源名称修改为自定义的名称。Atlas 350 标卡、Atlas 850 系列硬件产品、Atlas 950 SuperPoD目前不支持该功能。

表 7 deviceNameCustomization.json支持自定义设备名称

名称 含义 说明
ResourceType 设备的初始名称,必填。 仅支持Ascend910、Ascend310和Ascend310P中的一种。
DevicePublicType 设备对外展示的类型,例如huawei.com/Ascend910,必填。 仅支持xxx.xxx/xxx格式,xxx可以为大小写字母及数字,长度范围为10~32个字符。
DevicePublicNamePre 设备对外展示的名称前缀,例如Ascend910-。实际展示的名称,Ascend Device Plugin会在前缀后面拼接芯片的物理ID,必填。 可以包含大小写字母、中划线(-)、数字,必须以大小写字母开头,长度范围为2~16个字符。
PodConfigurationName Pod的annotation上展示的挂载芯片信息详情,ResourceType为Ascend910时必填。 可以包含大小写字母、中划线(-)、/、点(.)、数字,必须以大小写字母开头,大小写字母数字结尾,长度范围为10~63个字符。

任务信息

fault-config-<任务名称>

表 1 fault-config-任务名称

字段名称 含义 取值 备注
fault-npus 故障任务使用的故障芯片的rank信息。 字符串 -
checkCode 校验码。 字符串 -

reset-config-<任务名称>

表 2 reset-config-<job-name>

字段名称

参数

含义

取值

备注

reset.json

RankList

芯片列表

-

-

-RankId

故障任务使用的Rank信息

整数类型

-

-LogicId

芯片逻辑ID

32位整数类型

-

-Status

芯片状态

  • unrecovered:未恢复
  • recovered:恢复成功
  • failed:恢复失败

-

-Policy

热复位策略

  • empty:无故障
  • ignore:忽略故障
  • restart_request:重新执行当前请求
  • restart:重新执行训练任务
  • free_reset:当NPU上没有任务时,需要重启设备
  • reset:需要重启设备
  • isolate:需要隔离设备

-

-InitialPolicy

初始热复位策略

  • empty:无故障
  • ignore:忽略故障
  • restart_request:重新执行当前请求
  • restart:重新执行训练任务
  • free_reset:当NPU上没有任务时,需要重启设备
  • reset:需要重启设备
  • isolate:需要隔离设备

-

-ErrorCode

十进制故障码

64位整型数组

-

-ErrorCodeHex

十六进制故障码

字符串

-

GracefulExit

管理训练进程

0或1

  • 取值为1,终止所有训练进程
  • 取值为0,不做处理

-

UpdateTime

ConfigMap的更新时间

-

-

RetryTime

Pod重调度的次数

整数类型

-

FaultFlushing

告知Elastic Agent当前是否有故障正在刷新

取值为true或false

  • true:表示有故障正在刷新
  • false:表示当前无故障刷新

Elastic Agent需要等待该字段为false且故障RankList无本节点故障时才会拉起训练进程

RestartFaultProcess

告知Elastic Agent当前是否仅重启本节点故障进程

取值true或false

  • true:表示不退出Elastic Agent,仅重启本节点故障进程
  • false:当本节点有故障进程时,退出Elastic Agent

-

restartType

-

reset.json更新的类型

podReschedule或hotReset

单pod重调度情况下取值为podReschedule,热恢复场景下取值为hotReset

checkCode

-

校验码

字符串

-

data-trace-<任务名称>

存储当前任务的各类打点类型的开关状态,由Ascend Device Plugin挂载到计算节点存储,训练容器挂载该文件后,由TaskD读取后对各类打点数据进行开关。

表 3 data-trace-<任务名称> ConfigMap字段说明

字段名称 含义 取值 类型
Communication 标识通信算子。 on/off string
Step 标识Step时延。 on/off string
SaveCheckpoint 标识SaveCheckpoint耗时。 on/off string
FP 标识前向传播数据。 on/off string
DataLoader 标识DataLoader耗时。 on/off string

Note

  • 该ConfigMap需要和训练任务在同一命名空间,且命名为data-trace-<任务名称>,包括标签reset=true。
  • 该ConfigMap由Ascend Device Plugin挂载到训练节点的/user/cluster-info/datatrace-config/命名空间.data-trace-任务名称/*的文件夹下,文件名为profilingSwitch。
  • 如用户未创建该ConfigMap,在首次调用gRPC接口ModifyTrainingDataTraceSwitch时,ClusterD将尝试自动创建该ConfigMap。
  • 用户如需使用该功能,应将节点上的profilingSwitch文件,使用hostPath方式挂载进入容器内的/user/cluster-info/datatrace-config/目录。
  • 当前Step、SaveCheckpoint、FP、DataLoader为默认开启,且四类只能同步开启关闭,当五类数据全为off时关闭所有打点,否则默认开启上述四类,同时根据通信算子开关状态对其进行开启或关闭。

steptime-dtpgroup

存储任务的迭代时延和分组信息的保存路径和启停开关,启动任务时用户可通过CCAE管理平台配置ConfigMap参数进行任务是否劣化的判定。

表 4 steptime-dtpgroup ConfigMap字段说明

一级参数名称 二级参数名称 含义 取值 备注
data PerfDumpPath 迭代时延和分组信息保存路径。 字符串 -
- PerfDumpConfig 迭代时延和分组信息启停开关。 字符串 -

自定义芯片故障

faultCode.json中的故障级别

断点续训针对芯片故障的不同级别进行分级处理。若用户需要修改故障码的故障级别,操作指导请参见(可选)配置芯片故障级别

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

表 1 故障级别及处理说明

故障处理策略

说明

重调度处理

优雅容错处理

NotHandleFault

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

暂不处理

暂不处理

RestartRequest

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

隔离芯片,进行任务重调度

[!NOTE] 说明

若推理任务订阅故障信息,任务使用的推理卡上发生RestartRequest故障且故障持续时间未超过60秒,则不执行任务重调度;若故障持续时间超过60秒仍未恢复,则隔离芯片,进行任务重调度。

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

RestartBusiness

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

重新执行业务

FreeRestartNPU

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

等待芯片空闲后复位芯片

RestartNPU

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

立即停止训练业务,复位芯片后重新执行业务

SeparateNPU

无法恢复,需要隔离芯片。

隔离芯片,进行任务重调度

PreSeparateNPU

暂不影响业务,后续不再调度任务到该芯片。

预隔离芯片

预隔离芯片

SubHealthFault

根据任务YAML中配置的subHealthyStrategy参数取值进行处理,详细请参见表1 YAML参数说明

当芯片出现亚健康故障时,需根据配置YAML策略进行处理。

[!NOTE] 说明

如果后续芯片出现其他级别故障,此时SubHealthFault

处理策略不影响其他级别的故障处理。

根据策略进行处理

faultCustomization.json参数说明

用户不手动修改faultCustomization.json文件时,Ascend Device Plugin按照faultCustomization.json的默认配置(默认值)进行故障处理。

表 2 faultCustomization.json文件参数说明

一级参数名称 二级参数名称 说明
GraceTolerance - 优雅容错相关配置。

GraceTolerance及其子参数不存在或者超出取值范围,则使用默认值。

- WaitProcessReadCMTime 使用优雅容错模式时,等待管理进程读取ConfigMap文件的时间,单位为秒,取值范围为5~90,默认值为30。
- WaitDeviceResetTime 使用优雅容错模式时,等待芯片重启的最大时长,单位为秒,取值范围为60~180,默认值为150。
- WaitFaultSelfHealingTime 使用优雅容错模式时,等待RestartBusiness级别故障恢复时间,单位为秒,取值范围为1~30,默认值为15。
FaultFrequency - 自定义故障频率,即某一故障在时间窗口内出现次数达到次数上限时,根据配置的故障处理策略进行处理。
  • FaultFrequency及其子参数取值范围不正确,则忽略该条配置。
  • FaultFrequency及其子参数数据格式不正确,则会使用默认配置。
- EventId 故障码ID。

每个故障码(EventId)只允许配置一个FaultFrequency参数,如果配置了多个,则只有第一条正确的会生效。

- TimeWindow 时间窗口,即统计当前时间减去TimeWindow的时间至当前时间,这段时间范围内的故障次数,单位为秒,取值范围为60~864000。
- Times 同一个故障出现的次数上限,取值范围为1~100。如果在时间窗口内该故障出现次数大于或等于该值,则按照FaultHandling中定义的策略处理和上报。
- FaultHandling

同一个故障出现的次数达到上限后故障的处理策略,支持配置不同级别的故障处理策略。若配置了ReleaseTimeWindow,则可达到条件后自动释放。若要支持手动解除故障,请配置处理策略为ManuallySeparateNPU。

  • PreSeparateNPU:该故障处理模式为预隔离芯片,根据训练任务实际运行情况判断是否重调度。
  • ManuallySeparateNPU:
    • 出现该策略时,将直接上报K8s该芯片不健康并将芯片名字写入device-info-cm。
    • 芯片名称只要保存于该字段中,即使故障恢复也仍然隔离芯片,直到运维人员手动在该字段中删除芯片名称,或者恢复时长超过ReleaseTimeWindow。
    • 该字段只允许Ascend Device Plugin新增或修改,维护人员只能删除该字段中的芯片名称。
    • faultCode.json暂不支持该策略。
- ReleaseTimeWindow 若故障已经恢复,并持续超过ReleaseTimeWindow的时间窗没有再发生该故障,则解除已升级的故障处理策略。该参数的取值范围为60~uint32最大值,单位为秒。若不配置该参数,则表示策略升级后不降级。由于ManuallySeparateNPU支持手动解除,所以除了ManuallySeparateNPU,其余处理策略必须配置该参数,防止故障恢复后设备永远无法使用。
FaultDuration - 自定义故障超时策略,当某一故障持续时间达到配置上限时,该故障会按照指定的故障处理策略进行处理。
  • FaultDuration及其子参数取值范围不正确,则忽略该条配置。
  • FaultDuration及其子参数数据格式不正确,则会使用默认配置。
- EventId 故障ID。

每个故障码(EventId)只允许配置一个FaultDuration参数,如果配置了多个,则只有第一条正确的会生效。

- FaultTimeout 故障持续时间超过该值,则按照FaultHandling中定义的故障处理策略进行处理,单位为秒,取值范围为0~600,默认值说明如下。
  • 故障ID为81078603的参数面网络故障默认值为20。
  • 故障ID为80E01801的片上内存多Bit故障默认值为30。
  • 其余故障默认值为0。
- RecoverTimeout 故障恢复时间超过该值,则上报故障恢复,单位为秒,取值范围为0~86400,默认值说明如下。
  • 故障ID为81078603的参数面网络故障默认值为60。不建议设置为0,建议大于listWatchPeriod健康状态检查周期。关于listWatchPeriod的详细说明请参见Ascend Device Plugin启动参数
  • 其余故障默认值为0。
- FaultHandling

超过故障持续时间后的故障处理策略,支持配置不同级别的故障处理策略,同时还支持配置PreSeparateNPU故障处理策略。

超过故障持续时间后的故障处理策略,建议高于故障本身的故障处理策略,否则配置不生效。

不支持配置ManuallySeparateNPU策略,配置不生效。

Note

  • 如果一个故障码同时配置了故障频率(FaultFrequency)和故障超时策略(FaultDuration),该故障码在TimeWindow时间窗口中超时次数达到任务支持的最大次数,则采用以下三者中最严重的等级进行处理。这三者分别为:故障本身的故障处理策略、FaultFrequency和FaultDuration中配置的故障处理策略。
  • 如果一个故障码同时配置了故障频率和故障超时策略,只有当故障超时后,故障才算发生,频次才会增加一次。故障恢复超过RecoverTimeout才算恢复,恢复后再次故障超时才能累积下一次计数。
  • 故障ID为81078603的网络故障只支持配置为NotHandleFault、PreSeparateNPU或SeparateNPU三种故障处理策略,若配置为其他策略则使用默认配置NotHandleFault。
  • 当Ascend Device Plugin从26.0.0之前版本升级到26.0.0及之后版本时,若Ascend Device Plugin的ConfigMap中已经包含了ManuallySeparateNPU键值,则其降级的时间窗为faultCustomization.json中最大的ReleaseTimeWindow值,若没有任何故障码配置ReleaseTimeWindow,则ConfigMap已有的ManuallySeparateNPU不降级。
  • 在修改/删除mindx-dl-fault-config中的策略后,支持已升级的故障处理策略也会随配置更新。但是ManuallySeparateNPU策略升级后,删除故障处理策略配置项不会被解除,需要遵循ManuallySeparateNPU的解除方式。并且,其他故障级别配置更新为ManuallySeparateNPU时,配置不生效或者不满足期望。

自定义灵衢设备故障

断点续训针对灵衢总线设备故障的不同级别进行分级处理。若用户需要修改故障码的故障级别,操作指导请参见(可选)配置总线设备故障级别

Ascend Device Plugin从驱动获取到故障码后,将根据故障码对设备及业务的影响将故障划分为以下五种级别并进行相应的重调度处理,详细说明请参见表1

表 1 故障级别及处理说明

故障类型 说明 重调度处理
NotHandleFault 暂不影响业务,可以自行恢复,无需处理。 暂不处理。
SubHealthFault 影响业务运行性能,需要排查亚健康原因。 当出现亚健康故障时,需根据表1 YAML参数说明中subHealthyStrategy参数所指定的亚健康策略进行处理。
RestartRequestFault 业务运行失败,需要重新执行业务请求。 停止当前训练任务,隔离节点,进行任务重调度。
ResetFault 业务运行失败。 停止当前训练任务,隔离节点,进行任务重调度。
SeparateFault 业务运行失败,需更换器件或板卡。 停止当前训练任务,隔离节点,进行任务重调度。