Kubernetes Engine 클러스터에 NVIDIA GPU 워크노드 사용
Kubernetes Engine(IKE)를 이용해 생성한 쿠버네티스 클러스터에서 GPU 노드를 생성하고, 워크로드에 GPU를 사용하는 두 가지 방법을 설명합니다.
- 예상 소요 시간: 15분
- 권장 운영 체제: MacOS, Ubuntu
- Region: kr-central-2
- 사전 준비 사항 - Kubernetes Engine으로 쿠버네티스 클러스터 구축
사전 작업
Kubernetes 패키지 관리를 도와주는 패키지 매니저인 Helm을 설치합니다. Helm을 통해 Kubernetes용 소프트웨어를 검색하거나 공유하고 사용할 수 있습니다. 사용자의 로컬 머신에 아래와 같은 명령어를 입력하여 Helm 패키지를 설치합니다.
- Mac
- Linux(Ubuntu)
-
Homebrew 패키지 매니저를 이용하여 설치합니다.
brew install helm
-
설치가 정상적으로 되었는지 아래 명령어를 통해 확인합니다.
helm version
# version.BuildInfo{Version:"v3.14.0", GitCommit:"3fc9f4b2638e76f26739cd77c7017139be81d0ea", GitTreeState:"clean", GoVersion:"go1.21.6"}
-
curl
명령어를 이용하여 설치합니다.curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh -
설치가 정상적으로 되었는지 아래 명령어를 통해 확인합니다.
helm version
# version.BuildInfo{Version:"v3.14.0", GitCommit:"3fc9f4b2638e76f26739cd77c7017139be81d0ea", GitTreeState:"clean", GoVersion:"go1.21.6"}
Type 1. Nvidia GPU 워크노드 구축
Type 1에서는 쿠버네티스 클러스터에 Nvidia GPU 워크노드 구축하는 방법을 설명합니다.
Step 1. 쿠버네티스 클러스터에 Nvidia GPU 노드 풀 생성하기
이 문서는 쿠버네티스 클러스터를 생성하는 방법을 다루지 않습니다. 새로운 클러스터를 생성하거나 기존에 존재하는 클러스터에 GPU 노드풀을 생성합니다. 카카오클라우드 콘솔에서 쿠버네티스 노드 풀을 생성하는 방법은 다음과 같습니다.
-
카카오클라우드 콘솔에 접속합니다.
-
Kubernetes Engine > 클러스터 목록에서 작업을 진행할 클러스터 혹은 [클러스터 만들기] 버튼을 클릭합니다.
-
노드 풀을 생성할 클러스터를 클릭한 경우, 클러스터의 상세 페이지의 노드 풀 탭에서 [노드 풀 만들기] 버튼을 누른 후, 노드 풀 정보를 입력하고 노드 풀을 생성합니다.
-
[클러스터 만들기] 버튼을 클릭한 경우, 클러스터 만들기의 단계별로 정보를 입력합니다. 2단계: 노드 풀 설정에서 다음을 참고해 노드 풀 정보를 입력하고 클러스터를 생성합니다.
노드 풀 타입 Instance 타입 노드 수 Volume(GB) GPU p2i.6xlarge 1 100
-
-
GPU 노드를 생성할 시, 단일 GPU 인스턴스로 생성되도록 사용자 스크립트에 해당 코드를 작성합니다.
sudo nvidia-smi -mig 0
Step 2. Nvidia GPU 워크노드 환경 구성하기
nvidia-k8se-device-plugin은 클러스터 내 GPU를 자동으로 노출하고 관리, 실행 등에 필요한 기능을 제공합니다. 노드 풀을 통해 GPU 워크노드를 생성하면, GPU 자원을 사용하기 위해 필요한 Driver, Container Runtime 등의 환경 구축을 기본으로 제공합니다.
-
GPU를 쿠버네티스 클러스터에 노출하기 위해 Helm을 이용하여 nvidia-k8s-device-plugin을 구성요소에 추가합니다.
helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
helm repo update
helm install \
--version=0.12.3 \
--namespace nvidia-device-plugin \
--create-namespace \
--generate-name \
nvdp/nvidia-device-plugin -
nvidia-k8s-device-plugin이 클러스터에 추가되었는지 확인합니다.
kubectl get all -A | grep nvidia
# kube-system pod/nvidia-device-plugin-daemonset-dpp4b 1/1 Running 0 64m
# kube-system pod/nvidia-device-plugin-daemonset-qprc7 1/1 Running 0 64m
# kube-system daemonset.apps/nvidia-device-plugin-daemonset 2 2 2 2 2 <none> 64m