이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
Amazon EKS에서 NVIDIA GPU 디바이스 관리
NVIDIA GPU는 기계 학습 훈련, 추론 및 고성능 컴퓨팅 워크로드에 널리 사용됩니다. Amazon EKS는 EKS 클러스터에서 NVIDIA GPU 디바이스를 관리하기 위한 두 가지 메커니즘(GPU용 NVIDIA DRA 드라이버 및 NVIDIA Kubernetes 디바이스 플러그인)을 지원합니다.
Kubernetes 버전 1.34 이상을 실행하는 클러스터의 새 배포에 대해 NVIDIA DRA 드라이버를 사용하는 것이 좋습니다. NVIDIA DRA 드라이버를 사용하면 컨테이너 사이에서 유연한 GPU 할당 및 GPU 공유가 가능합니다. NVIDIA 디바이스 플러그인은 계속 지원됩니다.
NVIDIA DRA 드라이버 및 NVIDIA 디바이스 플러그인 비교
| 기능 | NVIDIA DRA 드라이버 | NVIDIA 디바이스 플러그인 |
|---|---|---|
|
최소 Kubernetes 버전 |
1.34 |
모든 EKS 지원 Kubernetes 버전 |
|
Karpenter 및 EKS Auto Mode |
지원되지 않음 |
지원됨 |
|
EKS 최적화 AMI |
AL2023 |
AL2023, Bottlerocket |
|
디바이스 알림 |
GPU 모델, 메모리, 드라이버 버전 및 토폴로지를 포함한 |
|
|
GPU 공유 |
동일한 포드의 여러 컨테이너가 공유 |
지원되지 않음. 각 GPU는 하나의 컨테이너에만 할당됩니다. |
|
ComputeDomains |
다중 노드 보안 GPU 통신에서 |
지원되지 않음 |
|
속성 기반 선택 |
CEL 표현식을 사용하여 모델, 메모리 또는 기타 속성을 기준으로 GPU 필터링 |
지원되지 않음 |
NVIDIA DRA 드라이버 설치
GPU용 NVIDIA DRA 드라이버는 GPU 및 ComputeDomains와 같은 두 가지 유형의 리소스를 관리합니다. 두 개의 DRA kubelet 플러그인(gpu-kubelet-plugin 및 compute-domain-kubelet-plugin)을 실행합니다. 각각 설치 중에 개별적으로 활성화하거나 비활성화할 수 있습니다. 이 가이드는 GPU 할당에 초점을 맞춥니다. ComputeDomains 사용에 대해서는 Amazon EKS에서 P6e-GB200 UltraServers 사용 섹션을 참조하세요.
현재 Bottlerocket에서 NVIDIA DRA 드라이버 사용은 지원되지 않습니다.
사전 조건
-
Kubernetes 버전 1.34 이상을 실행하는 Amazon EKS 클러스터.
-
NVIDIA GPU 인스턴스 유형이 있는 노드(예:
P또는G인스턴스). -
NVIDIA GPU에 대해 호스트 수준 구성 요소가 설치된 노드. EKS 최적화 AL2023 또는 Bottlerocket NVIDIA AMI를 사용하는 경우 호스트 수준 NVIDIA 드라이버, CUDA 사용자 모드 드라이버 및 컨테이너 툴킷이 사전 설치됩니다.
-
명령줄 환경에 설치된 Helm에 대한 자세한 내용은 Helm 설정 지침을 참조하세요.
-
클러스터와 통신하도록 구성된
kubectl. 자세한 내용은 kubectl 설치 또는 업데이트 섹션을 참조하세요.
절차
중요
GPU 디바이스 관리에 대해 NVIDIA DRA 드라이버를 사용하는 경우 동일한 노드에 NVIDIA 디바이스 플러그인과 함께 배포할 수 없습니다. 업데이트는 업스트림 Kubernetes KEP-5004
-
NVIDIA DRA 드라이버 헬름 차트 리포지토리를 추가하세요.
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia -
로컬 헬름 리포지토리를 업데이트하세요.
helm repo update -
NVIDIA DRA 드라이버의 최신 버전을 가져오세요.
helm search repo nvidia/nvidia-dra -
NVIDIA DRA 드라이버를 설치하세요.
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --create-namespace \ --namespace nvidia-dra-driver-gpu \ --set resources.computeDomains.enabled=false \ --set 'gpuResourcesEnabledOverride=true'고급 구성 옵션은 NVIDIA DRA 드라이버 헬름 차트
를 참조하세요. -
DRA 드라이버 포드가 실행 중인지 확인하세요.
kubectl get pods -n nvidia-dra-driver-gpu -
DeviceClass객체가 생성되었는지 확인하세요.kubectl get deviceclassNAME AGE gpu.nvidia.com 60s -
ResourceSliceGPU 노드에 대해 객체가 게시되었는지 확인하세요.kubectl get resourceslice
포드에서 NVIDIA GPU 요청
DRA 드라이버를 사용하여 NVIDIA GPU를 요청하려면 gpu.nvidia.com DeviceClass를 참조하는 ResourceClaimTemplate를 생성하고 포드 사양에서 이를 참조합니다.
다음 예제에서는 단일 GPU를 요청합니다.
apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: single-gpu spec: spec: devices: requests: - name: gpu exactly: deviceClassName: gpu.nvidia.com count: 1 --- apiVersion: v1 kind: Pod metadata: name: gpu-workload spec: containers: - name: app ... resources: claims: - name: gpu resourceClaims: - name: gpu resourceClaimTemplateName: single-gpu tolerations: - key: "nvidia.com/gpu" operator: "Exists" effect: "NoSchedule"
NVIDIA Kubernetes 디바이스 플러그인 설치
NVIDIA Kubernetes 디바이스 플러그인은 NVIDIA GPU를 nvidia.com/gpu 확장 리소스로 알립니다. 컨테이너 리소스 요청 및 제한에서 GPU를 요청합니다.
사전 조건
-
Amazon EKS 클러스터.
-
EKS 최적화 AL2023 NVIDIA AMI를 사용하는 NVIDIA GPU 인스턴스 유형이 있는 노드. EKS 최적화 Bottlerocket AMI에는 NVIDIA 디바이스 플러그인이 포함되어 있으며 별도의 설치가 필요하지 않습니다.
-
명령줄 환경에 설치된 Helm에 대한 자세한 내용은 Helm 설정 지침을 참조하세요.
-
클러스터와 통신하도록 구성된
kubectl. 자세한 내용은 kubectl 설치 또는 업데이트 섹션을 참조하세요.
절차
-
NVIDIA 디바이스 플러그인 헬름 차트 리포지토리를 추가하세요.
helm repo add nvdp https://nvidia.github.io/k8s-device-plugin -
로컬 헬름 리포지토리를 업데이트하세요.
helm repo update -
NVIDIA Kubernetes 디바이스 플러그인을 설치하세요.
helm install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --set gfd.enabled=true참고
또한 GPU를 프로비저닝하는 데 필요한 모든 NVIDIA 소프트웨어 구성 요소의 관리를 자동화하는 NVIDIA GPU Operator
를 사용하여 NVIDIA Kubernetes 디바이스 플러그인을 설치하고 관리할 수 있습니다. -
NVIDIA 디바이스 플러그인 DaemonSet가 실행 중인지 확인하세요.
kubectl get ds -n nvidia nvdp-nvidia-device-pluginNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nvdp-nvidia-device-plugin 2 2 2 2 2 <none> 60s -
노드에 할당 가능한 GPU가 있는지 확인하세요.
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"예제 출력은 다음과 같습니다.
NAME GPU ip-192-168-11-225.us-west-2.compute.internal 1 ip-192-168-24-96.us-west-2.compute.internal 1
포드에서 NVIDIA GPU 요청
디바이스 플러그인을 사용하여 NVIDIA GPU를 요청하려면 컨테이너 리소스 제한에서 nvidia.com/gpu 리소스를 지정합니다.
apiVersion: v1 kind: Pod metadata: name: nvidia-smi spec: restartPolicy: OnFailure containers: - name: gpu-demo image: public.ecr.aws/amazonlinux/amazonlinux:2023-minimal command: ["/bin/sh", "-c"] args: ["nvidia-smi && tail -f /dev/null"] resources: limits: nvidia.com/gpu: 1 tolerations: - key: "nvidia.com/gpu" operator: "Equal" value: "true" effect: "NoSchedule"
이 테스트를 실행하려면 매니페스트를 적용하고 로그를 봅니다.
kubectl apply -f nvidia-smi.yaml kubectl logs nvidia-smi
예제 출력은 다음과 같습니다.
+-----------------------------------------------------------------------------------------+ | NVIDIA-SMI XXX.XXX.XX Driver Version: XXX.XXX.XX CUDA Version: XX.X | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA L4 On | 00000000:31:00.0 Off | 0 | | N/A 27C P8 11W / 72W | 0MiB / 23034MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+