返回 文章 apply CMS 文章

NVIDIA 开源 NVCRE:在生产负载落地前验证 GPU 集群就绪性

用真实分布式工作负载主动验证 GPU 集群就绪性,而非依赖健康检查的假设。

GPU集群KubernetesNVCRENVIDIA
成长分 / 100 77 综合收获、行动、留存与影响

NVIDIA 开源 NVCRE:在生产负载落地前验证 GPU 集群就绪性
为什么值得读了解为什么 GPU 集群通过所有健康检查仍可能在真实 AI 工作负载下失败,以及如何提前发现这类问题。

掌握 NVCRE 的分层 API 设计(Certification、Workflow、Job)和自适应故障隔离机制,理解如何将故障归因到特定节点。

关键洞察
  1. GPU 集群可能通过所有标准诊断,但在真实分布式作业下仍会失败,因此测试就绪性的最佳方式是运行真实工作负载。
  2. NVCRE 采用 Certification、Workflow、Job 三层 API,将每个故障归因到特定节点和类别,结果向上传播。
  3. 通过标准使用 CEL 表达式定义,默认不附带阈值,完成运行但未达到目标值的工作负载仍会被报告为失败。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:13776

一个 GPU 集群可能通过所有健康检查,却仍然无法运行 AI 工作负载。即使每个 GPU、网络链路和 Pod 都报告健康,一个 512-GPU 的训练作业仍可能性能不达标或失败。原因可能是一个缓慢的 GPU、一条在负载下性能下降的链路,或者一个悄悄将流量路由到较慢路径的配置。运维人员可能直到运行数小时后,或直到客户提交工单时才发现问题。随后,团队可能花费数天对集群进行二分排查以找到根本原因,而容量却一直闲置。

NVIDIA Cluster Readiness Engine (NVCRE) 是一个开源 Kubernetes 控制器,可在生产工作负载落地之前将搜索范围缩小到涉及的特定节点。它在拓扑感知的节点组上运行真实的分布式工作负载,测量结果,并报告哪些节点未通过每项测试。运维人员不再需要手写 NVIDIA Collective Communications Library (NCCL) 清单、手动对机架进行二分排查,或从客户工单中得知硬件性能下降。就绪性成为集群经过验证的属性,而非假设。

证明就绪性需要什么

GPU 集群分阶段达到就绪状态。它经历启动、烧机、预生产和生产阶段,每个阶段设定不同的标准。通过冒烟测试的节点不一定准备好加入 512-GPU 训练运行。

平台团队通常将这一进程编码在运行手册、电子表格或围绕 NCCL 测试的 shell 脚本中。这成为他们必须在节点配置、GPU 共享和工作负载编排之外构建和维护的另一个系统。

集群可以通过标准诊断,却仍然在真实的分布式作业下失败,因此测试就绪性的最佳方式是运行工作负载。在 Slurm 上,这需要一条 srun

命令。Kubernetes 没有内置的等效功能,因此同样的测试需要 GPU 和远程直接内存访问 (RDMA) 资源请求、与网络结构匹配的 NCCL 设置、足够大的共享内存卷,以及确保所有 Pod 一起启动的方法。

NVCRE 在 Kubernetes 上填补了这些空白。它运行能够暴露真实硬件问题的工作负载,并准确指出每个故障是由哪个节点引起的。

communication/nccl-all-reduce
状态:失败
运行时长:42分18秒
规模:全规模
节点/作业:8
失败节点:
gpu-node-07 阈值违规
gpu-node-12 检测到硬件故障
摘要
类别:1/2 通过
失败节点:2
结果:失败

NVCRE 的工作原理

API 就是产品界面。自定义资源定义(CRD)定义了每种资源,因此你可以用 kubectl 检查它

并通过 GitOps 工作流管理它。

分层 API

该 API 有三种按层级排列的资源。

Certification:你创建的资源。它指定要测试的节点以及要运行的类别。Workflow:管理一个类别。它应用目录、平台和 GPU 覆盖;管理迭代次数;设置编排目标;并创建子作业。Job:为目标节点组运行工作负载,监控节点健康状况,并记录测量结果和故障。

一个 certification 会为每个类别创建一个 workflow,而每个 workflow 会创建其子 job。

结果随后向上传播。job 记录哪些节点失败以及原因,workflow 报告测试结果,certification 按类别对结果进行分组。

这种层级结构将每个故障归因到特定节点和类别。例如,一次运行报告 gpu

-01

在 NCCL 期间遇到硬件故障,而 gpu

-02

未达到其带宽目标。

验证集群

以下示例展示了 certification 如何指定其目标和要运行的类别。

apiVersion: nvcre.nvidia.com/v1alpha1
kind: Certification
metadata:
name: gpu-cluster-cert
spec:
target:
nodeSelector:
nvidia.com/gpu.present: "true"
categories:
- domain: communication
variant: nccl-all-reduce
- domain: training
variant: nemotron5-8b
$ kubectl apply -f certification.yaml
$ kubectl get certifications.nvcre.nvidia.com -w

