GPU에 대한 Kubernetes 디바이스 플러그인 설치 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

GPU에 대한 Kubernetes 디바이스 플러그인 설치

Kubernetes 디바이스 플러그인은 GPU, 네트워크 인터페이스 및 네트워크 어댑터와 같은 특수 인프라를 Kubernetes 워크로드에 사용할 수 있는 리소스로 알리는 기본 메커니즘입니다. 동적 리소스 할당(DRA)은 Kubernetes에서 디바이스 관리를 위한 미래 지향적인 기술로 자리 잡았지만, 대부분의 전문 인프라 공급자는 DRA 드라이버에 대한 지원에서 초반 수준입니다. Kubernetes 디바이스 플러그인은 오늘날 Kubernetes 클러스터에서 GPU를 사용하는 데 널리 사용되는 접근 방식입니다.

고려 사항

  • NVIDIA GPU와 함께 EKS 최적화 AL2023 AMI를 사용하는 경우 NVIDIA Kubernetes 디바이스 플러그인을 설치해야 합니다. 헬름, 선택한 Kubernetes 도구 또는 NVIDIA GPU 운영자를 사용하여 NVIDIA Kubernetes 디바이스 플러그인을 설치 및 관리할 수 있습니다.

  • NVIDIA GPU와 함께 EKS 최적화 Bottlerocket AMI를 사용하는 경우 NVIDIA Kubernetes 디바이스 플러그인을 설치할 필요가 없습니다. EKS 최적화 Bottlerocket AMI에 이미 포함되어 있기 때문입니다. 여기에는 EKS Auto Mode에서 GPU 인스턴스를 사용하는 경우가 포함됩니다.

  • AWS Inferentia 또는 Trainium GPU와 함께 EKS 최적화 AL2023 또는 Bottlerocket AMI를 사용하는 경우 Neuron Kubernetes 디바이스 플러그인을 설치하고 선택적으로 Neuron Kubernetes 스케줄러 확장 프로그램을 설치해야 합니다. 자세한 내용은 Neuron documentation for running on EKS를 참조하세요.

NVIDIA Kubernetes 디바이스 플러그인 설치

다음 절차에서는 NVIDIA Kubernetes 디바이스 플러그인을 설치하고 NVIDIA GPU 인스턴스에서 샘플 테스트를 실행하는 방법을 설명합니다.

사전 조건

  • EKS 클러스터 생성됨

  • EKS 최적화 AL2023 NVIDIA AMI를 사용하여 클러스터에서 실행되는 NVIDIA GPU 노드

  • 명령줄 환경에 Helm이 설치되어 있습니다. Helm 설정 지침을 참조하세요.

절차

  1. nvdp 헬름 차트 리포지토리를 추가하세요.

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
  2. 최신 차트가 적용되도록 로컬 Helm 리포지토리를 업데이트합니다.

    helm repo update
  3. NVIDIA Kubernetes 디바이스 플러그인의 최신 버전을 가져오세요.

    helm search repo nvdp --devel
    NAME CHART VERSION APP VERSION DESCRIPTION nvdp/gpu-feature-discovery 0.17.4 0.17.4 ... nvdp/nvidia-device-plugin 0.17.4 0.17.4 ...
  4. 클러스터에 NVIDIA Kubernetes 디바이스 플러그인을 설치하고 0.17.4를 위 명령의 최신 버전으로 바꾸세요.

    helm install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --version 0.17.4 \ --set gfd.enabled=true
  5. NVIDIA Kubernetes 디바이스 플러그인이 클러스터에서 실행 중인지 확인하세요. 아래 출력은 클러스터에 두 개의 노드가 있는 출력을 보여줍니다.

    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> 11m
  6. 다음 명령으로 노드에 할당 가능한 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
  7. 다음 콘텐츠를 가진 nvidia-smi.yaml이라는 파일을 생성합니다: 이 매니페스트는 노드에서 nvidia-smi를 실행하는 최소 AL2023 컨테이너 이미지를 시작합니다.

    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'
  8. 다음 명령으로 매니페스트를 적용합니다.

    kubectl apply -f nvidia-smi.yaml
  9. 포드 실행이 끝난 후, 다음 명령을 사용하여 로그를 확인합니다.

    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 | +-----------------------------------------------------------------------------------------+

Neuron Kubernetes 디바이스 플러그인 설치

다음 절차에서는 Neuron Kubernetes 디바이스 플러그인을 설치하고 Inferentia 인스턴스에서 샘플 테스트를 실행하는 방법을 설명합니다.

사전 조건

  • EKS 클러스터 생성됨

  • EKS 최적화 AL2023 Neuron AMI 또는 Bottlerocket AMI를 사용하여 클러스터에서 실행되는 Neuron GPU 노드

  • 명령줄 환경에 Helm이 설치되어 있습니다. Helm 설정 지침을 참조하세요.

절차

  1. 클러스터에 Neuron Kubernetes 디바이스 플러그인을 설치하세요.

    helm upgrade --install neuron-helm-chart oci://public.ecr.aws/neuron/neuron-helm-chart \ --set "npd.enabled=false"
  2. Neuron Kubernetes 디바이스 플러그인이 클러스터에서 실행 중인지 확인하세요. 아래 출력은 클러스터에 단일 Neuron 노드가 있는 출력을 보여줍니다.

    kubectl get ds -n kube-system neuron-device-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-device-plugin 1 1 1 1 1 <none> 72s
  3. 다음 명령으로 노드에 할당 가능한 NueronCores가 있는지 확인하세요.

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,NeuronCore:.status.allocatable.aws\.amazon\.com/neuroncore"
    NAME NeuronCore ip-192-168-47-173.us-west-2.compute.internal 2
  4. 다음 명령으로 노드에 할당 가능한 NueronDevices가 있는지 확인하세요.

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,NeuronDevice:.status.allocatable.aws\.amazon\.com/neuron"
    NAME NeuronDevice ip-192-168-47-173.us-west-2.compute.internal 1
  5. 다음 콘텐츠를 가진 neuron-ls.yaml이라는 파일을 생성합니다: 이 매니페스트는 neuron-ls 도구가 설치된 Neuron Monitor 컨테이너를 시작합니다.

    apiVersion: v1 kind: Pod metadata: name: neuron-ls spec: restartPolicy: Never containers: - name: neuron-container image: public.ecr.aws/g4h4h0b5/neuron-monitor:1.0.0 command: ["/bin/sh"] args: ["-c", "neuron-ls"] resources: limits: aws.amazon.com/neuron: 1 tolerations: - key: "aws.amazon.com/neuron" operator: "Exists" effect: "NoSchedule"
  6. 다음 명령으로 매니페스트를 적용합니다.

    kubectl apply -f neuron-ls.yaml
  7. 포드 실행이 끝난 후, 다음 명령을 사용하여 로그를 확인합니다.

    kubectl logs neuron-ls

    출력 예시는 아래와 같습니다.

    instance-type: inf2.xlarge instance-id: ... +--------+--------+--------+---------+ | NEURON | NEURON | NEURON | PCI | | DEVICE | CORES | MEMORY | BDF | +--------+--------+--------+---------+ | 0 | 2 | 32 GB | 00:1f.0 | +--------+--------+--------+---------+