Autopilot에서 GPU 워크로드 배포


이 페이지에서는 Google Kubernetes Engine(GKE) Autopilot 워크로드에서 하드웨어 가속기(GPU)를 요청하는 방법을 보여줍니다.

Autopilot은 GPU 포드를 실행할 수 있는 특수 Accelerator 컴퓨팅 클래스를 제공합니다. 이 컴퓨팅 클래스를 사용하면 GKE에서 GPU 노드에 포드를 배치하므로 포드에서 가상 머신(VM)의 고급 기능에 액세스할 수 있습니다. 또한 Accelerator 컴퓨팅 클래스를 선택하지 않고 GPU 포드를 선택적으로 실행할 수도 있습니다. Accelerator 컴퓨팅 클래스 이점에 대한 자세한 내용은 특정 컴퓨팅 클래스를 사용하는 경우를 참조하세요.

가격 책정

Autopilot은 GPU 워크로드를 실행하기 위해 Accelerator 컴퓨팅 클래스를 요청했는지 여부에 따라 다르게 요금을 청구합니다.

Accelerator 컴퓨팅 클래스를 사용하나요? 가격 책정 GKE 기능과의 호환성
GPU 워크로드를 실행하는 Compute Engine 하드웨어에 대한 요금과 자동 노드 관리 및 확장성을 위한 Autopilot 프리미엄 요금이 청구됩니다. 자세한 내용은 Autopilot 모드 가격 책정을 참조하세요.

호환 대상:

GPU 포드 리소스 요청에 따라 요금이 청구됩니다. 자세한 내용은 Kubernetes Engine 가격 책정의 'GPU 포드' 섹션을 참조하세요.

호환 대상:

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.
  • 다음 버전 중 하나를 실행하는 GKE Autopilot 클러스터가 있는지 확인합니다.

    • 가속기 컴퓨팅 클래스: 1.28.6-gke.1095000으로 시작하는 모든 1.28 버전의 패치
      • NVIDIA H100(80GB) GPU: 1.28.6-gke.1369000 이상 및 1.29.1-gke.1575000 이상
      • VM당 여러 GPU 포드: 1.29.2-gke.1355000 이상
    • 컴퓨팅 클래스를 선택하지 않음:

      • NVIDIA L4 GPU: 1.28.3-gke.1203000 이상
      • NVIDIA A100 (80GB) GPU: 1.27 이상
      • 기타 모든 GPU: 1.24.2-gke.1800 이상
  • 프로젝트에 사용 가능한 GPU 할당량이 충분한지 확인합니다. 각 리전에서 만들려는 GPU 모델에 대해 Compute Engine GPU 할당량이 충분히 있어야 합니다. 추가 GPU 할당량이 필요하면 GPU 할당량을 요청하세요.

제한사항

  • 시간 공유 GPU멀티 인스턴스 GPU는 GKE 버전 1.29.3-gke.1093000 이상의 Autopilot에서 사용할 수 있습니다.
  • GPU 가용성은 Autopilot 클러스터의 Google Cloud 리전 및 GPU 할당량에 따라 달라집니다. 리전 또는 영역별로 GPU 모델을 찾으려면 GPU 리전 및 영역 가용성을 참조하세요.
  • NVIDIA A100(80GB) GPU의 경우 포드가 용량을 사용하는지 여부에 관계없이 노드에 연결된 로컬 SSD에 고정 가격이 청구됩니다.
  • 1.29.2-gke.1355000 이전의 GKE 버전의 경우 포드에 대해 특정 기존 GPU 노드를 명시적으로 요청하면 포드가 노드의 모든 GPU 리소스를 사용해야 합니다. 예를 들어 기존 노드에 8개 GPU가 있고 포드의 컨테이너가 총 4개 GPU를 요청하면 Autopilot가 포드를 거부합니다.
  • GKE 버전 1.29.2-gke.1355000 이상에서 단일 노드에 여러 GPU 포드를 맞추려면 해당 포드에 대한 GPU 요청 합계가 해당 노드에 연결된 GPU 리소스의 수보다 작거나 같아야 합니다. 예를 들어 gke-accelerator-count가 4인 노드는 각각 하나의 GPU를 요청하는 최대 4개의 포드를 수용할 수 있습니다.

