GPU

이 페이지에서는 Google Kubernetes Engine 클러스터의 노드에서 NVIDIA® GPU(그래픽 처리 장치) 하드웨어 가속기를 사용하는 방법을 보여줍니다.

개요

GKE에서는 NVIDIA Tesla® V100, P4, P100, K80 GPU가 장착된 노드 풀을 만들 수 있습니다. 클러스터에서 GPU를 실행하면 딥 러닝(이미지 인식, 자연어 처리 등), 동영상 트랜스코딩, 이미지 처리 등과 같은 컴퓨팅 집약적인 작업을 가속화할 수 있습니다.

작업 부하가 잦은 노드 중단을 견딜 수 있는 경우에는 선점형 VM에서도 GPU를 사용할 수 있습니다. 선점형 VM을 사용하면 GPU 실행 비용이 줄어듭니다. 자세한 내용은 선점형 인스턴스의 GPU를 참조하세요.

요구사항

GKE에서 GPU를 사용하기 위한 요구사항은 다음과 같습니다.

Kubernetes 버전
Container-Optimized OS 노드 이미지를 사용하는 노드 풀의 경우, GKE 버전 1.9 이상에서 GPU 노드를 사용할 수 있습니다. Ubuntu 노드 이미지를 사용하는 노드 풀의 경우, GKE 버전 1.11.3 이상에서 GPU 노드를 사용할 수 있습니다.
GPU 할당량

GPU 노드를 만들 수 있으려면 먼저 원하는 영역에 Compute Engine GPU 할당량이 있어야 합니다. 프로젝트에서 GPU 할당량이 충분한지 확인하려면 Google Cloud Platform 콘솔에서 할당량을 참조하세요.

추가 GPU 할당량이 필요하면 GCP 콘솔에서 GPU 할당량을 요청해야 합니다. 청구 계정을 설정한 경우에는 할당량 요청을 제출한 후 프로젝트에 할당량이 자동으로 배정됩니다.

NVIDIA GPU 드라이버

노드에 NVIDIA GPU 드라이버를 수동으로 설치해야 합니다. 이 페이지에서는 드라이버 설치 방법을 설명합니다.

제한사항

GKE에서 GPU를 사용하려면 먼저 다음 제한사항에 유의해야 합니다.

  • 기존 노드 풀에 GPU를 추가할 수 없습니다.
  • GPU 노드는 유지관리 이벤트 중 실시간 이전할 수 없습니다.

가용성

GPU는 특정 지역 및 영역에서 제공됩니다. GPU 할당량을 요청할 때는 클러스터를 실행하려는 영역을 고려하세요.

적용 가능한 지역 및 영역의 전체 목록은 [Compute Engine의 GPU]를 참조하세요.

또한 gcloud 명령줄 도구를 사용하여 영역에서 사용 가능한 GPU를 볼 수 있습니다.

gcloud

각 영역에서 지원되는 모든 GPU 가속기 유형의 목록을 보려면 다음 명령어를 실행하세요.

gcloud compute accelerator-types list

가격 책정

GPU 가격 정보는 GCP GPU 페이지의 가격표를 참조하세요.

GPU 할당량

GPU 할당량은 GCP 프로젝트에서 실행할 수 있는 총 GPU 수입니다. GPU가 포함된 클러스터를 만들려면 프로젝트에 있는 GPU 할당량이 충분해야 합니다.

GPU 할당량은 클러스터에서 실행하려는 전체 GPU 수와 동일해야 합니다. 클러스터 자동 확장을 사용 설정할 경우, 노드당 GPU 수만큼 곱해진 최대 클러스터 노드 수와 최소한 동일 개수 이상의 GPU 할당량을 요청해야 합니다.

예를 들어 노드당 2개의 GPU를 실행하는 노드가 3개 포함된 클러스터를 만들 경우, 프로젝트에는 최소한 6개의 GPU 할당량이 필요합니다.

GPU 할당량 요청

GCP 콘솔을 사용하여 GPU 할당량을 요청합니다.

콘솔

다음 단계를 수행하세요.

  1. GCP 콘솔에서 Cloud IAM 할당량 메뉴로 이동합니다.

    할당량 메뉴로 이동

  2. 측정항목 드롭다운 메뉴에서 없음을 클릭한 후 검색 필드에 'gpus'를 입력합니다.

  3. 검색 결과에서 원하는 GPU를 선택합니다.

    선택된 GPU 측정항목을 보여주는 측정항목 드롭다운 메뉴의 스크린샷입니다.

  4. 측정항목 드롭다운 메뉴를 닫습니다.

