验证 GPU 集群就绪性之前 AI 工作负载

📌 One-Sentence Summary
NVIDIA 的开源 NVCRE Kubernetes 控制器在生产环境之前运行真实分布式工作负载来证明 GPU 集群就绪性,精确定位哪些节点失败并且为什么。
📝 Summary
一个 GPU 集群可以通过每个标准健康检查而通过,但仍然在 512-GPU 训练作业中下 perform 或失败,因为一个慢的 GPU 或一个在负载下退化的连接产生了无 telemetry。NVIDIA 集群就绪性引擎 (NVCRE) 是一个开源的 Kubernetes 控制器,它解决了这个问题,通过在拓扑感知的节点组上运行真实分布式工作负载并报告哪些节点失败了每个测试。它的 API 层次化为认证、工作流和作业自定义资源,通过 Common Expression Language 对测量指标表达通过/失败标准。测试规模是明确的(节点内、节点组内、全局或诊断),并且诊断模式进行了适应性分层故障隔离,以命名一个小的可疑节点集,而不是涉及整个组。一个单独的 WorkloadRun API 处理了多节点作业的重复设置,包括 gang 调度以避免死锁。NVCRE 与 AICR 配置和 NVSentinel 被动监控一起工作,故意不隔离或污染节点本身。
💡 Main Points
标准健康检查无法证明集群就绪性
每个 GPU、连接和 Pod 都可以报告健康,而一个 512-GPU 训练作业仍然下 perform 或失败,因为一个慢的 GPU 或一个在负载下退化的连接产生了无 telemetry。失败可能只有在几个小时后才会出现或通过客户票据,手动分割集群可能需要几天的空闲容量。
NVCRE 通过运行真实分布式工作负载来测试就绪性
层次化 API (认证、工作流、作业) 创建一个工作流程每个类别和一个作业每个节点组,然后将结果向上传播,使每个失败都与一个特定的节点和类别相关联,例如 gpu-01 在 NCCL 中击中硬件故障,而 gpu-02 Missed 它的带宽目标。
通过/失败标准是明确的表达式
阈值使用 Common Expression Language 对测量指标进行评估,没有默认值被传递。当一个指标错过目标时,NVCRE 设置一个 ValidationFailed 条件,记录在成功运行本身之外。
适应性故障隔离解决了最困难的案例
将 testScale 设定为诊断模式,进行了拓扑感知分层组测试,拆分每个失败组并重新运行半组,直到 minGroupSize 被达到,然后标记剩余失败作为可疑。这个替代了手动分割的几天,并命名了一个小的可疑集,而不是整个组。
NVCRE 是一个三部分堆栈的一部分,故意避免了修复操作
AICR 维护了验证的集群配置,NVCRE 主动生成负载来找到产生无 telemetry 的失败,NVSentinel 被动消耗 DCGM 指标、Xid 错误和日志来驱动隔离和排空。NVCRE 记录了失败的节点,但不隔离、污染或修复节点条件,留下了修复给 NVSentinel 政策。
💬 Key Quotes
一个 GPU 集群可以通过每个健康检查而通过,但仍然无法运行 AI 工作负载。
一个集群可以通过标准诊断而通过,但仍然无法在真实分布式作业下失败,因此测试就绪性的最佳方法是运行工作负载。
在多节点验证中,最困难的案例是无法归因于任何单个节点的故障。
一个单独的退化 GPU 会使同步训练作业的速度降至其最慢的排名速度,而一个 NCCL 带宽测试可以在分钟内识别问题。
NVCRE 记录了失败的节点和原因。它不隔离、污染或修复节点条件,避免了冲突的操作和不同步的清理。
📊 Article Meta
AI Screening: 86
Source: NVIDIA Technical Blog
Author: Michelle Horton
Category: 人工智能
Language: 英文
Read Time: 8 min
Word Count: 1819
Tags:
AI 与智能应用 , 云原生 / DevOps , 开源项目 , LLM 推理优化 , AI 硬件与芯片
思路清晰,干货满满。
有没有更详细的教程,期待后续。
很有价值的分享,感谢整理。
很有价值的分享,感谢整理。
看标题就点进来了,内容果然没让人失望。
刚好最近在找这方面的资料,太及时了。
讲解得很细致,新手也能看懂。
楼主辛苦了,内容很有参考价值。
看完了,收获满满,期待更多更新。
写得挺用心的,支持一下。
思路清晰,干货满满。
有没有更详细的教程,期待后续。