将 P6e-GB200 UltraServer 与 Amazon EKS 搭配使用 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

将 P6e-GB200 UltraServer 与 Amazon EKS 搭配使用

本主题介绍如何配置和使用 Amazon EKS 与 P6e-GB200 UltraServer。配备 4 个 NVIDIA Blackwell GPU 的 p6e-gb200.36xlarge 实例类型仅作为 p6e-GB200 UltraServer 提供。P6e-GB200 UltraServer 有两种类型。u-p6e-gb200x36 UltraServer 有 9 个 p6e-gb200.36xlarge 实例,u-p6e-gb200x72 UltraServer 有 18 个 p6e-gb200.36xlarge 实例。

要了解更多信息,请参阅 Amazon EC2 P6e-GB200 UltraServer 网页

注意事项

  • Amazon EKS 支持适用于 Kubernetes 1.33 及更高版本的 P6e-GB200 UltraServer。此 Kubernetes 版本支持动态资源分配(DRA),在 EKS 和 AL2023 EKS 优化版加速 AMI 中默认已启用。将 P6e-GB200 UltraServer 与 EKS 搭配使用才能实现 DRA。Karpenter 或 EKS 自动模式不支持 DRA,建议在将 p6e-GB200 UltraServer 与 EKS 搭配使用时,使用 EKS 自主管理型节点组或 EKS 托管式节点组。

  • p6e-GB200 UltraServer 可通过 EC2 机器学习容量块提供。有关如何使用容量块启动 EKS 节点的信息,请参阅管理 Amazon EKS 上人工智能/机器学习工作负载的计算资源

  • 将 EKS 托管式节点组与容量块搭配使用时,必须使用自定义启动模板。升级采用 P6e-GB200 UltraServer 的 EKS 托管式节点组时,在升级前必须将所需的节点组大小设置为 0

  • 建议使用 EKS 优化版加速 AMI 的 AL2023 ARM NVIDIA 变体。此 AMI 包括使用 p6e-GB200 UltraServer 所需的节点组件和配置。如果您决定构建自己的 AMI,则应负责安装和验证节点与系统软件(包括驱动程序)的兼容性。有关更多信息,请参阅 为 GPU 实例使用 EKS 优化版加速 AMI

  • 建议使用 EKS 优化版 AMI 版本 v20251103 或更高版本,其中包括 NVIDIA 驱动程序版本 580。此 NVIDIA 驱动程序版本启用了基于驱动程序的一致性内存管理(CDMM),可解决潜在的内存过度报告问题。启用 CDMM 后,不支持以下功能:NVIDIA 多实例 GPU(MIG)和 vGPU。有关 CDMM 的更多信息,请参阅 NVIDIA Coherent Driver-based Memory Management (CDMM)

  • 在将 NVIDIA GPU 操作器与 EKS 优化版 AL2023 NVIDIA AMI 搭配使用时,必须禁用驱动程序和工具包的操作器安装功能,因为这些驱动程序和工具包已包含在 AMI 中。EKS 优化版 AL2023 NVIDIA AMI 不包括 NVIDIA Kubernetes 设备插件或 NVIDIA DRA 驱动程序,这些插件和驱动程序必须单独安装。

  • 每个 p6e-gb200.36xlarge 实例最多可以配置 17 张网卡,并且可以利用 EFA 在 UltraServer 之间进行通信。工作负载网络流量可以跨 UltraServer 进行传输,但为了获得最高性能,建议在同一个 UltraServer 中计划工作负载,并利用 IMEX 进行 UltraServer 内的 GPU 通信。有关更多信息,请参阅 P6e-GB200 实例的 EFA 配置

  • 每个 p6e-gb200.36xlarge 实例有 3 个 7.5 TB 的实例存储空间。默认情况下,EKS 优化版 AMI 不会格式化和挂载实例存储。节点的临时存储空间可以在请求临时存储的容器组(pod)和下载到该节点的容器映像之间共享。如果使用 AL2023 EKS 优化版 AMI,则可以通过将 NodeConfig 中的实例本地存储策略设置为 RAID0,将该 AMI 配置为用户数据中节点引导的一部分。如果设置为 RAID0 条带,则实例会存储并配置容器运行时和 kubelet 以使用此临时存储。

