

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 搭配 Amazon EKS 使用 P6e-GB200 UltraServers
<a name="ml-eks-nvidia-ultraserver"></a>

本主題說明如何設定和使用 Amazon EKS 搭配 P6e-GB200 UltraServers。具有 4 個 NVIDIA Blackwell GPUs 的`p6e-gb200.36xlarge`執行個體類型僅提供 P6e-GB200 UltraServers。P6e-GB200 UltraServers 有兩種類型。`u-p6e-gb200x36` UltraServer 有 9 個`p6e-gb200.36xlarge`執行個體，`u-p6e-gb200x72`UltraServer 有 18 個`p6e-gb200.36xlarge`執行個體。

若要進一步了解，請參閱 [Amazon EC2 P6e-GB200 UltraServers 網頁](https://aws.amazon.com/ec2/instance-types/p6/)。

## 考量事項
<a name="nvidia-ultraserver-considerations"></a>
+ Amazon EKS 支援 P6e-GB200 UltraServers for Kubernetes 1.33 版及更新版本。此 Kubernetes 版本支援[動態資源配置 ](https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/)(DRA)，預設為在 EKS 和 [AL2023 EKS 最佳化加速 AMIs ](https://docs.aws.amazon.com/eks/latest/userguide/ml-eks-optimized-ami.html)中啟用。DRA 是搭配 EKS 使用 P6e-GB200 UltraServers 的要求。Karpenter 或 EKS Auto Mode 不支援 DRA，建議在搭配 EKS 使用 P6e-GB200 UltraServers 時使用 EKS 自我管理節點群組或 EKS 受管節點群組。
+ P6e-GB200 UltraServers 可透過適用於 [ML 的 EC2 容量區塊](https://aws.amazon.com/ec2/capacityblocks/)提供。[管理 Amazon EKS 上 AI/ML 工作負載的運算資源](ml-compute-management.md) 如需如何使用容量區塊啟動 EKS 節點的資訊，請參閱 。
+ 搭配容量區塊使用 EKS 受管節點群組時，您必須使用自訂啟動範本。使用 P6e-GB200 UltraServers 升級 EKS 受管節點群組時，您必須先將節點群組的所需大小設定為 ，`0`才能升級。
+ 建議使用 EKS 最佳化加速 AMIs 的 AL2023 ARM NVIDIA 變體。此 AMI 包含使用 P6e-GB200 UltraServers 所需的節點元件和組態。如果您決定建置自己的 AMI，您必須負責安裝和驗證節點和系統軟體的相容性，包括驅動程式。如需詳細資訊，請參閱[針對 GPU 執行個體使用 EKS 最佳化AMIs](ml-eks-optimized-ami.md)。
+ 建議使用 EKS 最佳化 AMI 版本 `v20251103` 或更新版本，其中包括 NVIDIA 驅動程式 580 版。此 NVIDIA 驅動程式版本可讓 Coherent 驅動程式型記憶體 (CDMM) 處理潛在的記憶體過度報告。啟用 CDMM 時，不支援下列功能：NVIDIA Multi-Instance GPU (MIG) 和 vGPU。如需 CDMM 的詳細資訊，請參閱 [NVIDIA Coherent 驅動程式型記憶體管理 (CDMM)](https://nvdam.widen.net/s/gpqp6wmz7s/cuda-whitepaper—​cdmm-pdf)。
+ 搭配 [EKS 最佳化 AL2023 NVIDIA AMI 使用 NVIDIA GPU 運算](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/overview.html)子時，您必須停用驅動程式和工具組的運算子安裝，因為這些都已包含在 AMI 中。 AL2023 EKS 最佳化 AL2023 NVIDIA AMIs 不包含 NVIDIA Kubernetes 裝置外掛程式或 NVIDIA DRA 驅動程式，且必須單獨安裝。
+ 每個`p6e-gb200.36xlarge`執行個體最多可以設定 17 個網路卡，並可以利用 EFA 在 UltraServers 之間進行通訊。工作負載網路流量可以跨 UltraServers，但為了取得最高效能，建議您在利用 IMEX 進行 UltraServer GPU 內通訊的相同 UltraServer 中排程工作負載。 UltraServer 如需詳細資訊，請參閱 [ P6e-GB200 執行個體的 EFA 組態](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-acc-inst-types.html#efa-for-p6e)。
+ 每個`p6e-gb200.36xlarge`執行個體都有 3x 7.5TB [執行個體存放區儲存空間](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html)。根據預設，EKS 最佳化 AMI 不會格式化和掛載執行個體存放區。節點的暫時性儲存可以在請求暫時性儲存的 Pod 和下載到節點的容器映像之間共用。如果使用 AL2023 EKS 最佳化 AMI，您可以透過將 [NodeConfig](https://docs.aws.amazon.com/eks/latest/eksctl/node-bootstrapping.html#configuring-the-bootstrapping-process) 中的執行個體本機儲存政策設定為 RAID0，將其設定為使用者資料中節點引導的一部分。將 設定為 RAID0 會分割執行個體存放區，並設定容器執行時間和 kubelet，以利用此暫時性儲存。

## 元件
<a name="nvidia-ultraserver-components"></a>

建議使用 P6e-GB200 UltraServers 在 EKS 上執行工作負載時，建議使用下列元件。您可以選擇性地使用 [NVIDIA GPU 運算子](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/overview.html)來安裝 NVIDIA 節點元件。搭配 EKS 最佳化 AL2023 NVIDIA AMI 使用 NVIDIA GPU 運算子時，您必須停用驅動程式和工具組的運算子安裝，因為這些都已包含在 AMI 中。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/eks/latest/userguide/ml-eks-nvidia-ultraserver.html)

上表中的節點元件會執行下列函數：
+  **VPC CNI**：將 VPC IPs 配置為在 EKS 上執行之 Pod 的主要網路介面
+  **EFA 裝置外掛程式**：將 EFA 裝置配置為在 EKS 上執行之 Pod 的次要網路。負責跨 P6e-GB200 UltraServers 的網路流量。對於多節點工作負載，UltraServer GPU-to-GPU 可以流經多節點 NVLink。
+  **NVIDIA Kubernetes 裝置外掛程式**：將 GPUs 配置為在 EKS 上執行之 Pod 的裝置。建議使用 NVIDIA Kubernetes 裝置外掛程式，直到 NVIDIA DRA 驅動程式 GPU 配置功能從實驗畢業。如需更新的資訊，請參閱 [NVIDIA DRA 驅動程式版本](https://github.com/NVIDIA/k8s-dra-driver-gpu/releases)。
+  **NVIDIA DRA 驅動程式**：啟用 ComputeDomain 自訂資源，以促進在 P6e-GB200 UltraServers 上執行工作負載之後建立 IMEX 網域。
  + ComputeDomain 資源描述了 Internode Memory Exchange (IMEX) 網域。當具有 ComputeDomain ResourceClaim 的工作負載部署到叢集時，NVIDIA DRA 驅動程式會自動建立在相符節點上執行的 IMEX DaemonSet，並在工作負載啟動之前在節點之間建立 IMEX 通道 (IMEX)。若要進一步了解 IMEX，請參閱[適用於多節點 NVLink 系統的 NVIDIA IMEX 概觀](https://docs.nvidia.com/multi-node-nvlink-systems/imex-guide/overview.html)。
  + NVIDIA DRA 驅動程式使用 NVIDIA GFD 套用的 clique ID 標籤 (`nvidia.com/gpu.clique`)，可轉送網路拓撲和 NVLink 網域的知識。
  + 最佳實務是為每個工作負載任務建立 ComputeDomain。
+  **NVIDIA 節點功能探索 (NFD)**：GFD 根據探索到的節點層級屬性套用節點標籤所需的相依性。
+  **NVIDIA GPU 功能探索 (GFD)**：將稱為 的 NVIDIA `nvidia.com/gpu.clique` 標準拓撲標籤套用至節點。相同 內的節點`nvidia.com/gpu.clique`具有多節點 NVLink 連線能力，您可以在應用程式中使用 Pod 親和性，將 Pod 排程至相同的 NVlink 網域。

## 程序
<a name="nvidia-ultraserver-procedure"></a>

下一節假設您有一個執行 Kubernetes 1.33 版或更新版本的 EKS 叢集，其中包含一或多個執行 AL2023 ARM NVIDIA EKS 最佳化加速 AMI 的 P6e-GB200 UltraServers 節點群組。如需 EKS 自我管理節點和受管節點群組的先決條件步驟[管理 Amazon EKS 上 AI/ML 工作負載的運算資源](ml-compute-management.md)，請參閱 中的連結。

下列程序使用下列元件。


| 名稱 | 版本 | Description | 
| --- | --- | --- | 
|  NVIDIA GPU Operator  |  25.3.4\$1  |  用於必要外掛程式的生命週期管理，例如 NVIDIA Kubernetes 裝置外掛程式和 NFD/GFD。  | 
|  NVIDIA DRA 驅動程式  |  25.8.0\$1  |  對於 ComputeDomain CRDs和 IMEX 網域管理。  | 
|  EFA 裝置外掛程式  |  0.5.14\$1  |  用於跨 UltraServer 通訊。  | 

## 安裝 NVIDIA GPU 運算子
<a name="nvidia-ultraserver-gpu-operator"></a>

NVIDIA GPU 運算子可簡化在 Kubernetes 叢集中使用 GPUs 所需的元件管理。由於 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
   ```

1. 使用您在上一個步驟中建立`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 驅動程式
<a name="nvidia-ultraserver-dra-driver"></a>

從 NVIDIA GPU 運算子版本 開始`v25.3.4`，必須單獨安裝 NVIDIA DRA 驅動程式。建議追蹤 NVIDIA GPU 運算子[版本備註](https://github.com/NVIDIA/gpu-operator/releases)，因為這可能會在未來版本中變更。

1. 使用下列組態建立名為 `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
   ```

1. 使用您在上一個步驟中建立`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
   ```

1. 安裝後，DRA 驅動程式會建立`DeviceClass`資源，讓 Kubernetes 能夠了解和配置`ComputeDomain`資源，讓 P6e-GB200 UltraServers 上的分散式 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 裝置外掛程式
<a name="nvidia-ultraserver-efa-plugin"></a>

若要在 UltraServers 之間使用 EFA 通訊，您必須安裝適用於 EFA 的 Kubernetes 裝置外掛程式。P6e-GB200 執行個體最多可設定 [17 個網路卡](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-acc-inst-types.html#efa-for-p6e)，主要 NIC （索引 0) 必須為 類型，`interface`並支援高達 100 Gbps 的 ENA 頻寬。在節點佈建期間，根據您的需求設定 EFA 和 ENA 介面。如需 [EFA 組態的詳細資訊，請參閱 P6e-GB200 執行個體 AWS 文件的](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-acc-inst-types.html#efa-for-p6e) EFA 組態。

1. 使用下列組態建立名為 `efa-values.yaml`的 Helm 值檔案。

   ```
   tolerations:
     - key: nvidia.com/gpu
       operator: Exists
       effect: NoSchedule
   ```

1. 使用您在上一個步驟中建立`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
   ```

   例如，如果您在描述節點時，將執行個體設定為在每個 [NIC 群組](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-acc-inst-types.html#efa-for-p6e)中使用 1 個僅限 efa 的界面，則預期每個節點會看到 4 個可配置的 EFA 裝置。

   ```
   kubectl describe node/<gb200-node-name>
   ```

   ```
   Capacity:
     ...
     vpc.amazonaws.com/efa:  4
   Allocatable:
     ...
     vpc.amazonaws.com/efa:  4
   ```

## 透過多節點 NVLink 驗證 IMEX
<a name="nvidia-ultraserver-imex-nvlink"></a>

對於多節點 NVLINK NCCL 測試和其他微型基準，請檢閱 [awesome-distributed-training](https://github.com/aws-samples/awsome-distributed-training/tree/main/micro-benchmarks/nccl-tests) GitHub 儲存庫。下列步驟說明如何使用 nvbandwidth 執行多節點 NVLink 測試。

1. 若要跨 NVL72 網域中的兩個節點執行多節點頻寬測試，請先安裝 MPI 運算子：

   ```
   kubectl create -f https://github.com/kubeflow/mpi-operator/releases/download/v0.7.0/mpi-operator.yaml
   ```

1. 建立名為 的 Helm 值檔案`nvbandwidth-test-job.yaml`，以定義測試資訊清單。請注意`nvidia.com/gpu.clique`，在具有多節點 NVLink 連線能力的相同 NVLink 網域中排程工作者的 Pod 親和性。以下範例使用 cuMemcpyAsync 執行多節點device-to-device CE 讀取 memcpy 測試，並在日誌中列印結果。

   從 NVIDIA DRA 驅動程式版本 `v25.8.0` ComputeDomains 開始是彈性的，`.spec.numNodes`可以在 ComputeDomain 定義`0`中設定為 。檢閱最新的 [NVIDIA DRA 驅動程式版本備註](https://github.com/NVIDIA/k8s-dra-driver-gpu)以取得更新。

   ```
   ---
   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:
             affinity:
               nodeAffinity:
                 requiredDuringSchedulingIgnoredDuringExecution:
                   nodeSelectorTerms:
                   - matchExpressions:
                     # Only schedule on NVIDIA GB200/GB300 nodes
                     - key: node.kubernetes.io/instance-type
                       operator: In
                       values:
                       - p6e-gb200.36xlarge
                       - p6e-gb300.36xlarge
             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:
               nodeAffinity:
                 requiredDuringSchedulingIgnoredDuringExecution:
                   nodeSelectorTerms:
                   - matchExpressions:
                     # Only schedule on NVIDIA GB200/GB300 nodes
                     - key: node.kubernetes.io/instance-type
                       operator: In
                       values:
                       - p6e-gb200.36xlarge
                       - p6e-gb300.36xlarge
               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
   ```

1. 建立 ComputeDomain 並使用下列命令啟動任務。

   ```
   kubectl apply -f nvbandwidth-test-job.yaml
   ```

1. 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
   ```

1. 使用下列命令檢閱任務的結果。

   ```
   kubectl logs --tail=-1 -l job-name=nvbandwidth-test-launcher
   ```

   成功的測試會以 GB/s 為單位顯示多節點 memcpy 測試的頻寬統計資料。成功測試輸出的範例如下所示。

   ```
   ...
   nvbandwidth Version: ...
   Built from Git version: ...
   
   MPI version: ...
   CUDA Runtime Version: ...
   CUDA Driver Version: ...
   Driver Version: ...
   
   Process 0 (nvbandwidth-test-worker-0): device 0: NVIDIA GB200 (...)
   Process 1 (nvbandwidth-test-worker-0): device 1: NVIDIA GB200 (...)
   Process 2 (nvbandwidth-test-worker-0): device 2: NVIDIA GB200 (...)
   Process 3 (nvbandwidth-test-worker-0): device 3: NVIDIA GB200 (...)
   Process 4 (nvbandwidth-test-worker-1): device 0: NVIDIA GB200 (...)
   Process 5 (nvbandwidth-test-worker-1): device 1: NVIDIA GB200 (...)
   Process 6 (nvbandwidth-test-worker-1): device 2: NVIDIA GB200 (...)
   Process 7 (nvbandwidth-test-worker-1): device 3: NVIDIA GB200 (...)
   
   Running multinode_device_to_device_memcpy_read_ce.
   memcpy CE GPU(row) -> GPU(column) bandwidth (GB/s)
              0         1         2         3         4         5         6         7
    0       N/A    821.45    822.18    821.73    822.05    821.38    822.61    821.89
    1    822.34       N/A    821.67    822.12    821.94    820.87    821.53    822.08
    2    821.76    822.29       N/A    821.58    822.43    821.15    821.82    822.31
    3    822.19    821.84    822.05       N/A    821.67    821.23    820.95    822.47
    4    821.63    822.38    821.49    822.17       N/A    821.06    821.78    822.22
    5    822.08    821.52    821.89    822.35    821.27       N/A    821.64    822.13
    6    821.94    822.15    821.68    822.04    821.39    820.92       N/A    822.56
    7    822.27    821.73    822.11    821.86    822.38    821.04    821.49       N/A
   
   SUM multinode_device_to_device_memcpy_read_ce ...
   
   NOTE: The reported results may not reflect the full capabilities of the platform.
   Performance can vary with software drivers, hardware clocks, and system topology.
   ```

1. 測試完成時，請使用下列命令將其刪除。

   ```
   kubectl delete -f nvbandwidth-test-job.yaml
   ```