在制作Ascend Device Plugin镜像时,会将故障频率及时长配置文件faultCustomization.json内置在镜像中,启动Ascend Device Plugin时会读取这两个文件的默认配置,作为当前故障处理依据。
如果用户想要自定义芯片故障频率及时长,可以在集群中创建ConfigMap文件(mindx-dl-fault-config)。
以故障码80CB8002为例,如果某张芯片反复发生80CB8002故障,导致训练业务反复重调度,可以手动配置24小时内任务支持的断点续训最大次数为2,达到最大次数后故障的处理策略为ManuallySeparateNPU。
kubectl describe cm -n kube-system 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
1 | configmap/mindx-dl-fault-config created |
参数名 |
是否必选 |
说明 |
---|---|---|
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文件名称保持一致。 |
kubectl edit cm -n kube-system mindx-dl-fault-config
# Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: PollInterval: "300" # 修改芯片故障的故障级别 faultCode.json: | { "NotHandleFaultCodes":[ ... } # 修改芯片故障的故障频率和时长 faultCustomization.json: | { "GraceTolerance": { "WaitProcessReadCMTime": 30, "WaitDeviceResetTime": 150, "WaitFaultSelfHealingTime": 15 }, "FaultFrequency": [ { "EventId": [ "80C98000","80B78000","80B58000","80A18008","80A38008","80A58008","80B98000","80B98008","80BB8000", "80BB8008","80BD8000","80BD8008","80C78008","80C98008","80CB8008","80CD8008","80CF8008","80D98008", "80DF8008","80DE1801","80E01801","80E18008","80E38008","80E39200","80E3A202","80E3A203","80E78000", "80E78008","80F18000","80F18008","80F38008","80F78008","81318008","81338008","813B8008","81478008", "81578008","815F8008","81938008","81958008","81978008" ], "TimeWindow": 86400, "Times": 2, "FaultHandling": "ManuallySeparateNPU" }, { "EventId": ["80E18005"], "TimeWindow": 86400, "Times": 3, "FaultHandling": "ManuallySeparateNPU" } ], "FaultDuration": [ { "EventId": ["81078603"], "FaultTimeout": 20, "RecoverTimeout": 60, "FaultHandling": "PreSeparateNPU" } ] } kind: ConfigMap metadata: creationTimestamp: "2024-06-20T10:12:07Z" name: mindx-dl-fault-config namespace: kube-system resourceVersion: "52893696" selfLink: /api/v1/namespaces/kube-system/configmaps/mindx-dl-fault-config uid: bba9e17f-41dd-43b3-848e-3d29cb8c595a
一级参数名称 |
二级参数名称 |
说明 |
---|---|---|
GraceTolerance |
- |
优雅容错相关配置。 说明:
GraceTolerance及其子参数不存在或者超出取值范围,则使用默认值。 |
- |
WaitProcessReadCMTime |
使用优雅容错模式时,等待管理进程读取ConfigMap文件的时间,单位为秒,取值范围为5~90,默认值为30。 |
- |
WaitDeviceResetTime |
使用优雅容错模式时,等待芯片重启的最大时长,单位为秒,取值范围为60~180,默认值为150。 |
- |
WaitFaultSelfHealingTime |
使用优雅容错模式时,等待RestartBusiness级别故障恢复时间,单位为秒,取值范围为1~30,默认值为15。 |
FaultFrequency |
- |
自定义故障频率,即某一故障在时间窗口内出现次数达到次数上限时,根据配置的故障处理策略进行处理。 说明:
|
- |
EventId |
故障码ID。 说明:
每个故障码(EventId)只允许配置一个FaultFrequency参数,如果配置了多个,则只有第一条正确的会生效。 |
- |
TimeWindow |
时间窗口,即统计当前时间减去TimeWindow的时间至当前时间,这段时间范围内的故障次数,单位为秒,取值范围为60~864000。 |
- |
Times |
任务支持的断点续训最大次数,即同一个故障出现的次数上限,取值范围为1~100。如果在时间窗口内该故障出现次数大于或等于该值,则按照FaultHandling中定义的策略处理和上报。 |
- |
FaultHandling |
达到断点续训最大次数后故障的处理策略,支持配置不同级别的故障处理策略。 说明:
|
FaultDuration |
- |
自定义故障超时策略,当某一故障持续时间达到配置上限时,该故障会按照指定的故障处理策略进行处理。 说明:
|
- |
EventId |
故障ID。 说明:
每个故障码(EventId)只允许配置一个FaultDuration参数,如果配置了多个,则只有第一条正确的会生效。 |
- |
FaultTimeout |
|
- |
RecoverTimeout |
故障恢复时间超过该值,则上报故障恢复,单位为秒,取值范围为0~86400,默认值说明如下。
|
- |
FaultHandling |
超过故障持续时间后的故障处理策略,支持配置不同级别的故障处理策略。 说明:
超过故障持续时间后的故障处理策略,建议高于故障本身的故障处理策略,否则配置不生效。 |
注
|
{ "EventId": ["0CB8002"], "TimeWindow": 86400, "Times": 2, "FaultHandling": "ManuallySeparateNPU" }
kubectl get pods -A | grep ascend-device-plugin
1 | kube-system ascend-device-plugin-daemonset-910-jmlf5 1/1 Running 0 6h34m |
kubectl logs -n kube-system ascend-device-plugin-daemonset-910-jmlf5
kubectl get cm -n kube-system | grep deviceinfo | grep {nodeName}
kubectl edit cm -n kube-system {configMapName}
apiVersion: v1 kind: ConfigMap data: DeviceInfoCfg: '{"DeviceInfo":{"DeviceList":{"huawei.com/Ascend910":"Ascend910-1,Ascend910-2,Ascend910-3,Ascend910-4,Ascend910-5,Ascend910-6,Ascend910-7","huawei.com/Ascend910-Fault":"[]","huawei.com/Ascend910-NetworkUnhealthy":"","huawei.com/Ascend910-Unhealthy":""},"UpdateTime":1718702470},"CheckCode":"4f00cf1d220da26a8fdbeb5ba163a751d4b264c48b81d22149257e272ae3b413"}' ManuallySeparateNPU: Ascend910-0
删除ManuallySeparateNPU字段后所有芯片名称,并将取值设置为空“”。
kubectl describe cm -n kube-system {configMapName}