할당량 요청 제출

콘솔

다음 단계를 수행하세요.

  1. GPU 할당량 목록에서 원하는 지역의 할당량을 선택합니다(예: us-central1).
  2. 할당량 수정을 클릭합니다. 요청 양식이 GCP 콘솔의 오른쪽에 열립니다.
  3. 각 할당량 요청의 새 할당량 한도 필드를 채웁니다.
  4. 요청 세부정보를 요청 설명 필드에 입력합니다.
  5. 완료를 클릭합니다.
  6. 요청 제출을 클릭합니다.

GPU 실행

다음 섹션에서는 GKE 클러스터에서 GPU를 실행하는 방법을 설명합니다.

자동 확장 GPU 노드 풀 만들기

GKE에서 GPU를 가장 비용 효율적인 방식으로 활용하고, 클러스터 자동 확장을 활용하기 위해서는 클러스터에서 개별적으로 GPU 노드 풀을 만드는 것이 좋습니다.

이미 GPU가 아닌 노드 풀을 실행하는 기존 클러스터에 GPU 노드 풀을 추가하면 GKE가 다음 노드 taint를 사용해서 GPU 노드를 자동으로 taint합니다.

  • 키: nvidia.com/gpu
  • 효과: NoSchedule

또한 GKE는 ExtendedResourceToleration 수락 컨트롤러를 실행하여 GPU를 요청하는 포드에 해당하는 내결함성을 자동으로 적용합니다.

그러면 GPU를 요청하는 포드만 GPU 노드에 예약되고, 더 효율적인 자동 확장이 가능해집니다. GPU를 요청하는 포드가 충분하지 않으면 GPU 노드가 빠르게 축소될 수 있습니다.

GCP 콘솔 또는 gcloud 명령줄 도구를 사용해서 기존 클러스터에서 GPU 노드 풀을 만듭니다.

gcloud

GPU가 포함된 노드 풀을 만들려면 다음 명령어를 실행하세요.

gcloud container node-pools create [POOL_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] --zone [COMPUTE_ZONE] \
--cluster [CLUSTER_NAME] [--num-nodes 3 --min-nodes 0 --max-nodes 5 \
--enable-autoscaling]

각 항목의 의미는 다음과 같습니다.

  • [POOL_NAME]은 선택한 노드 풀 이름입니다.
  • [GPU_TYPE]은 GPU 유형(nvidia-tesla-v100, nvidia-tesla-p100 또는 nvidia-tesla-k80)입니다.
  • [AMOUNT]는 노드 풀에 있는 노드에 연결할 GPU 수입니다.
  • [COMPUTE_ZONE]은 노드 풀을 만들려는 컴퓨팅 영역입니다(예: us-central1-c). 클러스터는 지정된 영역에서 이미 실행되고 있어야 합니다.
  • [CLUSTER_NAME]은 노드 풀을 만들 클러스터의 이름입니다.
  • --num-nodes는 생성할 초기 노드 수를 지정합니다.
  • --min-nodes는 특정 시점에서의 최소 실행 노드 수입니다.
  • --max-nodes는 실행할 수 있는 최대 노드 수입니다.
  • --enable-autoscaling은 작업 부하 요구가 변경될 때 노드 풀의 자동 확장을 허용합니다.

예를 들어 다음 명령어는 p100-cluster 클러스터에 2개의 P100 GPU가 포함된 p100이라는 자동 확장 노드 풀을 만듭니다.

gcloud container node-pools create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--zone us-central1-c --cluster p100-cluster \
--num-nodes 3 --min-nodes 0 --max-nodes 5 --enable-autoscaling

콘솔

  1. GCP 콘솔에서 Google Kubernetes Engine 메뉴로 이동합니다.

    Google Kubernetes Engine 메뉴로 이동

  2. 원하는 클러스터를 선택합니다.

  3. 수정을 클릭합니다.

  4. 노드 풀 메뉴에서 노드 풀 추가를 클릭합니다.

  5. 선택적으로 자동 확장 드롭다운 메뉴에서 켜기를 선택합니다.

  6. 노드 풀을 원하는 대로 구성합니다. 그런 다음 머신 유형에서 맞춤설정을 클릭합니다.

  7. GPU 수 드롭다운 메뉴에서 노드별로 실행할 원하는 GPU 수를 선택합니다.

  8. GPU 유형 드롭다운 메뉴에서 원하는 GPU 유형을 선택합니다.

  9. 제한 사항을 이해합니다 체크박스를 선택하여 경고를 수락합니다.

  10. 저장을 클릭합니다.

