Autopilot에서 GPU 워크로드 배포

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

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

가격 책정

Autopilot에서 제공되는 GPU 하드웨어에 대한 가격 책정 정보는 GKE 가격 책정 페이지를 참조하세요. Spot 포드에서 GPU를 요청할 수 있습니다.

일반 Autopilot 포드의 GPU는 약정 사용 할인(CUD)을 받을 수 있습니다.

시작하기 전에

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

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다.

제한사항

  • 시간 공유 GPU멀티 인스턴스 GPU는 Autopilot에 사용할 수 없습니다.
  • GPU 가용성은 Autopilot 클러스터의 Google Cloud 리전 및 GPU 할당량에 따라 달라집니다.
  • 포드에 대해 특정 기존 GPU 노드를 명시적으로 요청할 경우 포드가 노드의 모든 GPU 리소스를 사용해야 합니다. 예를 들어 기존 노드에 8개 GPU가 있고 포드의 컨테이너가 총 4개 GPU를 요청하면 Autopilot가 포드를 거부합니다.

컨테이너의 GPU 요청

컨테이너의 GPU 리소스를 요청하려면 포드 사양에 다음 필드를 추가합니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  nodeSelector:
    cloud.google.com/gke-accelerator: GPU_TYPE
  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-tesla-t4
    • nvidia-tesla-a100
  • GPU_QUANTITY: 컨테이너에 할당할 GPU 수입니다. 선택한 GPU 유형에 대해 지원되는 GPU 수량이어야 합니다.

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

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

GPU 포드를 정의할 때는 또한 컨테이너가 예상대로 수행되기 위해 CPU 및 메모리 리소스를 요청해야 합니다. Autopilot은 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
      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
      requests:
        cpu: "18"
        memory: "18Gi"

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
    ...
...

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-tesla-t4 또는 nvidia-tesla-a100일 수 있습니다.

Autopilot의 GPU 사용 사례

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

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

지원되는 GPU 수량

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

GPU 수량
NVIDIA T4
nvidia-tesla-t4
1, 2, 4
NVIDIA A100
nvidia-tesla-a100
1, 2, 4, 8, 16

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

GPU 노드 모니터링

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

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

클러스터 및 해당 리소스 모니터링에 대한 자세한 내용은 모니터링을 참조하세요.

사용량 측정항목 보기

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

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

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

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

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

다음 단계