단일 GPU 노드에 여러 포드를 배치하면 다음과 같은 상황에 유용합니다.

  • 대형 가속기 머신 유형에 대한 용량 예약이 있으며 단일 GPU 워크로드를 실행하므로 노드당 하나의 포드를 배포하면 해당 머신의 다른 GPU가 낭비됩니다.
  • 동일한 호스트에서 실행해야 하는 GPU 워크로드가 있습니다.

이러한 경우에는 노드의 포드 GPU 리소스 요청 합계가 노드에 연결된 GPU 수와 동일한지 확인하여 노드에서 모든 GPU를 사용하는 것이 좋습니다.

컨테이너의 GPU 요청

컨테이너의 GPU 리소스를 요청하려면 포드 사양에 다음 필드를 추가합니다. 워크로드 요구사항에 따라 선택적으로 cloud.google.com/compute-class: "Accelerator"cloud.google.com/gke-accelerator-count 필드를 생략할 수 있습니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  nodeSelector:
    cloud.google.com/compute-class: "Accelerator"
    cloud.google.com/gke-accelerator: GPU_TYPE
    cloud.google.com/gke-accelerator-count: GPU_COUNT
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: GPU_QUANTITY

다음을 바꿉니다.

  • GPU_TYPE: GPU 하드웨어의 유형. 허용되는 값은 다음과 같습니다.
    • nvidia-h100-80gb: NVIDIA H100(80GB)(가속기 컴퓨팅 클래스에서만 사용 가능)
    • nvidia-a100-80gb: NVIDIA A100(80GB)
    • nvidia-tesla-a100: NVIDIA A100(40GB)
    • nvidia-l4: NVIDIA L4
    • nvidia-tesla-t4: NVIDIA T4
  • GPU_COUNT: 노드에 연결할 수 있는 총 GPU 수입니다. GPU_QUANTITY와 선택한 GPU 유형에 지원되는 GPU 수량보다 크거나 같아야 합니다. 이 nodeSelector를 생략하면 Autopilot이 각 GPU 노드에 하나의 포드를 배치합니다.
  • GPU_QUANTITY: 컨테이너에 할당할 GPU 수입니다. GPU_COUNT와 선택한 GPU 유형에 지원되는 GPU 수량보다 작거나 같아야 합니다.

포드 사양에 GPU 유형 및 GPU 수량을 모두 지정해야 합니다. 이러한 값을 생략하면 Autopilot이 포드를 거부합니다.

이 매니페스트를 배포하면 Autopilot에서 노드 GKE 버전의 기본 NVIDIA 드라이버를 자동으로 설치합니다. 버전 1.29.2-gke.1108000 이상에서는 선택적으로 매니페스트에 다음 노드 선택기를 추가하여 해당 GKE 버전의 최신 드라이버 버전을 설치할 수 있습니다.

spec:
  nodeSelector:
    cloud.google.com/gke-gpu-driver-version: "DRIVER_VERSION"

DRIVER_VERSION를 다음 값 중 하나로 바꿉니다.

  • default - 노드 GKE 버전의 기본 정식 드라이버입니다. 매니페스트에서 nodeSelector를 생략하는 경우 기본 옵션입니다.
  • latest - 노드 GKE 버전에 사용 가능한 최신 드라이버 버전입니다.

Autopilot GPU 포드의 CPU 및 메모리 요청

GPU 포드를 정의할 때는 또한 컨테이너가 예상대로 수행되기 위해 CPU 및 메모리 리소스를 요청해야 합니다. Autopilot은 GPU 유형 및 수량에 따라 특정 CPU 및 메모리 최솟값, 최댓값, 기본값을 적용합니다. 단일 노드에서 여러 GPU 포드를 실행하는 경우 CPU와 메모리를 지정합니다. 그렇지 않으면 노드의 전체 용량이 기본값으로 설정됩니다. 자세한 내용은 Autopilot의 리소스 요청을 참조하세요.

포드 사양은 4개의 T4 GPU를 요청하는 다음 예시와 비슷하게 표시됩니다.

apiVersion: v1
kind: Pod
metadata:
  name: t4-pod
