GPU Operator를 Helm Chart로 구축하기 – (NVIDIA 드라이버 사전 설치 포함)

2–3분

최근 AI와 머신 러닝의 인기가 높아지면서 GPU를 사용하는 워크로드가 증가하고 있습니다. Kubernetes 환경에서 GPU를 효율적으로 관리하고 활용하기 위해 NVIDIA GPU Operator를 사용합니다. 이 블로그에서는 GPU Operator를 Helm Chart를 사용해 Kubernetes 클러스터에 배포하는 방법을 단계 별로 설명합니다. 특히, NVIDIA 드라이버를 사전 설치하는 방법에 대해 다룹니다.

사전 준비

먼저 GPU Operator를 설치하기 전에 필요한 몇 가지 사전 작업이 있습니다

  1. Kubernetes 클러스터: GPU Operator를 설치하려면 Kubernetes 클러스터가 필요합니다. 이미 클러스터가 구축되어 있어야 합니다.
  2. Helm 설치: Helm은 Kubernetes의 패키지 매니저로, Helm Chart를 사용하여 애플리케이션을 쉽게 배포할 수 있습니다.
  3. NVIDIA 드라이버 설치: GPU가 있는 노드에 NVIDIA 드라이버가 설치되어 있어야 합니다.

사전 환경

  • OS: rocky 9.4
  • kernel version: 5.14.0-427.18.1
  • nvidia-driver-version: 535.161.07
  • k8s version: 1.27.14

NVIDIA 드라이버 설치

NVIDIA 드라이버를 사전 설치하려면 각 GPU 노드에서 다음 스크립트를 실행합니다:

  • 드라이버커널의 호환성의 영향이 있으므로 여러가지 방면으로 테스트 해봐야 한다.
  • 설치는 되더라도 nvidia 드라이버 특정 모듈이 동작 안 하는 경우도 있으니 잘 파악하여 진행해야 한다.
bash코드 복사
export BASE_URL=https://us.download.nvidia.com/tesla
export DRIVER_VERSION=535.161.07

curl -fSsl -O $BASE_URL/$DRIVER_VERSION/NVIDIA-Linux-x86_64-$DRIVER_VERSION.run && \
sh NVIDIA-Linux-x86_64-$DRIVER_VERSION.run -x && \
cd NVIDIA-Linux-x86_64-$DRIVER_VERSION && \
./nvidia-installer --silent \
                   --install-compat32-libs \
                   --no-nouveau-check \
                   --no-nvidia-modprobe \
                   --no-rpms \
                   --no-backup \
                   --no-check-for-alternate-installs \
                   --no-libglx-indirect \
                   --no-install-libglvnd \
                   --x-prefix=/tmp/null \
                   --x-module-path=/tmp/null \
                   --x-library-path=/tmp/null \
                   --x-sysconfig-path=/tmp/null

위 스크립트는 NVIDIA 드라이버를 다운로드하고 설치하는 명령어입니다. 각 노드에서 이 스크립트를 실행하여 드라이버를 설치합니다.

Helm 설치

Helm이 설치되어 있지 않다면, 다음 명령어를 사용해 Helm을 설치할 수 있습니다:

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

설치가 완료되면 helm version 명령어를 사용해 설치된 버전을 확인합니다.

NVIDIA Helm Repository 추가

NVIDIA의 Helm Chart를 사용하기 위해 NVIDIA의 Helm repository를 추가해야 합니다.

helm repo add nvidia https://nvidia.github.io/gpu-operator
helm repo update

GPU Operator 배포

이제 GPU Operator를 Kubernetes 클러스터에 배포할 수 있습니다. 다음 명령어를 사용합니다:

helm install gpu-operator nvidia/gpu-operator \
-n gpu-operator \
--create-namespace \
--set driver.enabled=false

위 명령어는 GPU Operator를 설치하며, 기본 런타임을 containerd로 설정합니다. 필요에 따라 다른 옵션을 추가할 수 있습니다.

설치 확인

GPU Operator가 제대로 설치되었는지 확인하려면 다음 명령어를 사용해 확인할 수 있습니다:

kubectl get pods -n gpu-operator-resources

모든 Pod가 정상적으로 실행되고 있는지 확인합니다.

GPU 리소스 확인

GPU가 클러스터에서 올바르게 인식되고 있는지 확인하려면 다음 명령어를 사용합니다:

kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"

여기에서 각 노드에 할당된 GPU 리소스를 확인할 수 있습니다.

샘플 워크로드 실행

GPU Operator가 정상적으로 동작하는지 확인하기 위해 샘플 워크로드를 실행해 봅니다. 다음은 TensorFlow를 사용한 간단한 샘플입니다:

apiVersion: v1
kind: Pod
metadata:
  name: tensorflow-gpu
spec:
  containers:
  - name: tensorflow
    image: tensorflow/tensorflow:latest-gpu
    resources:
      limits:
        nvidia.com/gpu: 1
  restartPolicy: OnFailure

위 YAML 파일을 tensorflow-gpu-pod.yaml로 저장하고 다음 명령어를 사용해 실행합니다:

kubectl apply -f tensorflow-gpu-pod.yaml

Pod가 성공적으로 실행되는지 확인합니다.

마무리

이 블로그에서는 Helm Chart를 사용하여 NVIDIA GPU Operator를 Kubernetes 클러스터에 배포하는 방법을 설명했습니다. 특히, NVIDIA 드라이버를 사전 설치하는 방법을 포함하여 설명하였습니다 이 경우는 인터넷이 안되는 경우 드라이버 자동 빌드를 하지 못할 수 도 있기 때문에 이런 방법도 있다는 것을 추가하여 알려드렸습니다.

다음에는 k8s 또는 gpu에 관련된 내용으로 찾아오도록 하겠습니다.

감사합니다!