组件

建议使用以下组件在 EKS 上使用 p6e-GB200 UltraServer 运行工作负载。可以选择使用 NVIDIA GPU 操作器来安装 NVIDIA 节点组件。在将 NVIDIA GPU 操作器与 EKS 优化版 AL2023 NVIDIA AMI 搭配使用时,必须禁用驱动程序和工具包的操作器安装功能,因为这些驱动程序和工具包已包含在 AMI 中。

堆栈 组件

EKS 优化版加速 AMI

内核 6.12

NVIDIA GPU 驱动程序

NVIDIA CUDA 用户模式驱动程序

Nvidia 容器工具包

NVIDIA Fabric Manager

NVIDIA IMEX 驱动程序

NVIDIA NVLink Subnet Manager

EFA 驱动程序

在节点上运行的组件

VPC CNI

EFA 设备插件

NVIDIA K8s 设备插件

NVIDIA DRA 驱动程序

NVIDIA 节点功能发现(NFD)

NVIDIA GPU 功能发现(GFD)

上表中的节点组件可执行以下功能:

  • VPC CNI:将 VPC IP 分配为在 EKS 上运行的容器组(pod)的主网络接口

  • EFA 设备插件:将 EFA 设备分配为在 EKS 上运行的容器组(pod)的辅助网络。负责跨 P6e-GB200 UltraServer 传输的网络流量。对于多节点工作负载,UltraServer 内的 GPU 到 GPU 流量可以流经多节点 NVLink。

  • NVIDIA Kubernetes 设备插件:将 GPU 分配为在 EKS 上运行的容器组(pod)的设备。建议使用 NVIDIA Kubernetes 设备插件,直到 NVIDIA DRA 驱动程序 GPU 分配功能结束实验阶段。有关更新后的信息,请参阅 NVIDIA DRA 驱动程序版本

  • NVIDIA DRA 驱动程序:启用 ComputeDomain 自定义资源,便于创建 IMEX 域,这些域可跟踪在 p6e-GB200 UltraServer 上运行的工作负载。

    • ComputeDomain 资源描述了节点间内存交换(IMEX)域。将具有 ComputeDomain 的 ResourceClaim 的工作负载部署到集群时,NVIDIA DRA 驱动程序会自动创建在匹配节点上运行的 IMEX DaemonSet,并在工作负载启动之前在节点之间建立 IMEX 通道。要了解有关 IMEX 的更多信息,请参阅适用于多节点 NVLink 系统的 NVIDIA IMEX 概述

    • NVIDIA DRA 驱动程序使用 NVIDIA GFD 应用的 clique ID 标签 (nvidia.com/gpu.clique),该标签传递了网络拓扑和 NVLink 域的知识。

    • 最佳做法是为每个工作负载作业创建 ComputeDomain。

  • NVIDIA 节点功能发现(NFD):GFD 需要依赖项才能根据发现的节点级属性应用节点标签。

  • NVIDIA GPU 功能发现(GFD):将称为 nvidia.com/gpu.clique 的 NVIDIA 标准拓扑标签应用于节点。同一个 nvidia.com/gpu.clique 内的节点具有多节点 NVLink 可访问性,您可以在应用程序中使用容器组(pod)亲和性,将容器组(pod)调度到同一 NVLink 域。

过程

以下部分假设您有一个运行 Kubernetes 1.33 或更高版本的 EKS 集群,其中一个或多个节点组的 p6e-GB200 UltraServer 运行 AL2023 ARM NVIDIA EKS 优化版加速 AMI。有关 EKS 自主管理型节点和托管式节点组的先决条件步骤,请参阅管理 Amazon EKS 上人工智能/机器学习工作负载的计算资源中的链接。

以下步骤使用下面的组件。

名称 版本 说明

NVIDIA GPU 操作器

25.3.4+

用于管理所需插件(例如 NVIDIA Kubernetes 设备插件和 NFD/GFD)的生命周期。

