Amazon EKS で P6e-GB200 UltraServer を使用する - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

Amazon EKS で P6e-GB200 UltraServer を使用する

このトピックでは、P6e-GB200 UltraServer で Amazon EKS を設定して使用する方法について説明します。4 基の NVIDIA Blackwell GPU を搭載した p6e-gb200.36xlarge インスタンスタイプは、P6e-GB200 UltraServer としてのみ使用できます。P6e-GB200 UltraServer には 2 つのタイプがあります。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 バージョンリリースでは、EKS および AL2023 EKS 最適化高速 AMI でデフォルトで有効になっている動的リソース割り当て (DRA) がサポートされています。DRA は、P6e-GB200 UltraServer を EKS で使用するための要件です。DRA は Karpenter または EKS Auto Mode ではサポートされていません。EKS で P6e-GB200 UltraServer を使用する場合は、EKS セルフマネージド型ノードグループまたは EKS マネージド型ノードグループを使用することをお勧めします。

  • P6e-GB200 UltraServer は、EC2 Capacity Blocks for ML を通じて利用できます。キャパシティブロックを使用して EKS ノードを起動する方法については、「Amazon EKS で AI/ML ワークロードのコンピューティングリソースを管理する」を参照してください。

  • キャパシティブロックを使用して EKS マネージド型ノードグループを使用する場合は、カスタム起動テンプレートを使用する必要があります。P6e-GB200 UltraServer で EKS マネージド型ノードグループをアップグレードする場合は、アップグレードする前にノードグループの希望するサイズを 0 に設定する必要があります。

  • EKS 最適化高速 AMI の AL2023 ARM NVIDIA バリアントを使用することをお勧めします。この AMI には、P6e-GB200 UltraServer を操作するために必要なノードコンポーネントと設定が含まれています。独自の AMI を構築する場合は、ドライバーを含むノードとシステムソフトウェアの互換性をインストールして検証する責任があります。詳細については、「GPU インスタンス向けに EKS 最適化高速 AMI を使用する」を参照してください。

  • NVIDIA ドライバーバージョン 580 を含む EKS 最適化 AMI リリース v20251103 以降を使用することをお勧めします。この NVIDIA ドライバーバージョンでは、潜在的なメモリの過剰レポートに対処するために、コヒーレントなドライバーベースのメモリ管理 (CDMM) が有効になります。CDMM が有効になっている場合、NVIDIA マルチインスタンス GPU (MIG) と vGPU の機能はサポートされていません。CDMM の詳細については、「NVIDIA Coherent Driver-based Memory Management (CDMM)」を参照してください。

  • EKS 最適化 AL2023 NVIDIA AMI で NVIDIA GPU Operator を使用する場合は、ドライバーとツールキットのオペレータインストールを無効にする必要があります。これらは既に AMI に含まれているためです。EKS 最適化 AL2023 NVIDIA AMI には、NVIDIA Kubernetes デバイスプラグインまたは NVIDIA DRA ドライバーが含まれていないため、これらは個別にインストールする必要があります。

  • p6e-gb200.36xlarge インスタンスは、最大 17 枚のネットワークカードで構成でき、UltraServer 間の通信に EFA を活用できます。ワークロードのネットワークトラフィックは UltraServer をまたぐことができますが、最高のパフォーマンスを得るには、UltraServer 内の GPU 通信に IMEX を活用し、同じ UltraServer にワークロードをスケジュールすることをお勧めします。詳細については、「P6e-GB200 インスタンスの EFA 設定」を参照してください。

  • p6e-gb200.36xlarge インスタンスには、7.5 TB のインスタンスストアストレージが 3 つあります。デフォルトでは、EKS 最適化 AMI はインスタンスストアをフォーマットおよびマウントしません。ノードのエフェメラルストレージは、エフェメラルストレージをリクエストするポッドと、ノードにダウンロードされるコンテナイメージとの間で共有できます。AL2023 EKS 最適化 AMI を使用している場合は、NodeConfig のインスタンスローカルストレージポリシーを RAID0 に設定することで、ユーザーデータのノードブートストラップの一部として設定できます。RAID0 に設定すると、インスタンスストアがストライプ化され、コンテナランタイムおよび kubelet がこのエフェメラルストレージを使用するように設定されます。

コンポーネント

P6e-GB200 UltraServer を使用して EKS でワークロードを実行するには、次のコンポーネントをお勧めします。オプションで、NVIDIA GPU Operator を使用して NVIDIA ノードコンポーネントをインストールできます。EKS 最適化 AL2023 NVIDIA AMI で NVIDIA GPU Operator を使用する場合は、ドライバーとツールキットのオペレータインストールを無効にする必要があります。これらは既に AMI に含まれているためです。

スタック コンポーネント

EKS 最適化高速 AMI

カーネル 6.12

NVIDIA GPU ドライバー

NVIDIA CUDA ユーザーモードドライバー

NVIDIA Container Toolkit

NVIDIA ファブリックマネージャー

NVIDIA IMEX ドライバー

NVIDIA NVLink サブネットマネージャー

EFA driver

ノードで実行されているコンポーネント

VPC CNI

EFA デバイスプラグイン

NVIDIA K8s デバイスプラグイン

NVIDIA DRA ドライバー

