이 문서에서는 동적 리소스 할당 (DRA)을 지원하도록 Google Kubernetes Engine (GKE) 인프라를 수동으로 설정하는 방법을 설명합니다. 설정 단계에는 GPU를 사용하는 노드 풀 만들기 및 DRA 드라이버 설치가 포함됩니다.
이 문서는 애플리케이션 운영자가 워크로드에서 클레임할 수 있는 전문 하드웨어 기기로 인프라를 만들려는 플랫폼 관리자 를 대상으로 합니다.
제한사항
다음과 같은 제한사항이 적용됩니다.
- GKE의 DRA 제한사항
- DRA 사용 여부와 관계없이 적용되는 기기별 제한사항: 표준 클러스터의 GPU 워크로드
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면
gcloud components update명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
버전 1.35 이상을 실행하는 GKE 표준 클러스터가 있습니다. 리전 클러스터를 만들 수도 있습니다. 리전 클러스터를 만들 수도 있습니다.
Helm을 설치합니다. Cloud Shell을 사용하는 경우에는 Helm이 이미 설치되어 있습니다.
GPU가 포함된 GKE 노드 풀 만들기
이 섹션에서는 GPU 노드 풀을 만들고 해당 DRA 드라이버를 설치하는 방법을 보여줍니다. 이 섹션의 단계는 수동으로 만든 노드 풀에만 적용됩니다. DRA를 지원하는 GPU 노드 풀을 만들려면 다음을 수행해야 합니다.
- 자동 GPU 드라이버 설치 사용 중지:
--accelerator플래그에서gpu-driver-version=disabled옵션을 지정합니다. - GPU 기기 플러그인 사용 중지: 노드
gke-no-default-nvidia-gpu-device-plugin=true라벨을 노드 풀에 추가합니다. - DRA 드라이버 DaemonSet 실행: 노드 풀에
nvidia.com/gpu.present=true노드 라벨을 추가합니다. - 자동 확장 구성: 노드 풀에서 클러스터 자동 확장 처리기를 사용하려면
노드 풀에
cloud.google.com/gke-nvidia-gpu-dra-driver=true노드 라벨을 추가합니다. 클러스터 자동 확장 처리기는 이 노드 라벨을 사용하여 GPU용 DRA 드라이버를 실행하는 노드를 식별합니다.
GPU 노드 풀을 만들고 구성하려면 다음 단계를 따르세요.
GPU 노드 풀을 만듭니다. 다음 예시 명령어는 구성이 다른 노드 풀을 만듭니다.
L4 GPU가 2개 있는
g2-standard-24인스턴스로 노드 풀을 만듭니다.gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \ --machine-type="g2-standard-24" \ --accelerator="type=nvidia-l4,count=2,gpu-driver-version=disabled" \ --num-nodes="1" \ --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=true다음을 바꿉니다.
각 인스턴스에 NVIDIA A100 (80GB) GPU가 하나씩 있는
a2-ultragpu-1g인스턴스로 자동 확장 노드 풀을 만듭니다.gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \ --enable-autoscaling \ --max-nodes=5 \ --machine-type="a2-ultragpu-1g" \ --accelerator="type=nvidia-a100-80gb,count=1,gpu-driver-version=disabled" \ --num-nodes="1" \ --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=true,cloud.google.com/gke-nvidia-gpu-dra-driver=true
DRA 드라이버 설치
NVIDIA DRA 드라이버가 포함된 Helm 차트를 가져와 업데이트합니다.
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo update버전 25.8.0 이상의 NVIDIA DRA GPU 드라이버를 설치합니다.
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --version="25.8.0" --create-namespace --namespace=nvidia-dra-driver-gpu \ --set nvidiaDriverRoot="/home/kubernetes/bin/nvidia/" \ --set gpuResourcesEnabledOverride=true \ --set resources.computeDomains.enabled=false \ --set kubeletPlugin.priorityClassName="" \ --set 'kubeletPlugin.tolerations[0].key=nvidia.com/gpu' \ --set 'kubeletPlugin.tolerations[0].operator=Exists' \ --set 'kubeletPlugin.tolerations[0].effect=NoSchedule'Ubuntu 노드의 경우
"/opt/nvidia"디렉터리 경로를--set nvidiaDriverRoot플래그에서 지정합니다.
인프라가 DRA를 지원하는지 확인
DRA 드라이버 포드가 실행 중인지 확인합니다.
kubectl get pods -n nvidia-dra-driver-gpu출력은 다음과 비슷합니다.
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46s사용자가 추가한 하드웨어 기기가 ResourceSlice에 나열되는지 확인합니다.
kubectl get resourceslices -o yaml출력은 다음과 비슷합니다.
apiVersion: v1 items: - apiVersion: resource.k8s.io/v1 kind: ResourceSlice metadata: # Multiple lines are omitted here. spec: devices: - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 0 minor: int: 0 pcieBusID: string: "0000:00:03.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-ccc19e5e-e3cd-f911-65c8-89bcef084e3f capacity: memory: value: 23034Mi name: gpu-0 - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 1 minor: int: 1 pcieBusID: string: "0000:00:04.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-f783198d-42f9-7cef-9ea1-bb10578df978 capacity: memory: value: 23034Mi name: gpu-1 driver: gpu.nvidia.com nodeName: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm pool: generation: 1 name: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm resourceSliceCount: 1 kind: List metadata: resourceVersion: ""