이 페이지에서는 Google Kubernetes Engine (GKE) 인프라를 동적 리소스 할당(DRA)을 지원하도록 설정하는 방법을 설명합니다. 이 페이지에서는 GPU 또는 TPU 워크로드를 배포할 수 있는 클러스터를 만들고 DRA를 사용 설정하는 데 필요한 드라이버를 수동으로 설치합니다.
이 페이지는 전문 하드웨어 기기를 사용하는 인프라 설정의 복잡성과 오버헤드를 줄이고자 하는 플랫폼 관리자를 대상으로 합니다.
DRA 정보
DRA는 클러스터 내에서 포드와 컨테이너 간에 하드웨어를 유연하게 요청하고 할당하며 공유할 수 있도록 해주는 Kubernetes의 기본 제공 기능입니다. 자세한 내용은 동적 리소스 할당 정보를 참조하세요.
제한사항
- 노드 자동 프로비저닝은 지원되지 않습니다.
- Autopilot 클러스터에서는 DRA를 지원하지 않습니다.
- DRA를 사용하는 경우 GPU 드라이버 자동 설치는 지원되지 않습니다.
- 다음 GPU 공유 기능은 사용할 수 없습니다.
- 시간 공유 GPU
- 멀티 인스턴스 GPU
- 멀티 프로세스 서비스(MPS)
요구사항
DRA를 사용하려면 GKE 버전이 1.32.1-gke.1489001 이상이어야 합니다.
또한 사용하려는 하드웨어 유형에 따라 다음 요구사항과 제한사항을 숙지해야 합니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
Cloud Shell을 사용하지 않는 경우 Helm CLI를 설치합니다.
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh
GKE Standard 클러스터 만들기
DRA용 Kubernetes 베타 API를 사용 설정하는 Standard 모드 클러스터를 만듭니다.
gcloud container clusters create CLUSTER_NAME \
--enable-kubernetes-unstable-apis="resource.k8s.io/v1beta1/deviceclasses,resource.k8s.io/v1beta1/resourceclaims,resource.k8s.io/v1beta1/resourceclaimtemplates,resource.k8s.io/v1beta1/resourceslices" \
--cluster-version=GKE_VERSION
다음을 바꿉니다.
CLUSTER_NAME
: 클러스터 이름입니다.GKE_VERSION
: 클러스터와 노드에 사용할 GKE 버전입니다. 1.32.1-gke.1489001 이상이어야 합니다.
GPU 또는 TPU가 포함된 GKE 노드 풀 만들기
GKE에서는 DRA를 GPU와 TPU 모두에서 사용할 수 있습니다. 머신 유형, 가속기 유형, 개수, 노드 운영체제, 노드 위치와 같은 노드 풀 구성 설정은 사용자의 요구사항에 따라 달라집니다.
GPU
GPU에서 DRA를 사용하려면 노드 풀을 만들 때 다음 작업을 수행해야 합니다.
gpu-driver-version=disabled
를 설정하여 자동 GPU 드라이버 설치를 사용 중지합니다.gke-no-default-nvidia-gpu-device-plugin=true
노드 라벨을 추가하여 GPU 기기 플러그인을 사용 중지합니다.nvidia.com/gpu.present=true
노드 라벨을 추가하여 DRA 드라이버 DaemonSet이 해당 노드에서 실행되도록 합니다.
DRA를 위한 GPU 노드 풀을 만들려면 다음 단계를 따르세요.
필요한 하드웨어를 갖춘 노드 풀을 만듭니다. 다음 예시는 L4 GPU 2개가 탑재된 g2-standard-24 인스턴스를 사용하는 Container-Optimized OS 기반 노드 풀을 생성하는 방법을 보여줍니다.
gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --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
다음을 바꿉니다.
NODEPOOL_NAME
: 노드 풀 이름입니다.CLUSTER_NAME
: 클러스터 이름입니다.
Container-Optimized OS 또는 Ubuntu 노드에 드라이버를 수동으로 설치합니다. 자세한 내용은 NVIDIA GPU 드라이버 수동 설치를 참조하세요.
TPU
TPU에서 DRA를 사용하려면 gke-no-default-tpu-device-plugin=true
노드 라벨을 추가하여 TPU 기기 플러그인을 사용 중지해야 합니다.
TPU를 사용하는 노드 풀을 만듭니다. 다음 예시에서는 TPU Trillium 노드 풀을 만듭니다.
gcloud container node-pools create NODEPOOL_NAME \
--cluster CLUSTER_NAME --num-nodes 1 \
--node-labels "gke-no-default-tpu-device-plugin=true,gke-no-default-tpu-dra-plugin=true" \
--machine-type=ct6e-standard-8t
다음을 바꿉니다.
NODEPOOL_NAME
: 노드 풀 이름입니다.CLUSTER_NAME
: 클러스터 이름입니다.
DRA 드라이버 설치
GPU
NVIDIA DRA 드라이버가 포함된 Helm 차트를 가져와 업데이트합니다.
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo update
버전 25.3.0-rc.4의 NVIDIA DRA 드라이버를 설치합니다.
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu --version="25.3.0-rc.4" --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 노드에서는
nvidiaDriverRoot="/opt/nvidia"
디렉터리 경로를 사용합니다.
TPU
제공된 Helm 차트를 사용하여 TPU용 DRA 드라이버를 설치할 수 있습니다. Helm 차트에 액세스하려면 다음 단계를 완료하세요.
ai-on-gke
저장소를 클론하여 GPU 및 TPU용 DRA 드라이버가 포함된 Helm 차트에 액세스합니다.git clone https://github.com/ai-on-gke/common-infra.git
이 차트가 포함된 디렉터리로 이동합니다.
cd common-infra/common/charts
TPU DRA 드라이버를 설치합니다.
./tpu-dra-driver/install-tpu-dra-driver.sh
인프라가 DRA를 지원하는지 확인
DRA 드라이버 포드가 실행 중인지 확인합니다.
GPU
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
TPU
kubectl get pods -n tpu-dra-driver
NAME READY STATUS RESTARTS AGE
tpu-dra-driver-kubeletplugin-h6m57 1/1 Running 0 30s
사용자가 추가한 하드웨어 기기가 ResourceSlice
에 나열되는지 확인합니다.
kubectl get resourceslices -o yaml
이전 섹션의 예시를 사용했다면, 사용한 하드웨어 유형에 따라 ResourceSlice
는 다음과 비슷한 형태일 수 있습니다.
GPU
다음 예시에서는 L4 GPU가 두 개 있는 g2-standard-24 머신을 만듭니다.
apiVersion: v1
items:
- apiVersion: resource.k8s.io/v1beta1
kind: ResourceSlice
metadata:
# lines omitted for clarity
spec:
devices:
- basic:
attributes:
architecture:
string: Ada Lovelace
brand:
string: Nvidia
cudaComputeCapability:
version: 8.9.0
cudaDriverVersion:
version: 12.9.0
driverVersion:
version: 575.57.8
index:
int: 0
minor:
int: 0
productName:
string: NVIDIA L4
type:
string: gpu
uuid:
string: GPU-4d403095-4294-6ddd-66fd-cfe5778ef56e
capacity:
memory:
value: 23034Mi
name: gpu-0
- basic:
attributes:
architecture:
string: Ada Lovelace
brand:
string: Nvidia
cudaComputeCapability:
version: 8.9.0
cudaDriverVersion:
version: 12.9.0
driverVersion:
version: 575.57.8
index:
int: 1
minor:
int: 1
productName:
string: NVIDIA L4
type:
string: gpu
uuid:
string: GPU-cc326645-f91d-d013-1c2f-486827c58e50
capacity:
memory:
value: 23034Mi
name: gpu-1
driver: gpu.nvidia.com
nodeName: gke-cluster-gpu-pool-9b10ff37-mf70
pool:
generation: 1
name: gke-cluster-gpu-pool-9b10ff37-mf70
resourceSliceCount: 1
kind: List
metadata:
resourceVersion: ""
TPU
apiVersion: v1
items:
- apiVersion: resource.k8s.io/v1beta1
kind: ResourceSlice
metadata:
# lines omitted for clarity
spec:
devices:
- basic:
attributes:
index:
int: 0
tpuGen:
string: v6e
uuid:
string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454
name: "0"
- basic:
attributes:
index:
int: 1
tpuGen:
string: v6e
uuid:
string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454
name: "1"
- basic:
attributes:
index:
int: 2
tpuGen:
string: v6e
uuid:
string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454
name: "2"
- basic:
attributes:
index:
int: 3
tpuGen:
string: v6e
uuid:
string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454
name: "3"
driver: tpu.google.com
nodeName: gke-tpu-b4d4b61b-fwbg
pool:
generation: 1
name: gke-tpu-b4d4b61b-fwbg
resourceSliceCount: 1
kind: List
metadata:
resourceVersion: ""