ACK通过ack-node-problem-detector(简称ACK NPD)组件检测GPU资源健康状态。当GPU节点出现XID/SXID错误等异常时,ACK NPD组件自动检测异常GPU,配合ACK NVIDIA Device Plugin组件可对异常GPU进行隔离,此时其他正常的GPU可以继续提供服务,以尽可能减少业务上的损失,提高集群的可靠性和运维效率。
ack-node-problem-detector(ACK NPD)是ACK基于社区开源项目node-problem-detector改造和增强的集群节点异常事件监控组件,提供丰富的GPU异常检测项以增强GPU场景的异常发现能力。发现对应的异常时,组件会根据异常类型产生相应的Kubernetes Event及Node Condition。
注意事项
隔离异常 GPU 卡后,若节点上剩余 GPU 不足以满足任务需求(如 8 卡任务在仅有 7 卡可用时),任务将无法调度,可能导致 GPU 资源闲置。 自动隔离并不等于自动修复,发生 GPU 卡自动隔离的节点实例将持续计费,您仍需修复节点,建议配置GPU 异常告警以便及时处理。GPU状态恢复正常后,对该GPU设备的隔离会自动解除。
您也可以根据业务需求,开启/关闭GPU自动隔离。NVIDIA Device Plugin组件在特定版本支持异常GPU卡自动隔离,但关闭隔离能力操作方式不同。详细操作,请参见 如何关闭NVIDIA Device Plugin原生GPU隔离能力。
NVIDIA的XID和SXID是由GPU驱动通过NVRM事件机制写入
/var/log/messages或/var/log/syslog中。ACK NPD会记录每个XID和SXID是否已被处理,如果在发现XID或SXID后,只要对节点进行重启操作,不管这条XID或SXID所对应的问题是否已被解决(例如XID 79指明需要更换GPU设备才能解决问题),ACK NPD将不会对这条XID或SXID产生Event或Node Condition,即ACK NPD认为这条XID已被解决。ACK NPD检测NVIDIA XID或者NVIDIA SXID是通过检测节点
/var/log/messages文件或/var/log/syslog文件完成的。如果dmesg日志被重定向到其他文件,ACK NPD将无法检测NVIDIA XID和SXID。从ACK NPD 1.2.29版本开始,ACK NPD中GPU异常检测插件将单独以DaemonSet方式部署,DaemonSet名称为ack-accel-health-monitor。
某些情况下,当节点出现GPU异常后,可能会导致节点上无法创建GPU容器,GPU异常检测容器可能受到影响,导致该容器无法创建,继而检测工作无法正常执行。
由于ACK NPD GPU检测插件Pod需要检测GPU设备和GPU组件状态,需要开启
privileged=true等高权限,具体参考下表。集群RBAC权限
容器权限
Node: get
Node/Status: update
Events: create
privileged: true只读挂载宿主机
/dev/kmsg只读挂载宿主机
/usr/lib只读挂载宿主机
/etc只读挂载宿主机
/usr/lib64只读挂载宿主机
/proc
GPU自动隔离机制
自 ACK Node Problem Detector(ACK NPD)组件 1.2.35 版本及ACK NVIDIA Device Plugin组件 0.7.0 版本起,GPU 自动隔离的触发方式将由默认触发调整为按配置触发。更多详细内容,请参见【产品变更】关于GPU自动隔离功能变更的公告。
旧版机制(默认触发)
ACK NPD组件检测到GPU异常时,生成GPU隔离文件,ACK NVIDIA Device Plugin组件将该文件中列出的所有 GPU 设备隔离,即默认在检测到特定异常后自动隔离GPU,用户可通过配置是否产生NVIDIA GPU 隔离文件,控制自动隔离功能的启停。
新版机制(按配置触发)
ACK NPD组件检测到GPU异常时,生成异常检测报告,由 ACK NVIDIA Device Plugin 组件根据异常检测报告及用户配置的触发 GPU 自动隔离的NPD检查项决定是否隔离GPU,ACK NVIDIA Device Plugin组件默认未配置任何触发隔离的检测项,即默认不会触发GPU自动隔离,用户可通过配置触发隔离的检测项,定义在检测到哪些异常后自动隔离异常GPU。
关于两种机制的适用范围,请参见GPU自动隔离行为。
为兼容旧版隔离机制,ACK NPD组件新版本仍会保留生成旧格式GPU隔离文件的行为,但新版 ACK NVIDIA Device Plugin组件已不再读取该文件,相关隔离行为完全由其自身的配置决定。
GPU自动隔离行为
新版机制仅适用于 Kubernetes 1.32 及以上版本 的 ACK 集群。
对于 Kubernetes 1.32 以下版本的集群,仍按照旧版机制执行 GPU 自动隔离。
不同组件版本组合下,GPU 自动隔离行为如下:
ACK NPD 版本 | ACK NVIDIA Device Plugin 版本 | GPU自动隔离行为 | 开启/关闭GPU自动隔离方式 |
ACK NPD版本 < 1.2.24 | N/A | 不具备 GPU 异常检测能力。 | N/A |
ACK NPD版本 ≥ 1.2.24 | ACK NVIDIA Device Plugin 版本 < 0.7.0 | 按旧版机制执行隔离行为。 | 按旧版方式操作。 |
1.2.24 ≤ ACK NPD版本 <1.2.35 | ACK NVIDIA Device Plugin 版本 ≥ 0.7.0 | GPU自动隔离功能不生效,其他功能正常。 由于低版本 ACK NPD 不输出异常检测报告,新版 ACK NVIDIA Device Plugin 无法获取异常 GPU 信息,因此不会执行自动隔离。 | N/A 建议升级ACK NPD至最新版本,使用新版机制 |
ACK NPD版本 ≥ 1.2.35 灰度发布中,请提交工单申请白名单 | ACK NVIDIA Device Plugin 版本 ≥ 0.7.0 灰度发布中,请提交工单申请白名单 | 按新版机制执行隔离行为。 | 按新版方式操作。 |
关于如何查看ACK NPD和ACK NVIDIA Device Plugin组件版本以及升级组件,请参见查看/升级ACK NPD版本和查看/升级NVIDIA Device Plugin版本。
开启/关闭GPU自动隔离
关闭GPU自动隔离或者GPU自动隔离功能不生效时,只影响是否自动隔离GPU卡。即当ACK NPD检测到GPU异常后,仍会根据ACK NPD检查项触发Node Condition、Kubernetes Event及报警,但不会自动隔离异常GPU。
新版方式
开启后当触发ACK NPD检查项时,将自动隔离异常 GPU 卡。自动隔离并不等于自动修复,发生 GPU 卡自动隔离的节点实例将持续计费,您仍需修复节点,建议配置GPU 异常告警以便及时处理;若未选择任何检查项,则不会自动隔离。
-
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理。
在组件管理页面,搜索ack-nvidia-device-plugin组件,在其卡片位置单击配置。
在弹出的对话框中,开启或关闭GPU自动隔离。
开启:勾选启用 GPU 自动隔离,并选择触发 GPU 自动隔离的NPD检查项。
关闭:取消勾选启用 GPU 自动隔离,或者不配置检查项。
旧版方式
当检测到 GPU 异常时,ack-node-problem-detector 组件将按照默认隔离策略生成 NVIDIA GPU 隔离文件,ack-nvidia-device-plugin 组件将根据该文件内容自动隔离异常 GPU 卡,以避免新的负载调度到异常 GPU 后无法正常运行,其他正常的 GPU 可以继续提供服务。而自动隔离并不会执行自动修复,发生 GPU 卡自动隔离的节点实例将持续计费,您仍需手动重启或维修节点,并建议配置GPU 异常告警以便及时处理。
当 ack-node-problem-detector组件版本为 v1.2.30 及以上时,支持通过组件管理中的配置项
generateNvidiaGpuIsolationFile控制是否自动隔离异常 GPU。当组件升级后,请结合GPU自动隔离行为判断新组件版本对应的开启/关闭GPU自动隔离的操作方式。
开启:旧版机制默认触发GPU自动隔离,可通过将
generateNvidiaGpuIsolationFile(1.2.30 及以上版本)或EnabledIsolateGPU(1.2.24至1.2.29版本)设置为true重新开启。关闭:
在集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理。
在日志与监控页签,查找ack-node-problem-detector组件,然后根据当前组件版本执行对应操作。
1.2.24 至 1.2.29 版本:请升级至最新版本。
1.2.30 及以上版本:请单击配置。
在组件升级或组件配置界面中,将
generateNvidiaGpuIsolationFile(是否产生NVIDIA GPU 隔离文件)设置为false,然后单击确认。说明若您此前在1.2.24至1.2.29版本通过修改
ack-node-problem-detector-daemonset的EnabledIsolateGPU配置为false临时关闭了GPU自动隔离功能,在升级ACK NPD组件版本时该关闭配置会自动保留。如果您在关闭后希望重新开启GPU卡自动隔离功能,可将generateNvidiaGpuIsolationFile设置为true。
针对已经产生的GPU卡自动隔离,可通过登录到发生XID错误的节点,删除
/etc/nvidia-device-plugin/unhealthyDevices.json文件,来解除该节点上的GPU隔离。为了避免再次被隔离,可以参考上一步操作关闭自动隔离功能。
检测项及修复建议
发现GPU异常后,请参照 Nvidia Xid Errors进行修复。也可根据节点实例类型(如ECS、灵骏)在对应云产品控制台查询是否存在节点实例的运维事件,或者通过自主诊断工具对节点硬件异常进行排查。
下表中是否自动隔离GPU卡为旧版机制的默认隔离行为,新版本机制将按照用户自定义配置决定是否自动隔离,详细内容请参见GPU自动隔离机制。
其他相关Event
独占GPU场景下,旧版机制下默认自动隔离异常GPU,新版机制下需在组件管理中配置触发项。隔离后,新的GPU应用Pod不会被分配至该GPU卡。您可查看Kubernetes Node上报的Resource中的nvidia.com/gpu数量以查看隔离效果。等待GPU卡恢复后,ACK会自动解除隔离。
触发原因 | Event内容 | 描述 |
GPU卡隔离 | 是
| GPU卡因检测出的异常被隔离。 |
GPU卡解除隔离 | 是
| GPU卡异常恢复,解除卡隔离。 |