Kubernetes中的GPU故障:处理设备故障,避免无休止的挂起状态
Meta
NVIDIA
2024年,Meta公司的16,384块H100组成的集群在训练Llama 3 405B时遭遇了419次中断,其中58.7%归因于GPU故障。Kubernetes通常通过在同一故障设备上重启容器来处理这类问题,导致无休止的Pending状态。本文解释了Kubernetes 1.36中新的动态资源分配(Dynamic Resource Allocation,DRA)特性如何最终提供解决方案,并在VK Cloud托管集群上进行了实时演示。
文章重点介绍了Meta训练Llama 3 405B的经验,其由16384块H100 GPU组成的集群遭遇了419次中断,其中58.7%与GPU相关。文章指出,Kubernetes传统上将设备故障视为无状态服务故障,尝试在同一块损坏的GPU上重启,导致崩溃循环。为解决这一问题,Kubernetes 1.36引入了若干机制:DRA(动态资源分配)自1.34起已稳定,提供了基于对象的模型,而非简单的计数器;备用设备的优先列表(firstAvailable);Pod状态中的设备健康状态;设备污点和容忍度;以及设备绑定条件等。作者在VK Cloud托管Kubernetes 1.36上搭建了带有GPU节点的测试台,并通过热拔PCIe设备来模拟GPU故障。他们展示了节点将设备报告为不健康且可分配数量下降,但Pod持续在已失效的GPU上重启,没有任何重新调度发生。文章最后解释了为什么Kubernetes没有内置的针对CrashLoopBackOff Pod的解除调度机制,并提到了节点健康控制器等DIY模式,这些模式会杀死整个节点,是一种粗暴的手段。
来源: Habr — хаб ML —
原文