NVIDIA DRA 驱动程序

25.8.0+

用于 ComputeDomain CRD 和 IMEX 域管理。

EFA 设备插件

0.5.14+

用于跨 UltraServer 通信。

安装 NVIDIA GPU 操作器

NVIDIA GPU 操作器可简化在 Kubernetes 集群中使用 GPU 所需的组件的管理。由于 NVIDIA GPU 驱动程序和容器工具包是作为 EKS 优化版加速 AMI 的一部分安装,因此必须在 Helm 值配置中将这些对象设置为 false

  1. 使用以下配置创建名为 gpu-operator-values.yaml 的 Helm 值文件。

    devicePlugin: enabled: true nfd: enabled: true gfd: enabled: true driver: enabled: false toolkit: enabled: false migManager: enabled: false
  2. 使用在上一步中创建 gpu-operator-values.yaml 文件为集群安装 NVIDIA GPU 操作器。

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia helm repo update
    helm install gpu-operator nvidia/gpu-operator \ --namespace gpu-operator \ --create-namespace \ --version v25.3.4 \ --values gpu-operator-values.yaml

安装 NVIDIA DRA 驱动程序

自 NVIDIA GPU 操作器版本 v25.3.4 起,必须单独安装 NVIDIA DRA 驱动程序。建议持续关注 NVIDIA GPU 操作器发行说明,因为此内容在未来的版本中可能会发生变更。

  1. 使用以下配置创建名为 dra-values.yaml 的 Helm 值文件。请注意 nodeAffinitytolerations 会将 DRA 驱动程序配置为仅在搭载 NVIDIA GPU 的节点上部署。

    resources: gpus: enabled: false # set to false to disable experimental gpu support computeDomains: enabled: true controller: nodeSelector: null affinity: null tolerations: [] kubeletPlugin: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "nvidia.com/gpu.present" operator: In values: - "true" tolerations: - key: "nvidia.com/gpu" operator: Exists effect: NoSchedule
  2. 使用在上一步中创建的 dra-values.yaml 文件为集群安装 NVIDIA DRA 驱动程序。

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia helm repo update
    helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --version="25.8.0" \ --namespace nvidia-dra-driver-gpu \ --create-namespace \ -f dra-values.yaml
  3. 安装后,DRA 驱动程序会创建 DeviceClass 资源,使 Kubernetes 能够了解和分配 ComputeDomain 资源,并使 P6e-GB200 UltraServer 上的分布式 GPU 工作负载可以进行 IMEX 管理。

    使用以下命令确认 DRA 资源是否可用。

    kubectl api-resources | grep resource.k8s.io
    deviceclasses resource.k8s.io/v1 false DeviceClass resourceclaims resource.k8s.io/v1 true ResourceClaim resourceclaimtemplates resource.k8s.io/v1 true ResourceClaimTemplate resourceslices resource.k8s.io/v1 false ResourceSlice
    kubectl get deviceclasses
    NAME compute-domain-daemon.nvidia.com compute-domain-default-channel.nvidia.com

安装 EFA 设备插件

要在 UltraServer 之间使用 EFA 通信,必须安装适用于 EFA 的 Kubernetes 设备插件。P6e-GB200 实例最多可以配置 17 张网卡,并且主 NCI(索引 0)必须是类型 interface 且支持高达 100 Gbps 的 ENA 带宽。在节点预调配期间,根据您的要求配置 EFA 和 ENA 接口。查看 P6e-GB200 实例的 EFA 配置 Amazon 文档,了解有关 EFA 配置的更多详细信息。

  1. 使用以下配置创建名为 efa-values.yaml 的 Helm 值文件。

    tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule
  2. 使用在上一步中创建的 dra-values.yaml 文件为集群安装 NVIDIA DRA 操作器。

    helm repo add eks https://aws.github.io/eks-charts helm repo update
    helm install efa eks/aws-efa-k8s-device-plugin -n kube-system \ --version="0.5.14" \ -f efa-values.yaml

    例如,如果您在每个 NCI 组中为实例配置了 1 个仅限 EFA 的接口,则在描述节点时,预计每个节点会有 4 个可分配的 EFA 设备。

    kubectl describe node/<gb200-node-name>
    Capacity: ... vpc.amazonaws.com/efa: 4 Allocatable: ... vpc.amazonaws.com/efa: 4