内置目录目前涵盖三个领域:五种 NCCL 通信变体(all-reduce、all-gather、all-to-all、loopback,以及跨 NVIDIA NVSwitch 的 loopback)、NVIDIA 数据中心 GPU 管理器(DCGM)四级诊断套件,以及使用 NVIDIA Nemotron 5 模型(8B 和 56B 参数)进行的 NVIDIA NeMo 预训练。每个条目都包含平台感知的默认值。

NVCRE 会从目标节点检测 GPU 架构和云平台,并推导出其余配置,包括每节点 GPU 数量、NCCL 环境以及平台特定的网络配置。

以表达式表示的通过标准

通过和失败标准使用通用表达式语言(CEL),并针对测量指标进行评估。默认不附带任何阈值。以下数值是面向 NVIDIA GB200 NVL72 级系统的示例说明。

categories:
- domain: communication
variant: nccl-all-reduce
options:
thresholds:
busBandwidthGBps: "value >= 900"
- domain: training
variant: nemotron5-8b
options:
thresholds:
goodputRatio: "value >= 0.9"
avgTFLOPsPerGPU: "value >= 800"

当某项测量指标未达到其目标值时,NVCRE 会设置一个条件,该条件与运行本身是否成功分开记录。一个完成运行但未达到目标值的工作负载仍会被报告为失败。ValidationFailed

在故障显现的规模上进行测试

有些故障只有在特定规模下才会显现,因此分组策略是显式指定的。testScale

字段用于选择策略。

  • Intra-node 独立测试每个节点。
  • Intra-rack 使用 nvidia.com/gpu.clique

标签按拓扑域对节点进行分区。 - Full-scale 将所有节点放入单个组中。

  • Diagnose 运行自适应故障隔离(下一节介绍)。

你选择的策略决定了要测量什么。在一个 NVIDIA NVLink 域内运行的 NCCL 测试测量的是 NVLink 带宽,而同样的测试跨三个机架运行时测量的则是横向扩展网络。两者测量的是不同的东西。

自适应故障隔离

多节点验证中最困难的情况是无法归因于任何单个节点的故障。一个 64 节点的 all-reduce 返回低带宽,组内每个节点都同样有嫌疑。手动隔离原因可能需要耗费数天的工程时间。

NVCRE 将这种隔离自动化。设置 testScale: diagnose

会运行拓扑感知的分层分组测试。引擎会拆分每个失败的组,重新运行拆分后的两半,并持续进行直到达到 minGroupSize

。在该规模下仍然失败的组会被标记为可疑对象。maxConcurrent

限制并发运行的作业数量,以免它们占满正在被测量的网络。

输出会指出少量可疑节点,而不是将整个组都列为嫌疑对象,并给出每个节点失败的原因。

运行任意工作负载:WorkloadRun

API

在 Kubernetes 上运行多节点 GPU 工作负载需要平台检测、特定框架的运行时配置、GPU 和网络资源请求,以及失败运行后的清理。这些设置重复且容易出错。

负责处理这些设置:提供容器镜像、选择框架,并指定节点数量。WorkloadRun

apiVersion: nvcre.nvidia.com/v1alpha1
kind: WorkloadRun
metadata:
name: nccl-all-reduce
spec:
image: nvcr.io/nvidia/pytorch:26.01-py3
framework:
mpi:
binary: /usr/local/bin/all_reduce_perf_mpi
args: ["-b", "8", "-e", "32G", "-f", "2", "-n", "100"]
mpirunPath: /usr/local/mpi/bin/mpirun
numNodes: 4
bandwidthMeasurement:
logProfileRef: nccl-bandwidth
testType: all_reduce

framework

字段仅支持以下三者之一:torch

(通过 torchrun

进行分布式训练)、mpi

(NCCL 测试及其他 MPI 工作负载)或 exec

(任意命令)。NVCRE 会生成匹配的 Kubeflow TrainingRuntime

,注入共享内存卷,设置 NCCL 和平台环境变量,并在硬件支持时启用 NVIDIA NVLink 纵向扩展网络。

如果没有 gang 调度器,默认的 Kubernetes 调度器会独立放置各个 pod,各 rank 会在框架会合点等待其对等节点。在繁忙的集群上,这可能导致死锁:部分已放置的 pod 占用着 GPU,等待永远不会到达的对等节点。设置 spec.gangScheduler

可将每个工作负载 pod 纳入支持 gang 调度的调度器(例如 KAI Scheduler),该调度器会保持所有 pod 等待,直到整个 gang 能够一次性完成放置。

由于

是一个普通的 CRD,外部工具可以使用它来运行工作负载,而无需采用 NVCRE 的其余部分。NVCRE 提供执行路径,调用工具提供测试。WorkloadRun