spec:
  nodeSelector:
    cloud.google.com/compute-class: "Accelerator"
    cloud.google.com/gke-accelerator: "nvidia-tesla-t4"
  containers:
  - name: t4-container-1
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: 3
        cpu: "54"
        memory: "54Gi"
      requests:
        cpu: "54"
        memory: "54Gi"
  - name: t4-container-2
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      limits:
        nvidia.com/gpu: 1
        cpu: "18"
        memory: "18Gi"
      requests:
        cpu: "18"
        memory: "18Gi"

이 매니페스트는 CPU 및 메모리 리소스에 limits를 지정합니다. GKE 버전 1.29.2-gke.1060000 이상에서 CPU 또는 메모리에 대한 limits를 생략하면 GKE는 포드에 Burstable QoS 클래스를 제공하고 포드가 노드의 리소스 요청 합계에서 사용되지 않는 리소스로 버스팅할 수 있도록 합니다. 자세한 내용은 GKE에서 포드 버스팅 구성을 참조하세요.

Autopilot GPU 포드의 임시 스토리지 요청

단기 스토리지가 필요한 포드에 임시 스토리지를 요청할 수 있습니다. 사용 가능한 최대 임시 스토리지 및 사용되는 스토리지 하드웨어 유형은 GPU 및 포드 요청의 유형과 수량에 따라 달라집니다. NVIDIA L4 GPU, Accelerator 컴퓨팅 클래스를 사용하고 GKE 패치 버전 1.28.6-gke.1369000 이상 또는 1.29.1-gke.1575000 이상을 실행하는 경우 임시 스토리지에 로컬 SSD를 사용할 수 있습니다.

임시 스토리지에 로컬 SSD를 사용하려면 워크로드 매니페스트에 대해 cloud.google.com/gke-ephemeral-storage-local-ssd: "true" nodeSelector를 추가합니다. Autopilot 클러스터에 로컬 SSD 기반 임시 스토리지 사용의 매니페스트 예시를 참조하세요. NVIDIA H100(80GB) GPU 및 NVIDIA A100(80GB) GPU는 임시 스토리지로 항상 SSD를 사용하며, 사용자가 해당 GPU에 대해 이 노드 선택기를 지정할 수 없습니다.

GPU 할당 확인

배포된 GPU 워크로드에 요청된 GPU가 있는지 확인하려면 다음 명령어를 실행합니다.

kubectl describe node NODE_NAME

NODE_NAME을 포드가 예약된 노드 이름으로 바꿉니다.

출력은 다음과 비슷합니다.


apiVersion: v1
kind: Node
metadata:
...
  labels:
    ...
    cloud.google.com/gke-accelerator: nvidia-tesla-t4
    cloud.google.com/gke-accelerator-count: "1"
    cloud.google.com/machine-family: custom-48
    ...
...

GPU 드라이버 버전 확인

Autopilot 클러스터에서 GKE는 모든 GPU 노드에 NVIDIA 기기 드라이버를 자동으로 설치합니다. GKE가 클러스터에 설치한 드라이버 버전을 찾으려면 다음 명령어를 실행합니다.

kubectl logs --label=k8s-app=nvidia-gpu-device-plugin \
    --container="nvidia-gpu-device-plugin" \
    --tail=-1 \
    --namespace=kube-system | grep Driver

출력은 다음과 비슷합니다.

I1206 18:37:08.251742    5851 metrics.go:144] nvml initialized successfully. Driver version: 535.104.12

Autopilot에서 GPU 할당 작동 방법

포드의 컨테이너에 대해 GPU 유형 및 수량을 요청하고 포드를 배포하면 다음이 수행됩니다.

  1. 할당 가능한 GPU 노드가 존재하지 않으므로 Autopilot이 새 GPU 노드를 프로비저닝하여 포드를 예약합니다. Autopilot은 하드웨어를 사용하도록 NVIDIA 드라이버를 자동으로 설치합니다.
  2. Autopilot이 GPU 노드에 노드 taint를 추가하고 포드에 해당 톨러레이션(toleration)을 추가합니다. 이렇게 하면 GKE가 GPU 노드에서 다른 포드를 예약하지 않도록 방지됩니다.

Autopilot은 각 GPU 노드에 정확히 하나의 GPU 포드를 배치하고 모든 노드에서 실행되는 GKE 관리형 워크로드와 모든 노드 taint를 허용하도록 구성한 DaemonSet를 배치합니다.

