基于MindCluster的昇腾集群秒级故障检测机制 技术特性与价值随着大模型预训练技术的发展模型参数量以及数据量极速膨胀因此在训练模型时将使用千卡甚至万卡规模的设备进行训练。与通用计算不同AI分布式训练涉及到更多数量的硬件器件同时其中任何一个器件的失效都有可能导致训练的中断。每次训练中断时故障器件的排除成为了运维人员在AI计算的首要难题快速且精准地找到故障设备能够降低大量的训练成本。MindCluster针对昇腾设备集群提供了一套故障检测机制能够秒级完成昇腾相关设备的故障检测与隔离用户可以根据MindCluster上报的集群设备故障信息排除集群中出现异常的设备。图1 MindCluster故障检测架关键能力NPU芯片故障检测芯片故障指的是NPU出现的基础软件类故障和芯片硬件类故障。MindCluster在集群的NPU节点部署Ascend Device Plugin组件Ascend Device Plugin组件除了提供基础的设备发现和挂载功能外还负责NPU相关故障的检测。NPU内部具有故障检测机制NPU故障后将故障事件通知到Ascend Device PluginAscend Device Plugin对故障信息进行处理后对外上报该故障信息这一过程将在1秒内完成。对外上报故障信息的接口当前主要以K8S的Configmap承载将刷新故障信息到Configmap中用户可以在深度学习平台的管理面或者业务容器挂载获取该节点的NPU故障信息。图2 芯片故障上报流程服务器故障检测服务器故障指的是NPU所在AI服务器上除了NPU外的其他软硬件的故障信息。MindCluster在集群的NPU节点部署NodeD组件NodeD组件提供服务器相关软硬件的故障检测此外MindCluster还复用了kubelet的节点健康检测能力会基于NodeD和Kubelet获取服务器故障信息。服务器心跳状态Kubelet将定期与Api-Server发送心跳当Api-Server发现某个节点的心跳丢失后将把该节点的状态置为Not ReadyMindCluster将节点Not Ready的服务器检测为服务器不可用。服务器硬件故障针对服务器硬件故障NodeD通过IPMI驱动向iBMC发送故障查询请求iBMC将当前硬件告警信息响应给NodeD。NodeD收集硬件告警信息后将节点硬件状态对外上报信息。服务器DPC共享存储故障针对共享存储服务DPCNodeD将基于DPC服务的过程记录信息检测DPC存储服务的故障检测故障后将该信息对外上报图3 服务器故障检测上报流程参数面网络检测NPU的参数面网络故障包括ROCE网络相关故障和灵衢总线设备故障。参数面网络出现故障时通常将导致训练任务中断或者训练任务性能劣化。ROCE网络故障在昇腾A2、A3系列产品上ROCE网口是NPU上直出因此NPU具有其直出的ROCE网络的故障检测机制ROCE故障后将故障事件通知到Ascend Device Plugin。灵衢总线设备故障灵衢总线设备当前仅在昇腾A3系列产品上使用灵衢总线设备驱动将检测对应的灵衢总线设备的故障信息灵衢网络故障后将故障事件通知到Ascend Device Plugin。Ascend Device Plugin对故障信息进行处理后对外上报该故障信息这一过程将在1秒内完成。对外上报故障信息的接口当前主要以K8S的Configmap承载将刷新故障信息到Configmap中用户可以在深度学习平台的管理面或者业务容器挂载获取该节点的NPU故障信息。Ascend Device Plugin对故障信息进行处理后对外上报该故障信息。图4 参数面故障检测流程快速部署安装Ascend Device Plugin组件操作步骤将Ascend Device Plugin软件包解压目录下的执行容器构建命令tag为版本号。docker build --no-cache -t ascend-k8sdeviceplugin:{tag} ./执行以下命令查看镜像和版本号是否正确。docker images | grep k8sdeviceplugin将Ascend Device Plugin软件包解压目录下的YAML文件拷贝到K8s管理节点上任意目录。如不修改组件启动参数可跳过本步骤。否则根据实际情况修改Ascend Device Plugin的启动参数。启动参数请参见可执行./device-plugin -h查看参数说明。根据需要使用的故障处理模式修改Ascend Device Plugin组件的启动YAML。...containers:- image: ascend-k8sdeviceplugin:v7.1.RC1name: device-plugin-01resources:requests:memory: 500Micpu: 500mlimits:memory: 500Micpu: 500mcommand: [ /bin/bash, -c, --]args: [ device-plugin-useAscendDockertrue-volcanoTypetrue # 重调度场景下必须使用Volcano-autoStowingtrue # 是否开启自动纳管开关默认为true设置为false代表关闭自动纳管当芯片健康状态由unhealthy变为healthy后不会自动加入到可调度资源池中关闭自动纳管当芯片参数面网络故障恢复后不会自动加入到可调度资源池中。该特性仅适用于Atlas 训练系列产品-listWatchPeriod5 # 设置健康状态检查周期范围[3,1800]单位为秒-logFile/var/log/mindx-dl/devicePlugin/devicePlugin.log-logLevel0 ]securityContext:privileged: truereadOnlyRootFilesystem: true...在K8s管理节点上各YAML对应路径下执行以下命令启动Ascend Device Plugin。以Atlas 训练系列产品、Atlas A2 训练系列产品、Atlas A3 训练系列产品或Atlas 800I A2 推理服务器、A200I A2 Box 异构组件的节点等为例执行下列启动命令。kubectl apply -f device-plugin-volcano-v{version}.yaml启动示例如下serviceaccount/ascend-device-plugin-sa createdclusterrole.rbac.authorization.K8s.io/pods-node-ascend-device-plugin-role createdclusterrolebinding.rbac.authorization.K8s.io/pods-node-ascend-device-plugin-rolebinding createddaemonset.apps/ascend-device-plugin-daemonset created在任意节点执行以下命令查看组件是否启动成功。kubectl get pod -n kube-system回显示例如下出现Running表示组件启动成功。NAME READY STATUS RESTARTS AGE...ascend-device-plugin-daemonset-d5ctz 1/1 Running 0 11s...安装NodeD操作步骤将NodeD软件包解压目录下的执行容器构建命令tag为版本号。执行以下命令查看镜像和版本号是否正确。docker images | grep noded将NodeD软件包解压目录下的YAML文件拷贝到K8s管理节点上任意目录。如不修改组件启动参数可跳过本步骤。否则请根据实际情况修改YAML文件中NodeD的启动参数。启动参数请可执行./noded -h查看参数说明。在管理节点的YAML所在路径执行以下命令启动NodeD。启动请执行以下命令。kubectl apply -f noded-v{version}.yaml启动示例如下 ​​​​​​​serviceaccount/noded createdclusterrole.rbac.authorization.k8s.io/pods-noded-role createdclusterrolebinding.rbac.authorization.k8s.io/pods-noded-rolebinding createddaemonset.apps/noded created执行以下命令查看组件是否启动成功。kubectl get pod -n mindx-dl回显示例如下出现Running表示组件启动成功。​​​​​​​NAME READY STATUS RESTARTS AGE...noded-fd6t8 1/1 Running 0 74s...快速使用以参数面网络故障中的ROCE故障为例本节以Atlas 800T A2产品ROCE网卡故障为例介绍如何构造故障以及如何检测故障。故障构造以root用户登录计算节点 查看网卡状态。hccn_tool -i {device_id} -link -g回显实例如下所示时网卡状态为健康。link status: UP执行以下命令构造网卡故障。hccn_tool -i 0 -link -s down回显实例如下所示时命令执行成功。​​​​​​​[WARNING] This link down command will result in the loss of the IPv6 address, continue?(y/n)yCmd executed successfully!再次查询网卡状态回显为故障上报与查询以root用户登录K8S Master节点 查看device-plugin上报到configmap中的故障信息。kubectl describe cm -n kube-system mindx-dl-deviceinfo-{node_name}故障信息如下所示可以查询到该故障的故障NPU、故障码和故障级别等信息。Name: mindx-dl-deviceinfo-{node_name}Namespace: kube-systemLabels: mx-consumer-cimtrueAnnotations: noneDataDescription:----The field[xxx.com/xxx] is sunset. Volcano has the ability to maintain the usage status of chips on its own, and can temporarily use this field by configuring the Volcano parameter self-maintain-available-cardDeviceInfoCfg:----{DeviceInfo:{DeviceList:{huawei.com/Ascend910:,huawei.com/Ascend910-DPUUnhealthy:,huawei.com/Ascend910-Fault:[{\fault_type\:\CardNetworkUnhealthy\,\npu_name\:\Ascend910-0\,\large_model_fault_level\:\PreSeparateNPU\,\fault_level\:\PreSeparateNPU\,\fault_handling\:\PreSeparateNPU\,\fault_code\:\81078603\,\fault_time_and_level_map\:{\81078603\:{\fault_time\:1776909232179,\fault_level\:\PreSeparateNPU\}}},],huawei.com/Ascend910-NetworkUnhealthy:Ascend910-0,huawei.com/Ascend910-Recovering:,huawei.com/Ascend910-Unhealthy:Ascend910-0,Ascend910-1,Ascend910-2,Ascend910-3,Ascend910-4,Ascend910-5,Ascend910-6,Ascend910-7},UpdateTime:1776909265},SuperPodID:-1,ServerIndex:1023,CheckCode:ed8f111131a04e17222e222347f73c3eeaeff611d27263ce8b66caae77858310}ManuallySeparateNPU:----UpgradeFaultReason:----{Ascend910-0:[{upgrade_time:1776909232179,fault_code:81078603,fault_level:PreSeparateNPU,upgrade_type:FaultDuration}]}BinaryDataEvents: none用户可通过监控每个节点的故障configmap信息获取每个节点的故障信息从而完成对应的运维工作。