GPU가 포함된 새 영역 클러스터 만들기

GCP 콘솔 또는 gcloud 명령줄 도구를 사용하여 GPU를 실행하는 영역 클러스터를 만듭니다.

gcloud

기본 노드 풀에서 실행되는 GPU가 포함된 영역 클러스터를 만들려면 다음 명령어를 실행하세요.

gcloud container clusters create [CLUSTER_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] \
--zone [COMPUTE_ZONE]

각 항목의 의미는 다음과 같습니다.

  • [CLUSTER_NAME]은 선택한 클러스터 이름입니다.
  • [GPU_TYPE]은 GPU 유형(nvidia-tesla-v100, nvidia-tesla-p100 또는 nvidia-tesla-k80)입니다.
  • [AMOUNT]는 기본 노드 풀에서 실행할 GPU 수입니다.
  • [COMPUTE_ZONE]은 클러스터의 컴퓨팅 영역입니다(예: us-central1-c).

예를 들어 다음 명령어는 노드가 3개(--num-nodes가 생략된 경우의 기본값)이고 노드당 2개의 P100 GPU가 있는 p100이라는 클러스터를 만듭니다.

gcloud container clusters create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--zone us-central1-c

콘솔

  1. GCP 콘솔에서 Google Kubernetes Engine 메뉴로 이동합니다.

    Google Kubernetes Engine 메뉴로 이동

  2. 클러스터 만들기를 클릭합니다.

  3. GPU 가속 컴퓨팅 클러스터 템플릿을 선택합니다.

  4. 원하는 대로 클러스터를 구성합니다. 그런 다음 GPU 노드 풀을 맞춤설정하거나 GPU 노드 풀을 추가합니다.

  5. 제한사항을 이해합니다를 선택하여 경고를 수락합니다.

  6. 만들기를 클릭합니다.

GPU가 포함된 새 지역 클러스터 만들기

기본적으로 지역 클러스터는 한 지역의 3개 영역에 노드를 만듭니다. 하지만 3개 영역 모두에 GPU가 포함된 GCP 지역은 없습니다. GPU가 포함된 지역 클러스터를 만들 때는 GPU를 사용할 수 있는 영역을 수동으로 지정해야 합니다. GPU가 포함되는 영역에 대해 알아보려면 가용성을 참조하세요.

gcloud 명령줄 도구를 사용하여 지역 GPU 클러스터를 만듭니다.

gcloud

GPU가 포함된 지역 클러스터를 만들려면 다음 명령어를 실행하세요.

gcloud container clusters create [CLUSTER_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] \
--region [REGION] --node-locations [ZONE],[ZONE]

각 항목의 의미는 다음과 같습니다.

  • [CLUSTER_NAME]은 선택한 클러스터 이름입니다.
  • [GPU_TYPE]은 GPU 유형인 nvidia-tesla-v100, nvidia-tesla-p100 또는 nvidia-tesla-k80입니다.
  • [AMOUNT]는 노드당 실행할 GPU 수입니다.
  • [REGION]은 클러스터의 지역입니다(예: us-central1).
  • [ZONE]은 지역 내의 컴퓨팅 영역입니다(예: us-central1-c). 영역에는 사용자가 지정하는 GPU 유형이 포함되어야 합니다.

예를 들어 다음 명령어는 노드별로 2개의 P100 GPU가 포함되며, 이러한 노드가 3개 포함된(--num-nodes가 생략된 경우의 기본값) p100이라는 클러스터를 us-central1 내에 있는 2개 영역에 만듭니다.

gcloud container clusters create p100 \
--accelerator type=nvidia-tesla-k80,count=2 \
--region us-central1 \ --node-locations us-central1-a,us-central1-c

콘솔

  1. GCP 콘솔에서 Google Kubernetes Engine 메뉴로 이동합니다.

    Google Kubernetes Engine 메뉴로 이동

  2. 클러스터 만들기를 클릭합니다.

  3. GPU 가속 컴퓨팅 클러스터 템플릿을 선택합니다.

  4. 위치 유형에서 지역을 선택합니다. 지역에서 원하는 지역을 선택합니다.

  5. 원하는 대로 클러스터를 구성합니다. 그런 다음 GPU 노드 풀을 맞춤설정하거나 GPU 노드 풀을 추가합니다.

  6. 제한사항을 이해합니다를 선택하여 경고를 수락합니다.

  7. 만들기를 클릭합니다.

NVIDIA GPU 장치 드라이버 설치