要进行多节点 NVLINK NCCL 测试和其他微基准测试,请查看 awesome-distributed-training GitHub 存储库。以下步骤说明如何使用 nvbandwidth 运行多节点 NVLink 测试。

  1. 要在 NVL72 域中的两个节点上运行多节点带宽测试,请先安装 MPI Operator:

    kubectl create -f https://github.com/kubeflow/mpi-operator/releases/download/v0.7.0/mpi-operator.yaml
  2. 创建一个名为nvbandwidth-test-job.yaml 的 Helm 值文件,用于定义测试清单。请注意在具有多节点 NVLink 可访问性的同一 NVLink 域中调度 Worker 的 nvidia.com/gpu.clique 容器组(pod)亲和性。

    自 NVIDIA DRA 驱动程序版本 v25.8.0 起,ComputeDomains 具有弹性,且 .spec.numNodes 可在 ComputeDomain 定义中设置为 0。查看最新的 NVIDIA DRA 驱动程序发行说明以获取更新。

    --- apiVersion: resource.nvidia.com/v1beta1 kind: ComputeDomain metadata: name: nvbandwidth-test-compute-domain spec: numNodes: 0 # This can be set to 0 from NVIDIA DRA Driver version v25.8.0+ channel: resourceClaimTemplate: name: nvbandwidth-test-compute-domain-channel --- apiVersion: kubeflow.org/v2beta1 kind: MPIJob metadata: name: nvbandwidth-test spec: slotsPerWorker: 4 # 4 GPUs per worker node launcherCreationPolicy: WaitForWorkersReady runPolicy: cleanPodPolicy: Running sshAuthMountPath: /home/mpiuser/.ssh mpiReplicaSpecs: Launcher: replicas: 1 template: metadata: labels: nvbandwidth-test-replica: mpi-launcher spec: containers: - image: ghcr.io/nvidia/k8s-samples:nvbandwidth-v0.7-8d103163 name: mpi-launcher securityContext: runAsUser: 1000 command: - mpirun args: - --bind-to - core - --map-by - ppr:4:node - -np - "8" - --report-bindings - -q - nvbandwidth - -t - multinode_device_to_device_memcpy_read_ce Worker: replicas: 2 # 2 worker nodes template: metadata: labels: nvbandwidth-test-replica: mpi-worker spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: nvbandwidth-test-replica operator: In values: - mpi-worker topologyKey: nvidia.com/gpu.clique containers: - image: ghcr.io/nvidia/k8s-samples:nvbandwidth-v0.7-8d103163 name: mpi-worker securityContext: runAsUser: 1000 env: command: - /usr/sbin/sshd args: - -De - -f - /home/mpiuser/.sshd_config resources: limits: nvidia.com/gpu: 4 # Request 4 GPUs per worker claims: - name: compute-domain-channel # Link to IMEX channel resourceClaims: - name: compute-domain-channel resourceClaimTemplateName: nvbandwidth-test-compute-domain-channel
  3. 创建 ComputeDomain,然后使用以下命令启动作业。

    kubectl apply -f nvbandwidth-test-job.yaml
  4. 创建 ComputeDomain 时,可以看到工作负载的 ComputeDomain 有两个节点:

    kubectl get computedomains.resource.nvidia.com -o yaml
    status: nodes: - cliqueID: <ClusterUUID>.<Clique ID> ipAddress: <node-ip> name: <node-hostname> - cliqueID: <ClusterUUID>.<Clique ID> ipAddress: <node-ip> name: <node-hostname> status: Ready
  5. 使用以下命令查看作业结果。

    kubectl logs --tail=-1 -l job-name=nvbandwidth-test-launcher
  6. 测试完成后,使用以下命令将其删除。

    kubectl delete -f nvbandwidth-test-job.yaml