Autopilot에서 GPU 워크로드 배포


이 페이지에서는 Google Kubernetes Engine(GKE) Autopilot 워크로드에 하드웨어 가속기(GPU)의 다양한 유형과 수량을 요청하고 성능을 모니터링하는 방법을 보여줍니다.

포드에서 가속기 선택 정보

Autopilot은 특수 가속기 컴퓨팅 클래스를 사용하여 GPU 포드를 실행합니다. 이 컴퓨팅 클래스를 사용하면 GKE에서 GPU 노드에 포드를 배치하므로 포드에서 가상 머신(VM)의 고급 기능에 액세스할 수 있습니다. GPU 워크로드에서 이 클래스를 사용하려면 GKE 버전에 따라 다음 작업 중 하나를 실행합니다.

  • 버전 1.29.4-gke.1427000 이상: 워크로드 매니페스트에서 GPU를 요청합니다. 시간 공유와 같은 GPU 공유 기능을 사용할 수도 있습니다. GKE는 가속기 클래스에 대한 노드 선택기 또는 주석을 추가하기 위해 워크로드 매니페스트를 수정하지 않습니다.
  • 버전 1.29~1.29.4-gke.142700(해당 버전 제외): 포드 매니페스트에서 cloud.google.com/compute-class: Accelerator 노드 선택기를 지정하고 GPU를 요청합니다. 이 노드 선택기를 지정하면 시간 공유와 같은 GPU 공유 기능도 사용할 수 있습니다.
  • 버전 1.28.9-gke.1069000부터(버전 1.29 제외): 포드 매니페스트에서 GPU 선택자와 함께 cloud.google.com/compute-class: Accelerator 노드 선택자를 지정합니다. 이 노드 선택기를 지정하면 시간 공유와 같은 GPU 공유 기능도 사용할 수 있습니다.

1.28.9-gke.1069000 이전 버전에서는 가속기 컴퓨팅 클래스가 지원되지 않습니다. 대신 해당 버전의 GPU 포드는 다른 Autopilot 포드와 비슷하게 취급되며 리소스 요청에 따라 요금이 청구됩니다. 자세한 내용은 가격 책정을 참조하세요.

GKE 기능과의 호환성

다음 표에서는 GKE Autopilot에서 가속기를 선택하는 각 방법에 대해 호환되는 GKE 기능을 보여줍니다.

Accelerator 컴퓨팅 클래스 선택 GKE 기능과의 호환성

가격 책정

다음 표에서는 클러스터의 GKE 버전에 따라 GKE에서 사용하는 청구 모델이 어떻게 달라지는지 설명합니다. GKE Autopilot 청구 모델에 대한 설명은 Autopilot 가격 책정을 참조하세요.

GKE 버전 가격 책정
1.29.4-gke.1427000 이상

노드 기반 청구 모델. 모든 GPU 포드는 가속기 컴퓨팅 클래스를 사용합니다. GPU 워크로드를 실행하는 Compute Engine 하드웨어와 노드 관리 및 확장성을 위한 Autopilot 프리미엄에 대한 요금이 청구됩니다. 자세한 내용은 Autopilot 모드 가격 책정을 참고하세요.

버전 1.29부터(버전 1.29.4-gke.1427000 제외)

청구 모델은 다음과 같이 지정하는 노드 선택기에 따라 달라집니다.

  • cloud.google.com/compute-class: Accelerator: 노드 기반 청구 모델 및 가속기 컴퓨팅 클래스를 사용합니다.
  • 컴퓨팅 클래스 선택기가 없음: 포드 기반 결제 모델을 사용합니다.
  • cloud.google.com/compute-class: Accelerator 노드 선택기를 명시적으로 지정하는 경우에만 멀티 인스턴스 GPU 또는 시간 공유와 같은 기능을 사용할 수 있습니다.

    자세한 내용은 Kubernetes Engine 가격 책정의 '특정 하드웨어 요구사항이 있는 포드' 섹션을 참고하세요.

버전 1.28.6-gke.1095000부터(버전 1.29 제외)

포드 매니페스트에서 가속기 컴퓨팅 클래스를 지정했는지 여부와 관계없이 노드 기반 결제 모델

cloud.google.com/compute-class: Accelerator 노드 선택기를 명시적으로 지정하는 경우에만 멀티 인스턴스 GPU 또는 시간 공유와 같은 기능을 사용할 수 있습니다.

자세한 내용은 Kubernetes Engine 가격 책정의 '특정 하드웨어 요구사항이 있는 포드' 섹션을 참고하세요.

1.28.6-gke.1095000 이전 버전

포드 기반 청구 모델. GPU 포드 리소스 요청에 따라 요금이 청구됩니다. 자세한 내용은 Kubernetes Engine 가격 책정의 '특정 하드웨어 요구사항이 있는 포드' 섹션을 참고하세요.

시작하기 전에

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

  • 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 할당량이 충분한지 확인합니다. 각 리전에서 만들려는 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/gke-accelerator-count 선택기를 생략할 수 있습니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  nodeSelector:
    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 수량보다 작거나 같아야 합니다.

Autopilot 모드에서 가속기 사용에 대한 요금이 청구되는 방식에 관한 자세한 내용은 가격 책정 섹션을 참고하세요.

포드 사양에 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/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, 가속기 컴퓨팅 클래스를 사용하고 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 --selector=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 사용 주기에 대한 차트가 표시됩니다.

NVIDIA Data Center GPU Manager(DCGM) 측정항목 보기

Google Cloud Managed Service for Prometheus를 사용하여 NVIDIA DCGM 측정항목을 수집하고 시각화할 수 있습니다. Autopilot 클러스터의 경우 GKE가 드라이버를 설치합니다. Standard 클러스터의 경우 NVIDIA 드라이버를 설치해야 합니다.

GKE 관리 DCGM 패키지를 배포하는 방법에 대한 안내는 NVIDIA Data Center GPU Manager(DCGM) 측정항목 수집 및 보기를 참조하세요.

다음 단계