P6e-GB200 UltraServers를 Amazon EKS와 함께 사용하기
P6e-GB200 UltraServers를 Amazon EKS와 함께 사용하기
이 주제는 Amazon EKS를 P6e-GB200 UltraServers와 함께 구성하고 사용하는 방법을 설명합니다. 4개의 NVIDIA Blackwell GPU가 있는 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 웹페이지를 참고하세요.
고려 사항 (Considerations)
Amazon EKS는 Kubernetes 1.33 이상 버전에서 P6e-GB200 UltraServers를 지원합니다. 이 Kubernetes 버전 릴리스는 EKS와 AL2023 EKS 최적화 가속 AMI에서 기본 활성화되는 Dynamic Resource Allocation (DRA)을 지원해요. DRA는 EKS에서 P6e-GB200 UltraServers를 사용하기 위한 요구 사항입니다. DRA는 Karpenter 정적 용량 프로비저닝, EKS 관리형 노드 그룹, 자체 관리 노드에서 지원되지만 EKS Auto Mode나 Karpenter 동적 용량 프로비저닝에서는 지원되지 않습니다.
P6e-GB200 UltraServers는 EC2 Capacity Blocks for ML을 통해 제공됩니다. Capacity Blocks로 EKS 노드를 시작하는 방법은 Manage accelerated compute for AI/ML workloads on Amazon EKS를 참고하세요.
Capacity Blocks와 함께 EKS 관리형 노드 그룹을 사용할 때는 사용자 정의 런치 템플릿을 사용해야 해요. P6e-GB200 UltraServers로 EKS 관리형 노드 그룹을 업그레이드할 때는 업그레이드 전에 노드 그룹의 원하는 크기를 0으로 설정해야 합니다.
EKS 최적화 가속 AMI의 AL2023 ARM NVIDIA 변형을 사용하는 것이 좋아요. 이 AMI는 P6e-GB200 UltraServers와 함께 작동하는 데 필요한 노드 구성 요소와 구성을 포함합니다. 자체 AMI를 빌드하기로 결정했다면 드라이버를 포함한 노드·시스템 소프트웨어의 호환성을 설치하고 검증할 책임이 있어요. 자세한 내용은 Use EKS-optimized accelerated AMIs for GPU instances를 참고하세요.
NVIDIA 드라이버 버전 580이 포함된 EKS 최적화 AMI 릴리스 v20251103 이상을 사용하는 것이 좋습니다. 이 NVIDIA 드라이버 버전은 잠재적인 메모리 과대 보고를 해결하기 위해 Coherent Driver-Based Memory (CDMM)를 가능하게 해요. CDMM이 활성화되면 다음 기능은 지원되지 않습니다. NVIDIA Multi-Instance GPU (MIG)와 vGPU. CDMM에 대한 자세한 내용은 NVIDIA Coherent Driver-based Memory Management (CDMM)를 참고하세요.
EKS 최적화 AL2023 NVIDIA AMI와 함께 NVIDIA GPU operator를 사용할 때는 AMI에 이미 포함되어 있으므로 operator의 드라이버·툴킷 설치를 비활성화해야 해요. EKS 최적화 AL2023 NVIDIA AMI에는 NVIDIA Kubernetes device plugin과 NVIDIA DRA driver가 포함되어 있지 않으므로 별도로 설치해야 합니다.
각 p6e-gb200.36xlarge 인스턴스는 최대 17개의 네트워크 카드로 구성될 수 있고, UltraServers 간 통신에 EFA를 활용할 수 있어요. 워크로드 네트워크 트래픽은 UltraServers를 가로지르는 것이 가능하지만, 최고 성능을 위해 같은 UltraServer 안에서 워크로드가 IMEX를 활용해 UltraServer 내부의 GPU 간 통신을 하도록 스케줄링하는 것이 좋습니다. 자세한 내용은 EFA configuration for P6e-GB200 instances를 참고하세요.
각 p6e-gb200.36xlarge 인스턴스는 3x 7.5TB 인스턴스 스토어 저장 공간을 가져요. 기본적으로 EKS 최적화 AMI는 인스턴스 스토어를 포맷·마운트하지 않습니다. 노드의 임시 스토리지는 임시 스토리지를 요청하는 Pod와 노드로 다운로드되는 컨테이너 이미지 간에 공유될 수 있어요. AL2023 EKS 최적화 AMI를 사용한다면 NodeConfig의 인스턴스 로컬 스토리지 정책을 RAID0으로 설정해서 노드 부트스트랩(user data)의 일부로 구성할 수 있습니다. RAID0으로 설정하면 인스턴스 스토어를 스트라이핑하고 컨테이너 런타임과 kubelet이 이 임시 스토리지를 활용하도록 구성해요.
구성 요소 (Components)
P6e-GB200 UltraServers로 EKS에서 워크로드를 실행하려면 다음 구성 요소가 권장됩니다. NVIDIA GPU operator를 사용해서 NVIDIA 노드 구성 요소를 설치할 수도 있어요. EKS 최적화 AL2023 NVIDIA AMI와 함께 NVIDIA GPU operator를 사용할 때는 AMI에 이미 포함되어 있으므로 operator의 드라이버·툴킷 설치를 비활성화해야 합니다.
| 스택 | 구성 요소 |
|---|---|
| EKS 최적화 가속 AMI | Kernel 6.12 또는 6.18, NVIDIA GPU driver, NVIDIA CUDA user mode driver, NVIDIA container toolkit, NVIDIA fabric manager, NVIDIA IMEX driver, NVIDIA NVLink Subnet Manager, EFA driver |
| 노드에서 실행되는 구성 요소 | VPC CNI, EFA DRA driver 또는 EFA device plugin, NVIDIA K8s device plugin, NVIDIA DRA driver, NVIDIA Node Feature Discovery (NFD), NVIDIA GPU Feature Discovery (GFD) |
위 표의 노드 구성 요소는 다음 기능을 수행합니다.
- VPC CNI: EKS에서 실행되는 Pod의 기본 네트워크 인터페이스로 VPC IP를 할당합니다.
- EFA DRA driver 또는 EFA device plugin: EKS에서 실행되는 Pod의 보조 네트워크로 EFA 장치를 할당해요. P6e-GB200 UltraServers 간 네트워크 트래픽을 담당합니다. 다중 노드 워크로드의 경우 UltraServer 내부의 GPU 간 트래픽은 다중 노드 NVLink를 통해 흐를 수 있어요. EFA DRA driver는 Kubernetes 1.34 이상에 권장되며 토폴로지 인식 할당과 장치 공유를 제공합니다. EFA device plugin은 모든 Kubernetes 버전에서 지원돼요. 자세한 내용은 Manage EFA devices on Amazon EKS를 참고하세요.
- NVIDIA Kubernetes device plugin: EKS에서 실행되는 Pod에 GPU를 장치로 할당합니다. NVIDIA DRA driver의 GPU 할당 기능이 실험 단계를 졸업할 때까지 NVIDIA Kubernetes device plugin을 사용하는 것이 좋아요. 업데이트된 정보는 NVIDIA DRA driver releases를 참고하세요.
- NVIDIA DRA driver: P6e-GB200 UltraServers에서 실행되는 워크로드를 따르는 IMEX 도메인 생성을 용이하게 하는 ComputeDomain 사용자 정의 리소스를 활성화합니다.
ComputeDomain 리소스는 Internode Memory Exchange (IMEX) 도메인을 설명해요. ComputeDomain에 대한 ResourceClaim이 있는 워크로드가 클러스터에 배포되면, NVIDIA DRA driver는 일치하는 노드에서 실행되는 IMEX DaemonSet을 자동으로 생성하고 워크로드가 시작되기 전에 노드 간 IMEX 채널을 설정합니다. IMEX에 대해 자세히 알아보려면 multi-node NVLink 시스템용 NVIDIA IMEX 개요를 참고하세요.
NVIDIA DRA driver는 NVIDIA GFD가 적용하는 clique ID 라벨(nvidia.com/gpu.clique)을 사용해서 네트워크 토폴로지와 NVLink 도메인에 대한 지식을 전달합니다.
워크로드 작업마다 ComputeDomain을 하나 생성하는 것이 모범 사례예요.
- NVIDIA Node Feature Discovery (NFD): 발견된 노드 수준 속성을 기준으로 노드 라벨을 적용하려는 GFD의 필수 종속성입니다.
- NVIDIA GPU Feature Discovery (GFD): NVIDIA 표준 토폴로지 라벨인
nvidia.com/gpu.clique을 노드에 적용해요. 같은nvidia.com/gpu.clique안의 노드는 다중 노드 NVLink 도달 가능성을 가지며, 애플리케이션에서 Pod 선호도를 사용해서 같은 NVlink 도메인에 Pod를 스케줄링할 수 있습니다.
절차 (Procedure)
다음 섹션은 Kubernetes 1.33 이상 버전을 실행하고, AL2023 ARM NVIDIA EKS 최적화 가속 AMI를 실행하는 P6e-GB200 UltraServers가 있는 노드 그룹이 하나 이상 있는 EKS 클러스터가 있다고 가정합니다. EKS 자체 관리 노드와 관리형 노드 그룹의 사전 조건 단계는 Manage accelerated compute for AI/ML workloads on Amazon EKS의 링크를 참고하세요.
다음 절차는 아래 구성 요소를 사용합니다.
| 이름 | 버전 | 설명 |
|---|---|---|
| NVIDIA GPU Operator | 25.3.4+ | NVIDIA Kubernetes device plugin과 NFD/GFD 같은 필수 플러그인의 수명 주기 관리용 |
| NVIDIA DRA Drivers | 25.8.0+ | ComputeDomain CRD와 IMEX 도메인 관리용 |
| EFA DRA driver (DRANET) | 최신 | 토폴로지 인식 할당으로 UltraServer 간 통신용. Kubernetes 1.34+에 권장 |
| EFA Device Plugin | 0.5.14+ | UltraServer 간 통신용. 모든 Kubernetes 버전에서 지원 |
NVIDIA GPU operator 설치
NVIDIA GPU operator는 Kubernetes 클러스터에서 GPU를 사용하는 데 필요한 구성 요소 관리를 단순화해요. NVIDIA GPU 드라이버와 컨테이너 툴킷은 EKS 최적화 가속 AMI의 일부로 설치되므로 Helm values 구성에서 false로 설정해야 합니다.
gpu-operator-values.yaml이라는 이름의 Helm values 파일을 다음 구성으로 만드세요.
devicePlugin:
enabled: true
nfd:
enabled: true
gfd:
enabled: true
driver:
enabled: false
toolkit:
enabled: false
migManager:
enabled: false
이전 단계에서 만든 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 driver 설치
NVIDIA GPU operator 버전 v25.3.4 기준으로 NVIDIA DRA driver는 별도로 설치해야 합니다. 향후 릴리스에서 변경될 수 있으므로 NVIDIA GPU operator 릴리스 노트를 추적하는 것이 좋아요.
dra-values.yaml이라는 이름의 Helm values 파일을 다음 구성으로 만드세요. NVIDIA GPU가 있는 노드에만 DRA driver를 배포하도록 구성하는 nodeAffinity와 tolerations에 주목하세요.
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 driver를 설치합니다.
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
설치 후 DRA driver는 Kubernetes가 ComputeDomain 리소스를 이해하고 할당할 수 있게 하는 DeviceClass 리소스를 생성해서, 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
UltraServer 간 통신을 위한 EFA 설치
UltraServers 사이의 EFA 통신을 사용하려면 EFA DRA driver (DRANET)나 EFA device plugin을 설치하세요. P6e-GB200 인스턴스는 최대 17개의 네트워크 카드로 구성될 수 있고, 기본 NCI(index 0)는 interface 유형이어야 하며 최대 100 Gbps의 ENA 대역폭을 지원합니다. 노드 프로비저닝 중에 요구 사항에 따라 EFA 및 ENA 인터페이스를 구성하세요. EFA 구성에 대한 자세한 내용은 EFA configuration for P6e-GB200 instances AWS 문서를 참고하세요.
중요
EFA DRA driver와 EFA device plugin을 같은 노드에 설치하지 마세요. 두 메커니즘은 같은 노드에 공존할 수 없습니다.
옵션 1: EFA DRA driver (DRANET) 설치
efa-values.yaml이라는 이름의 Helm values 파일을 다음 구성으로 만드세요.
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
EKS Helm chart 저장소를 추가하고 EFA DRA driver를 설치합니다.
helm repo add eks https://aws.github.io/eks-charts
helm repo update
helm install aws-dranet eks/aws-dranet --namespace kube-system -f efa-values.yaml
DRANET DaemonSet이 실행 중인지 확인합니다.
kubectl get daemonset -n kube-system aws-dranet
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
aws-dranet 2 2 2 2 2 60s
DeviceClass와 ResourceSlice 객체를 사용할 수 있는지 확인합니다.
kubectl get deviceclass efa.networking.k8s.aws
NAME AGE
efa.networking.k8s.aws 60s
kubectl get resourceslices -l resource.k8s.io/driver=dra.net
토폴로지 인식 할당과 장치 공유를 포함해 EFA DRA driver 사용에 대한 자세한 내용은 Manage EFA devices on Amazon EKS를 참고하세요.
옵션 2: EFA device plugin 설치
efa-values.yaml이라는 이름의 Helm values 파일을 다음 구성으로 만드세요.
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
EKS Helm chart 저장소를 추가하고 EFA device plugin을 설치합니다.
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 -f efa-values.yaml
EFA device plugin DaemonSet이 실행 중인지 확인합니다.
kubectl get daemonset -n kube-system aws-efa-k8s-device-plugin-daemonset
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
aws-efa-k8s-device-plugin-daemonset 2 2 2 2 2 60s
노드에 할당 가능한 EFA 장치가 있는지 확인하세요. 예를 들어 각 NCI 그룹에 efa-only 인터페이스 1개로 인스턴스를 구성했다면 노드당 4개의 할당 가능한 EFA 장치가 보일 것으로 예상됩니다.
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,EFA:.status.allocatable.vpc\.amazonaws\.com/efa"
NAME EFA
ip-192-168-11-225.us-west-2.compute.internal 4
ip-192-168-24-96.us-west-2.compute.internal 4
Multi-Node NVLink에서 IMEX 검증
다중 노드 NVLINK NCCL 테스트와 기타 마이크로 벤치마크는 awesome-distributed-training GitHub 저장소를 참고하세요. 다음 단계는 nvbandwidth로 다중 노드 NVLink 테스트를 실행하는 방법을 보여줍니다.
NVL72 도메인의 두 노드에서 다중 노드 대역폭 테스트를 실행하려면 먼저 MPI operator를 설치하세요.
kubectl create -f https://github.com/kubeflow/mpi-operator/releases/download/v0.7.0/mpi-operator.yaml
테스트 매니페스트를 정의하는 nvbandwidth-test-job.yaml이라는 파일을 만드세요. Multi-Node NVLink 도달 가능성이 있는 같은 NVLink 도메인에 워커를 스케줄링하는 nvidia.com/gpu.clique Pod 선호도에 주목하세요. 아래 샘플은 cuMemcpyAsync를 사용해서 다중 노드 장치 간(device-to-device) CE Read memcpy 테스트를 실행하고 로그에 결과를 출력합니다.
NVIDIA DRA Driver 버전 v25.8.0부터 ComputeDomains는 탄력적이며 ComputeDomain 정의에서 .spec.numNodes를 0으로 설정할 수 있어요. 업데이트는 최신 NVIDIA DRA Driver 릴리스 노트를 참고하세요.
노드당 ComputeDomain(IMEX 채널)은 하나만 있을 수 있어요. ComputeDomain 리소스의 allocationMode를 All로 변경하지 마세요. ComputeDomain과 해당 ComputeDomain에 접근하는 Pod가 올바르게 할당·스케줄링되지 못하게 할 수 있기 때문입니다. 자세한 내용은 NVIDIA DRA driver issue #353을 참고하세요.
---
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
다음 명령으로 ComputeDomain을 만들고 작업을 시작합니다.
kubectl apply -f nvbandwidth-test-job.yaml
ComputeDomain 생성 후 워크로드의 ComputeDomain이 두 노드를 갖는 것을 볼 수 있어요.
kubectl get computedomains.resource.nvidia.com -o yaml
status:
nodes:
- cliqueID: .
ipAddress:
name:
- cliqueID: .
ipAddress:
name:
status: Ready
다음 명령으로 작업 결과를 확인합니다.
kubectl logs --tail=-1 -l job-name=nvbandwidth-test-launcher
성공적인 테스트는 다중 노드 memcpy 테스트의 대역폭 통계를 GB/s로 보여줍니다. 성공적인 테스트 출력의 예시는 아래와 같아요.
...
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.
테스트가 완료되면 다음 명령으로 삭제합니다.
kubectl delete -f nvbandwidth-test-job.yaml
더 알아보기 (Learn more)
출처: 문서