클러스터에 GPU 노드를 추가한 후에는 노드에 NVIDIA의 장치 드라이버를 설치해야 합니다. Google은 드라이버를 자동으로 설치하는 DaemonSet를 제공합니다.

컨테이너 최적화 O(COS) 및 Ubuntu 노드 설치 방법은 아래 섹션을 참조하세요.

COS

설치 DaemonSet를 배포하려면 다음 명령어를 실행하세요.

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/stable/nvidia-driver-installer/cos/daemonset-preloaded.yaml

설치를 완료하는 데 몇 분 정도 걸립니다. 설치된 후에는 NVIDIA GPU 장치 플러그인이 Kubernetes API를 통해 NVIDIA GPU 용량을 표시합니다.

Ubuntu

GPU를 지원하려면 Ubuntu 노드 v1.11.3 이상이 필요합니다.

설치 DaemonSet를 배포하려면 다음 명령어를 실행하세요.

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml

설치를 완료하는 데 몇 분 정도 걸립니다. 설치된 후에는 NVIDIA GPU 장치 플러그인이 Kubernetes API를 통해 NVIDIA GPU 용량을 표시합니다.

GPU를 사용하도록 포드 구성

리소스 제한을 사용하여 GPU를 사용하도록 포드를 구성합니다. 다음 키-값 쌍을 사용해서 포드 사양에 리소스 제한을 지정합니다.

  • 키: nvidia/gpu
  • 값: 사용할 GPU 수

아래는 GPU를 사용하는 포드 사양의 예입니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:10.0-runtime-ubuntu18.04
    resources:
      limits:
       nvidia.com/gpu: 2

여러 GPU 유형 사용

클러스터별로 여러 GPU 가속기 유형을 사용하려면 각각 고유한 가속기 유형을 사용해서 여러 노드 풀을 만들어야 합니다. GKE는 특정 GPU 유형의 노드에서 GPU 작업 부하 배치를 돕기 위해 GPU 노드에 고유한 노드 선택기를 연결합니다.

  • 키: cloud.google.com/gke-accelerator
  • 값: nvidia-tesla-k80, nvidia-tesla-p100 또는 nvidia-tesla-v100

이 노드 선택기를 작업 부하의 포드 사양에 추가하여 특정 GPU 유형을 대상으로 지정할 수 있습니다. 예를 들면 다음과 같습니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:10.0-runtime-ubuntu18.04
    resources:
      limits:
       nvidia.com/gpu: 2
  nodeSelector:
    cloud.google.com/gke-accelerator: nvidia-tesla-k80 # or nvidia-tesla-v100 or nvidia-tesla-p100

CUDA 라이브러리 정보

CUDA®는 GPU를 위한 NVIDIA의 병렬 컴퓨팅 플랫폼이자 프로그래밍 모델입니다. 클러스터에 설치하는 NVIDIA 장치 드라이버에는 CUDA 라이브러리가 포함됩니다.

CUDA 라이브러리 및 디버그 유틸리티는 각각 /usr/local/nvidia/lib64/usr/local/nvidia/bin의 컨테이너 내부에서 사용할 수 있습니다.

NVIDIA GPU를 사용하는 포드에서 실행되는 CUDA 애플리케이션은 동적으로 CUDA 라이브러리를 검색해야 합니다. 이를 위해서는 /usr/local/nvidia/lib64LD_LIBRARY_PATH 환경 변수에 포함해야 합니다.

GKE에서 CUDA 애플리케이션에 LD_LIBRARY_PATH가 이미 적절하게 설정된 Ubuntu 기반 CUDA Docker 기본 이미지를 사용해야 합니다. 지원되는 최신 CUDA 버전은 9.0입니다.

GPU 노드 모니터링

GKE는 GPU를 사용하는 컨테이너에 대해 다음과 같은 Stackdriver Monitoring 측정항목을 노출합니다. 이러한 측정항목을 사용해서 GPU 작업부하 성능을 모니터링할 수 있습니다.

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

이러한 측정항목은 Stackdriver에서 사용 가능합니다.

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

사용량 측정항목 보기

GCP 콘솔의 작업 부하 대시보드에서 작업 부하의 GPU 사용량 측정항목을 볼 수 있습니다.

콘솔

작업 부하의 GPU 사용량을 보려면 다음 단계를 수행하세요.

  1. GCP 콘솔에서 작업 부하 메뉴로 이동합니다.

    Google Kubernetes Engine 메뉴로 이동

  2. 원하는 작업 부하를 선택합니다.

작업 부하 대시보드에는 GPU 메모리 사용량 및 용량과 GPU 사용 주기에 대한 차트가 표시됩니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine