Amazon EKS에서 NVIDIA GPU 디바이스 관리 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 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 모델, 메모리, 드라이버 버전 및 토폴로지를 포함한 ResourceSlice 객체를 통한 다양한 속성

nvidia.com/gpu 확장 리소스 수(정수)

GPU 공유

동일한 포드의 여러 컨테이너가 공유 ResourceClaim 참조를 통해 GPU를 공유할 수 있음

지원되지 않음. 각 GPU는 하나의 컨테이너에만 할당됩니다.

ComputeDomains

다중 노드 보안 GPU 통신에서 ComputeDomain 리소스를 통해 다중 노드 NVLink(MNNVL) 관리

지원되지 않음

속성 기반 선택

CEL 표현식을 사용하여 모델, 메모리 또는 기타 속성을 기준으로 GPU 필터링

지원되지 않음

NVIDIA DRA 드라이버 설치

GPU용 NVIDIA DRA 드라이버는 GPU 및 ComputeDomains와 같은 두 가지 유형의 리소스를 관리합니다. 두 개의 DRA kubelet 플러그인(gpu-kubelet-plugincompute-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를 참조하세요.

  1. NVIDIA DRA 드라이버 헬름 차트 리포지토리를 추가하세요.

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
  2. 로컬 헬름 리포지토리를 업데이트하세요.

    helm repo update
  3. NVIDIA DRA 드라이버의 최신 버전을 가져오세요.

    helm search repo nvidia/nvidia-dra
  4. 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 드라이버 헬름 차트를 참조하세요.

  5. DRA 드라이버 포드가 실행 중인지 확인하세요.

    kubectl get pods -n nvidia-dra-driver-gpu
  6. DeviceClass 객체가 생성되었는지 확인하세요.

    kubectl get deviceclass
    NAME AGE gpu.nvidia.com 60s
  7. ResourceSlice GPU 노드에 대해 객체가 게시되었는지 확인하세요.

    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 설치 또는 업데이트 섹션을 참조하세요.

절차

  1. NVIDIA 디바이스 플러그인 헬름 차트 리포지토리를 추가하세요.

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
  2. 로컬 헬름 리포지토리를 업데이트하세요.

    helm repo update
  3. NVIDIA Kubernetes 디바이스 플러그인을 설치하세요.

    helm install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --set gfd.enabled=true
    참고

    또한 GPU를 프로비저닝하는 데 필요한 모든 NVIDIA 소프트웨어 구성 요소의 관리를 자동화하는 NVIDIA GPU Operator를 사용하여 NVIDIA Kubernetes 디바이스 플러그인을 설치하고 관리할 수 있습니다.

  4. NVIDIA 디바이스 플러그인 DaemonSet가 실행 중인지 확인하세요.

    kubectl get ds -n nvidia nvdp-nvidia-device-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nvdp-nvidia-device-plugin 2 2 2 2 2 <none> 60s
  5. 노드에 할당 가능한 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 | +-----------------------------------------------------------------------------------------+