NVIDIA Node Feature Discovery (NFD)

NVIDIA GPU Feature Discovery (GFD)

上記の表のノードコンポーネントは、次の機能を実行します。

  • VPC CNI: EKS で実行されているポッドのプライマリネットワークインターフェイスとして VPC IP を割り当てます

  • EFA デバイスプラグイン: EKS で実行されているポッドのセカンダリネットワークとして EFA デバイスを割り当てます。P6e-GB200 UltraServer 間のネットワークトラフィックを担当します。マルチノードワークロードの場合、UltraServe 内の GPU 間通信はマルチノード NVLink を介して行われます。

  • NVIDIA Kubernetes デバイスプラグイン: EKS で実行されているポッドのデバイスとして GPU を割り当てます。NVIDIA DRA ドライバー の GPU 割り当て機能が実験段階を終えるまで、NVIDIA Kubernetes デバイスプラグインを使用することをお勧めします。最新情報については、NVIDIA DRA ドライバーのリリースを参照してください。

  • NVIDIA DRA ドライバー: P6e-GB200 UltraServer で実行されているワークロードに従う IMEX ドメインの作成を容易にする ComputeDomain カスタムリソースを有効にします。

    • ComputeDomain リソースは、Internode Memory Exchange (IMEX) ドメインを記述します。ComputeDomain の ResourceClaim を持つワークロードがクラスターにデプロイされると、NVIDIA DRA ドライバーは、一致するノードで実行される IMEX DaemonSet を自動的に作成し、ワークロードが開始される前にノード間で IMEX チャネル (複数可) を確立します。IMEX の詳細については、「マルチノード NVLink システム向け NVIDIA IMEX の概要」を参照してください。

    • NVIDIA DRA ドライバーは、ネットワークトポロジと NVLink ドメインに関する情報を伝達する NVIDIA GFD によって適用される clique ID ラベル (nvidia.com/gpu.clique) を使用します。

    • ワークロードジョブごとに ComputeDomain を作成するのがベストプラクティスです。

  • NVIDIA Node Feature Discovery (NFD): 検出されたノードレベルの属性に基づいて GFD がノードラベルを適用するために必要な依存関係。

  • NVIDIA GPU Feature Discovery (GFD): nvidia.com/gpu.clique という NVIDIA 標準のトポロジーラベルをノードに適用します。同じ nvidia.com/gpu.clique 内のノードにはマルチノードの NVLink 到達可能性があり、アプリケーションのポッドアフィニティを使用して、ポッドを同じ NVlink ドメインにスケジュールできます。

手順

次のセクションでは、Kubernetes バージョン 1.33 以降を実行している EKS クラスターと、AL2023 ARM NVIDIA EKS 最適化高速 AMI を実行している P6e-GB200 UltraServer を含む 1 つ以上のノードグループがあることを前提としています。EKS セルフマネージドノードとマネージドノードグループの前提条件の手順については、「Amazon EKS で AI/ML ワークロードのコンピューティングリソースを管理する」にあるリンクを参照してください。

次の手順では、以下のコンポーネントを使用します。

名前 バージョン 説明

NVIDIA GPU Operator

25.3.4 以降

NVIDIA Kubernetes デバイスプラグインや NFD/GFD などの必要なプラグインのライフサイクル管理用。

NVIDIA DRA ドライバー

25.8.0 以降

ComputeDomain CRD と IMEX ドメイン管理用。

EFA デバイスプラグイン

0.5.14 以降

UltraServer 間通信用。

NVIDIA GPU Operator をインストールする

NVIDIA GPU Operator は、Kubernetes クラスターで GPU を使用するために必要なコンポーネントの管理を簡素化します。NVIDIA GPU ドライバーとContainer Toolkit は、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 Operator をインストールします。

    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 Operator バージョン v25.3.4 以降では、NVIDIA DRA ドライバーを個別にインストールする必要があります。今後のリリースで変更される可能性があるため、NVIDIA GPU Operator のリリースノートを追跡することをお勧めします。

  1. 以下の設定を使用して、dra-values.yaml という名前の Helm 値ファイルを作成します。NVIDIA GPU を搭載したノードにのみデプロイするように DRA ドライバーを設定する nodeAffinitytolerations に注意してください。

    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 ドライバーは Kubernetes が ComputeDomain リソースを理解して割り当てられるようにする DeviceClass リソースを作成し、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 インターフェイスを設定します。EFA 設定の詳細については、「P6e-GB200 インスタンスの EFA 設定」に関する AWS ドキュメントを参照してください。

  1. 以下の設定を使用して、efa-values.yaml という名前の Helm 値ファイルを作成します。

    tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule
  2. 前のステップで作成した dra-values.yaml ファイルを使用して、クラスターに NVIDIA DRA Operator をインストールします。

    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 ドメイン内の 2 つのノードにまたがるマルチノード帯域幅テストを実行するには、まず 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 ドメインにワーカーをスケジュールするための nvidia.com/gpu.clique ポッドアフィニティに注意してください。

    NVIDIA DRA ドライバーバージョン v25.8.0 以降では、ComputeDomains は伸縮自在であり、ComputeDomain 定義で .spec.numNodes0 に設定できます。更新については、最新の 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 に 2 つのノードがあることを確認できます。

    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