帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 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 操作器
| 堆栈 | 组件 |
|---|---|
|
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。
-
使用以下配置创建名为
gpu-operator-values.yaml的 Helm 值文件。devicePlugin: enabled: true nfd: enabled: true gfd: enabled: true driver: enabled: false toolkit: enabled: false migManager: enabled: false -
使用在上一步中创建
gpu-operator-values.yaml文件为集群安装 NVIDIA GPU 操作器。helm repo add nvidia https://helm.ngc.nvidia.com/nvidia helm repo updatehelm 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 操作器发行说明
-
使用以下配置创建名为
dra-values.yaml的 Helm 值文件。请注意nodeAffinity和tolerations会将 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 -
使用在上一步中创建的
dra-values.yaml文件为集群安装 NVIDIA DRA 驱动程序。helm repo add nvidia https://helm.ngc.nvidia.com/nvidia helm repo updatehelm 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 -
安装后,DRA 驱动程序会创建
DeviceClass资源,使 Kubernetes 能够了解和分配ComputeDomain资源,并使 P6e-GB200 UltraServer 上的分布式 GPU 工作负载可以进行 IMEX 管理。使用以下命令确认 DRA 资源是否可用。
kubectl api-resources | grep resource.k8s.iodeviceclasses 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 ResourceSlicekubectl get deviceclassesNAME 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 配置的更多详细信息。
-
使用以下配置创建名为
efa-values.yaml的 Helm 值文件。tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule -
使用在上一步中创建的
dra-values.yaml文件为集群安装 NVIDIA DRA 操作器。helm repo add eks https://aws.github.io/eks-charts helm repo updatehelm 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 验证 IMEX
要进行多节点 NVLINK NCCL 测试和其他微基准测试,请查看 awesome-distributed-training
-
要在 NVL72 域中的两个节点上运行多节点带宽测试,请先安装 MPI Operator:
kubectl create -f https://github.com/kubeflow/mpi-operator/releases/download/v0.7.0/mpi-operator.yaml -
创建一个名为
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 -
创建 ComputeDomain,然后使用以下命令启动作业。
kubectl apply -f nvbandwidth-test-job.yaml -
创建 ComputeDomain 时,可以看到工作负载的 ComputeDomain 有两个节点:
kubectl get computedomains.resource.nvidia.com -o yamlstatus: nodes: - cliqueID: <ClusterUUID>.<Clique ID> ipAddress: <node-ip> name: <node-hostname> - cliqueID: <ClusterUUID>.<Clique ID> ipAddress: <node-ip> name: <node-hostname> status: Ready -
使用以下命令查看作业结果。
kubectl logs --tail=-1 -l job-name=nvbandwidth-test-launcher -
测试完成后,使用以下命令将其删除。
kubectl delete -f nvbandwidth-test-job.yaml