大规模配置、验证和监控 AI 集群

集群在走向生产的过程中必须回答三个问题:它配置正确吗?它准备好运行真实的 AI 工作负载了吗?它现在健康吗?NVIDIA DSX OS 的不同层分别解决每个问题。

NVIDIA AI Cluster Runtime (AICR) 建立并维护经过验证的集群配置。AICR 将驱动程序、算子、内核和系统设置的经过验证的组合捕获为版本锁定的配方。团队可以在不同集群间复现相同的优化配置,验证实时状态,并检测漂移。这减少了性能差异,避免了在昂贵的 GPU 闲置时耗费数天的调优。

NVCRE 验证集群是否准备好运行真实的 AI 工作负载。这个主动的、由工作负载驱动的层会生成负载,因此能够发现不产生遥测数据的故障。单个性能下降的 GPU 会将同步训练作业拖慢到其最差 rank 的速度,而 NCCL 带宽测试可以在几分钟内识别出问题。

NVIDIA NVSentinel 持续监控集群健康。作为被动的、由遥测数据驱动的层,它监视集群已经产生的信号,包括 DCGM 指标、Xid 错误、系统日志和云提供商维护事件。它检测运行时故障,并可驱动隔离、排空和修复工作流。由于它不消耗 GPU 时间,因此可以在生产环境中持续运行,而主动测试则会占用本应属于工作负载的 GPU。

每个项目都能独立交付价值,并可与其它项目集成,供运行完整技术栈的团队使用。

图示对比了针对六 GPU 集群的被动 NVSentinel 监控与主动 NVCRE 验证。NVSentinel 摄取 DCGM 指标、Xid 错误、系统日志和云事件以检测故障并驱动 cordon、drain 和修复。NVCRE 通过认证、工作流和作业阶段运行其测试目录,生成负载并测量结果,以识别出 gpu-02 运行速度慢 8% 却不发出任何遥测数据。这些工具按顺序运行:NVCRE 识别故障节点,NVSentinel 对其进行修复。

图 1. NVSentinel 被动接收集群遥测数据,而 NVCRE 主动生成负载以发现不产生遥测数据的故障

NVCRE 记录失败节点及原因。它不会对节点执行 cordon、taint 或修补节点状况,从而避免冲突操作和不同步的清理。NVSentinel NVCRE 认证监控器可以将认证失败结果转换为健康事件。随后,已配置的 NVSentinel 策略可以隔离并驱逐节点,或触发外部修复。之后一次成功的认证可以清除失败信号并解除 taint。

开始使用

NVCRE 需要 Kubernetes 1.29 或更高版本、kubectl

、Helm 3.x,以及目标集群上的 NVIDIA GPU Operator。NVIDIA GB200 NVL72 和 NVIDIA GB300 NVL72 目录条目还需要用于 GPU 的 NVIDIA DRA Driver,因为这些条目会创建 ComputeDomain 资源。DCGM level-4 类别需要独立的 DCGM 服务。诸如 KAI Scheduler 之类的 gang-aware 调度器是可选的,但在繁忙的共享集群上推荐使用。

安装 CLI 并设置集群。nvcrectl setup init

命令会安装 CRD、控制器、Kubeflow Trainer 和默认日志配置文件。

$ curl -fsSL https://github.com/NVIDIA/cluster-readiness-engine/releases/latest/download/installer | bash
$ nvcrectl setup init

然后运行端到端验证。

$ nvcrectl certification run --cert-file certification.yaml --wait
$ nvcrectl certification report gpu-cluster-cert -n <namespace>

以下报告列出了每个类别的状态、运行时间、实测带宽以及任何失败的节点,并附有每次失败的原因。

认证报告
名称:gpu-cluster-cert
平台:aws
GPU:gb300
节点数:16
communication/nccl-all-reduce
状态:成功
运行时长:3分56秒
规模:全规模
节点数/作业:16
MNNVL:已启用
带宽:
大小 算法带宽 总线带宽 样本数
16 GB 473.44 GB/s 932.09 GB/s 9
摘要
类别:1/1 通过
失败节点:无
结果:通过

参与贡献

NVCRE 采用 Apache 2.0 许可证,并以开放方式开发。在 GitHub 上发送拉取请求之前,请先报告缺陷、请求功能或提出变更建议。你也可以贡献目录条目、工作负载适配器、测试和文档。

使用该引擎在生产环境之前验证 GPU 集群。其共享工作流和测试目录可在 Kubernetes 集群中一致运行,并规划支持新的 NVIDIA 架构、推理和自动化生命周期验证。

在下一个生产工作负载上线之前,验证你的 GPU 集群。

该项目是 NVIDIA DSX OS 的一部分,后者是 NVIDIA DSX AI Factory Platform 的操作层。