모든 노드에서 DaemonSet 실행

taint가 적용된 노드를 포함하여 모든 노드에서 DaemonSet를 실행해야 할 수 있습니다. 예를 들어 일부 로깅 및 모니터링 에이전트는 클러스터의 모든 노드에서 실행되어야 합니다. GKE가 모든 노드에 워크로드를 배치할 수 있도록 노드 taint를 무시하도록 DaemonSet를 구성할 수 있습니다.

GPU 노드를 포함하여 클러스터의 모든 노드에서 DaemonSet를 실행하려면 사양에 다음 톨러레이션(toleration)을 추가합니다.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: logging-agent
spec:
  tolerations:
  - key: ""
    operator: "Exists"
    effect: ""
  containers:
  - name: logging-agent-v1
    image: IMAGE_PATH

클러스터의 특정 GPU 노드에서 DaemonSet를 실행하려면 사양에 다음을 추가합니다.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: logging-agent
spec:
  nodeSelector:
    cloud.google.com/gke-accelerator: "GPU_TYPE"
  tolerations:
  - key: ""
    operator: "Exists"
    effect: ""
  containers:
  - name: logging-agent-v1
    image: IMAGE_PATH

GPU_TYPE을 대상 노드의 GPU 유형으로 바꿉니다. 다음 중 하나일 수 있습니다.

  • nvidia-h100-80gb: NVIDIA H100(80GB)(가속기 컴퓨팅 클래스에서만 사용 가능)
  • nvidia-a100-80gb: NVIDIA A100(80GB)
  • nvidia-tesla-a100: NVIDIA A100(40GB)
  • nvidia-l4: NVIDIA L4
  • nvidia-tesla-t4: NVIDIA T4

Autopilot의 GPU 사용 사례

다음과 같이 워크로드를 사용하도록 Autopilot 포드의 컨테이너에 GPU를 할당할 수 있습니다.

  • 머신러닝(ML) 추론
  • ML 학습
  • 렌더링

지원되는 GPU 수량

포드 사양에서 GPU를 요청할 때는 GPU 유형에 따라 다음 수량을 사용해야 합니다.

GPU 수량
NVIDIA L4
nvidia-l4
1, 2, 4, 8
NVIDIA T4
nvidia-tesla-t4
1, 2, 4
NVIDIA A100(40GB)
nvidia-tesla-a100
1, 2, 4, 8, 16
NVIDIA A100(80GB)
nvidia-a100-80gb
1, 2, 4, 8
NVIDIA H100(80GB)
nvidia-h100-80gb
8

해당 유형에 지원되지 않는 GPU 수량을 요청하면 Autopilot이 포드를 거부합니다.

GPU 노드 모니터링

GKE 클러스터에 시스템 측정항목이 사용 설정된 경우 GPU 워크로드 성능을 모니터링하도록 Cloud Monitoring에서 다음 측정항목을 제공합니다.

  • 가동 주기(container/accelerator/duty_cycle): 이전 샘플 기간(10초) 중에 가속기가 실제로 처리를 수행한 시간의 백분율입니다. 1~100 사이입니다.
  • 메모리 사용량(container/accelerator/memory_used): 할당된 가속기 메모리 양(바이트)입니다.
  • 메모리 용량(container/accelerator/memory_total): 총 가속기 메모리 용량(바이트)입니다.

사전 정의된 대시보드를 사용해서 GPU 노드가 있는 클러스터를 모니터링할 수 있습니다. 자세한 내용은 관측 가능성 측정항목 보기를 참조하세요. 클러스터 및 리소스 모니터링에 대한 일반적인 내용은 GKE의 관측 가능성을 참조하세요.

워크로드의 사용량 측정항목 보기

Google Cloud 콘솔의 워크로드 대시보드에서 워크로드 GPU 사용량 측정항목을 봅니다.

워크로드 GPU 사용량을 보려면 다음 단계를 수행합니다.

  1. Google Cloud 콘솔에서 워크로드 페이지로 이동합니다.

    워크로드로 이동
  2. 워크로드를 선택합니다.

워크로드 대시보드에는 GPU 메모리 사용량 및 용량, GPU 사용 주기에 대한 차트가 표시됩니다.

다음 단계