AI 平台/部署

在 AI 工作负载落地之前验证 GPU 集群就绪情况

借助 NVIDIA Cluster Readiness Engine,团队能够通过基于工作负载的验证,将可靠的 GPU 集群投入生产环境。

GPU 集群可以通过每一次运行状况检查,但仍然无法运行 AI 工作负载。即使每个 GPU、网络链路和 POD 都报告正常,512-GPU 训练作业也可能表现不佳或失败。其原因可能是 GPU 运行缓慢、链路在负载下性能下降,或者配置在较慢的路径上悄无声息地路由流量。操作员可能会在运行几小时或客户提交工单后才发现问题。然后,当容量处于闲置状态时,团队可以花费数天时间对集群进行分割,找出根本原因。

NVIDIA 集群就绪引擎 (NVCRE) 是一个开源 Kubernetes 控制器,可在生产工作负载落地之前将搜索范围缩小到所涉及的特定节点。它跨拓扑感知节点组运行真实的分布式工作负载,测量结果,并报告哪些节点在每次测试中都失败了。运营商不再需要手动编写 NVIDIA 集合通信库 (NCCL) 清单、手动分割机架或从客户工单中了解硬件降级。就绪性成为集群的一个经过验证的属性,而不是一种假设。

证明就绪性需要什么?

GPU 集群分阶段准备就绪。它经历了启动、老化、预生产和生产阶段,每个阶段都设定了不同的标准。通过烟雾测试的节点不一定准备好加入 512-GPU 训练运行。

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

集群可以通过标准诊断,但在实际分布式作业下仍然失败,因此测试准备情况的最佳方法是运行工作负载。在 Slurm 上,这需要一个 srun 命令。Kubernetes 没有内置等效数据,因此相同的测试需要 GPU 和远程直接内存访问 (RDMA) 资源请求、与网络结构匹配的 NCCL 设置、足够大的共享内存卷,以及确保所有 POD 一起启动的方法。

NVCRE 填补了 Kubernetes 上的这些空白。它运行的工作负载会暴露实际的硬件问题,并确切地命名导致每次故障的节点。

communication/nccl-all-reduce
Status:       Failed
Runtime:      42m 18s
Scale:        full-scale
Nodes/Job:    8

Failed Nodes:
  gpu-node-07  ThresholdViolation
  gpu-node-12  HardwareFailureDetected

Summary
Categories:   1/2 passed
Failed Nodes: 2
Result:       FAILED

NVCRE 的工作原理

API 是产品表面。自定义资源定义 (CRD) 可定义每个资源,因此您可以使用 kubectl 检查这些资源,并通过 GitOps 工作流进行管理。

分层 API

该 API 在层次结构中安排了三个资源。

  • 认证:您创建的资源。它为要测试的节点和要运行的类别命名。
  • 工作流:管理一个类别。它应用目录、平台和 GPU 优设;管理迭代数量;设置编排目标;并创建子作业。
  • 作业:运行目标节点组的工作负载,监控节点运行状况,并记录测量结果和故障。

认证会为每个类别创建一个工作流,每个工作流都会创建相应的子作业。

然后,结果会向上传播。作业会记录哪些节点发生故障及其原因,工作流会报告测试结果,认证组会按类别报告结果。

该层次结构将每个故障归因于特定节点和类别。例如,一次运行报告显示 gpu-01 在 NCCL 期间发生硬件故障,并且 gpu-02 未达到带宽目标。

验证集群

以下示例展示了认证如何命名其目标和要运行的类别。

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 Data Center GPU Manager (DCGM) L4 级诊断套件,以及使用 8B 和 56B 参数的 NVIDIA Nemotron 5 模型进行的 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 字段选择该策略。

  • 节点内独立测试每个节点。
  • 机架内使用 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 纵向扩展网络。

如果没有帮调度程序,Kubernetes 默认调度程序会独立放置 Pod,并在框架会合中为其对等节点排序。在繁忙的集群中,这可能会导致死锁:部分放置的 pod 会容纳 GPU,同时等待从未到达的节点。设置 spec.gangScheduler 可将每个工作负载 pod 选择为可感知的群组调度程序,例如 KAI Scheduler,该程序会保存所有 pod,直到可以一次性放置整个群组。

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

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

集群在走向生产的道路上必须回答三个问题:是否配置正确?是否已准备好运行真正的 AI 工作负载?现在是否健康?一个不同的 NVIDIA DSX OS 层可以解决每个问题。

NVIDIA AI 集群运行时 (AICR) 可建立并维护经过验证的集群配置。AICR 可捕获经过验证的驱动、运算符、内核和系统设置组合,并将其作为版本锁定的方法。团队可以跨集群重现相同的优化配置、验证实时状态并检测漂移。这减少了性能变化,并避免了在昂贵的 GPU 闲置期间进行数天的调整。

NVCRE 可验证集群是否已准备好运行真实的 AI 工作负载。此工作负载驱动的活动层会生成负载,因此可以找到不产生遥测数据的故障。单个降级的 GPU 会将同步训练作业的速度减慢到最差等级,而 NCCL 带宽测试可以在几分钟内发现问题。

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

每个项目都能独立提供价值,并与运行整个堆栈的团队的其他项目进行集成。

NVCRE 记录失败节点和原因。它不会封锁、污损或修补节点条件,从而避免操作冲突和非同步清理。NVSentinel NVCRE 认证监视器可以将认证失败的结果转化为健康事件。配置的 NVSentinel 策略可以隔离和释放节点,或触发外部补救。后续成功的认证可以清除故障信号并释放污点。

开始使用

NVCRE 需要目标集群上的 Kubernetes 1.29 或更高版本、kubectl、Helm 3.x 和 NVIDIA GPU Operator。NVIDIA GB200 NVL72 和 NVIDIA GB300 NVL72 目录条目还需要适用于 GPU 的 NVIDIA DRA 驱动程序,因为这些条目会创建计算域资源。DCGM L4 类别需要独立的 DCGM 服务。KAI Scheduler 等帮组感知调度程序是可选项,但建议在繁忙的共享集群上使用。

安装 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>

以下报告列出了每个类别的状态、运行时、测量带宽和任何故障节点,以及每次故障的原因。

Certification Report

Name:     gpu-cluster-cert
Platform: aws
GPU:      gb300
Nodes:    16

communication/nccl-all-reduce
Status:       Succeeded
Runtime:      3m 56s
Scale:        full-scale
Nodes/Job:    16
MNNVL:        Enabled

Bandwidth:
  Size       AlgBW        BusBW        Samples
  16 GB      473.44 GB/s  932.09 GB/s  9

Summary
Categories:   1/1 passed
Failed Nodes: none
Result:       PASSED

参与

NVCRE 在 Apache 2.0 下获得许可,并在开放环境中开发。在 GitHub 上发送拉取请求之前,报告错误、请求功能或提出更改建议。您还可以提供目录条目、工作负载适配器、测试和文档。

在生产前使用该引擎验证 GPU 集群。其共享工作流和测试目录在 Kubernetes 集群中持续运行,并为新的 NVIDIA 架构、推理和自动生命周期验证提供路线图支持。

在下一个生产工作负载到来之前验证您的 GPU 集群。

该项目是 NVIDIA DSX OS (NVIDIA DSX AI 工厂平台) 的一部分。

标签