이 페이지에서는 Google Distributed Cloud에서 그래픽 처리 장치 (GPU) 워크로드를 사용 설정하고 관리하는 방법을 설명합니다. 이 기능을 활용하려면 GPU가 포함된 Distributed Cloud 하드웨어 구성이 있어야 합니다. GPU 지원은 기본적으로 사용 중지되어 있습니다. Distributed Cloud 클러스터에서 GPU 지원을 명시적으로 사용 설정해야 합니다. Distributed Cloud Servers는 GPU 워크로드를 지원하지 않습니다.
이러한 구성을 계획하고 주문하려면 다음 문서에서 구성 2를 선택하세요.
Distributed Cloud 랙에 GPU가 포함된 경우 GPU 리소스를 사용하도록 Distributed Cloud 워크로드를 구성할 수 있습니다.
Distributed Cloud 워크로드는 컨테이너와 가상 머신에서 실행될 수 있습니다.
컨테이너에서 실행되는 GPU 워크로드 GPU 지원을 사용 설정하면 Distributed Cloud 클러스터의 모든 GPU 리소스가 처음에는 컨테이너에서 실행되는 워크로드에 할당됩니다. GPU 기반 컨테이너화된 워크로드를 실행하기 위한 GPU 드라이버는 Distributed Cloud에 포함되어 있습니다. 각 컨테이너 내에서 GPU 라이브러리는
/opt/nvidia에 마운트됩니다.가상 머신에서 실행되는 GPU 워크로드 가상 머신에서 GPU 기반 워크로드를 실행하려면 이 페이지의 뒷부분에 설명된 대로 타겟 Distributed Cloud 노드에서 가상 머신에 GPU 리소스를 할당해야 합니다. 이렇게 하면 내장 GPU 드라이버가 우회되고 GPU가 가상 머신에 직접 전달됩니다. 각 가상 머신의 게스트 운영체제에 호환되는 GPU 드라이버를 수동으로 설치해야 합니다. 또한 가상 머신에서 특수 GPU 드라이버를 실행하는 데 필요한 모든 라이선스를 확보해야 합니다.
Distributed Cloud 노드에 GPU가 있는지 확인하려면 노드에 vm.cluster.gke.io.gpu=true 라벨이 있는지 확인합니다. 노드에 라벨이 없으면 해당 Distributed Cloud 실제 머신에 GPU가 설치되어 있지 않은 것입니다.
GPU 지원 사용 설정
워크로드에 GPU 지원을 사용 설정하려면 값이 true로 설정된 enableGPU 매개변수가 포함된 VMRuntime 커스텀 리소스를 만들거나 수정한 후 Distributed Cloud 클러스터에 적용해야 합니다.
예를 들면 다음과 같습니다.
apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: # Enable GPU support enableGPU: true
GDC 가상 머신 하위 시스템에서 VM 런타임을 사용 설정하려는 클러스터의 유형에 따라 다음 중 하나를 수행합니다.
- GDC의 VM 런타임 가상 머신 하위 시스템을 아직 사용 설정하지 않은 클라우드 제어 영역 클러스터의 경우
VMRuntime리소스를 수동으로 만들어야 합니다. - GDC 가상 머신 하위 시스템에서 VM 런타임을 이미 사용 설정한 클라우드 제어 영역 클러스터의 경우 기존
VMRuntime리소스를 수정해야 합니다. - 로컬 제어 영역 클러스터의 경우 기존
VMRuntime리소스를 수정해야 합니다.
이 동일한 VMRuntime 리소스는 enable 매개변수를 사용하여 클러스터에서 GDC용 VM 런타임 지원도 구성합니다. 워크로드 요구사항에 따라 두 매개변수를 구성해야 합니다. Distributed Cloud 클러스터에서 GPU 지원을 사용 설정하기 위해 GDC용 VM 런타임 지원을 사용 설정할 필요는 없습니다.
다음 표에서는 사용 가능한 구성을 설명합니다.
enable 값 |
enableGPU 값 |
결과 구성 |
|---|---|---|
false |
false |
워크로드는 컨테이너에서만 실행되며 GPU 리소스를 사용할 수 없습니다. |
false |
true |
워크로드는 컨테이너에서만 실행되며 GPU 리소스를 사용할 수 있습니다. |
true |
true |
워크로드는 가상 머신과 컨테이너에서 실행할 수 있습니다. 두 유형의 워크로드 모두 GPU 리소스를 사용할 수 있습니다. |
true |
false |
워크로드는 가상 머신과 컨테이너에서 실행할 수 있습니다. 두 유형의 워크로드 모두 GPU 리소스를 사용할 수 없습니다. |
GPU 지원이 사용 설정되어 있는지 확인
클러스터에서 GPU 지원이 사용 설정되었는지 확인하려면 다음 명령어를 사용합니다.
kubectl get pods --namespace vm-system
이 명령어는 다음 예와 유사한 출력을 반환합니다.
NAME READY STATUS RESTARTS AGE
...
gpu-controller-controller-manager-vbv4w 2/2 Running 0 31h
kubevirt-gpu-dp-daemonset-gxj7g 1/1 Running 0 31h
nvidia-gpu-dp-daemonset-bq2vj 1/1 Running 0 31h
...
출력에서 GPU 컨트롤러 포드가 배포되었으며 vm-system 네임스페이스에서 실행 중인지 확인할 수 있습니다.
GPU 리소스 할당
기본적으로 Distributed Cloud 클러스터에서 GPU 지원을 사용 설정하면 클러스터의 각 노드에 있는 모든 GPU 리소스가 컨테이너화된 워크로드에 할당됩니다. 각 노드에서 GPU 리소스 할당을 맞춤설정하려면 이 섹션의 단계를 완료하세요.
GPU 리소스 할당 구성
Distributed Cloud 노드에서 GPU 리소스를 할당하려면 다음 명령어를 사용하여 타겟 노드에서
GPUAllocation커스텀 리소스를 수정합니다.kubectl edit gpuallocation NODE_NAME --namespace vm-system
NODE_NAME을 대상 Distributed Cloud 노드의 이름으로 바꿉니다.다음 예에서 명령어의 출력은 공장 기본 GPU 리소스 할당을 보여줍니다. 기본적으로 모든 GPU 리소스는 컨테이너화된 (
pod) 워크로드에 할당되며 가상 머신 (vm) 워크로드에는 GPU 리소스가 할당되지 않습니다.... spec: pod: 2 # Number of GPUs allocated for container workloads vm: 0 # Number of GPUs allocated for VM workloads다음과 같이 GPU 리소스 할당을 설정합니다.
- 컨테이너화된 워크로드에 GPU 리소스를 할당하려면
pod필드의 값을 늘리고vm필드의 값을 동일한 양만큼 줄입니다. - 가상 머신 워크로드에 GPU 리소스를 할당하려면
vm필드 값을 늘리고pod필드 값을 동일한 양만큼 줄입니다.
할당된 GPU 리소스의 총수가 노드가 실행되는 실제 Distributed Cloud 머신에 설치된 GPU 수를 초과해서는 안 됩니다. 그렇지 않으면 노드에서 잘못된 할당을 거부합니다.
다음 예에서는 컨테이너화된 (
pod) 워크로드에서 가상 머신 (vm) 워크로드로 GPU 리소스 2개가 재할당되었습니다.... spec: pod: 0 # Number of GPUs allocated for container workloads vm: 2 # Number of GPUs allocated for VM workloads완료되면 수정된
GPUAllocation리소스를 클러스터에 적용하고 상태가AllocationFulfilled로 변경될 때까지 기다립니다.- 컨테이너화된 워크로드에 GPU 리소스를 할당하려면
GPU 리소스 할당 확인
GPU 리소스 할당을 확인하려면 다음 명령어를 사용하세요.
kubectl describe gpuallocations NODE_NAME --namespace vm-system
NODE_NAME을 대상 Distributed Cloud 노드의 이름으로 바꿉니다.이 명령어는 다음 예와 유사한 출력을 반환합니다.
Name: mynode1 ... spec: node: mynode1 pod: 2 # Number of GPUs allocated for container workloads vm: 0 # Number of GPUs allocated for VM workloads Status: Allocated: true Conditions: Last Transition Time: 2022-09-23T03:14:10Z Message: Observed Generation: 1 Reason: AllocationFulfilled Status: True Type: AllocationStatus Last Transition Time: 2022-09-23T03:14:16Z Message: Observed Generation: 1 Reason: DeviceStateUpdated Status: True Type: DeviceStateUpdated Consumption: pod: 0/2 # Number of GPUs currently consumed by container workloads vm: 0/0 # Number of GPUs currently consumed by VM workloads Device Model: Tesla T4 Events: <none>
GPU 리소스를 사용하도록 컨테이너 구성
Distributed Cloud에서 실행되는 컨테이너가 GPU 리소스를 사용하도록 구성하려면 다음 예와 같이 사양을 구성한 후 클러스터에 적용합니다.
apiVersion: v1 kind: Pod metadata: name: my-gpu-pod spec: containers: - name: my-gpu-container image: CUDA_TOOLKIT_IMAGE command: ["/bin/bash", "-c", "--"] args: ["while true; do sleep 600; done;"] env: resources: requests: nvidia.com/gpu-pod-TESLA_T4: 2 limits: nvidia.com/gpu-pod-TESLA_T4: 2 nodeSelector: kubernetes.io/hostname: NODE_NAME
다음을 바꿉니다.
CUDA_TOOLKIT_IMAGE: NVIDIA CUDA 툴킷 이미지의 전체 경로와 이름입니다. CUDA 툴킷 버전은 Distributed Cloud 클러스터에서 실행되는 NVIDIA 드라이버 버전과 일치해야 합니다. NVIDIA 드라이버 버전을 확인하려면 Distributed Cloud 출시 노트를 참고하세요. 일치하는 CUDA 툴킷 버전을 확인하려면 CUDA 호환성을 참고하세요.NODE_NAME: 대상 Distributed Cloud 노드의 이름입니다.
GPU 리소스를 사용하도록 가상 머신 구성
Distributed Cloud에서 실행되는 가상 머신이 GPU 리소스를 사용하도록 구성하려면 다음 예와 같이 VirtualMachine 리소스 사양을 구성한 후 클러스터에 적용합니다.
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine ... spec: ... gpu: model: nvidia.com/gpu-vm-TESLA_T4 quantity: 2