최근 AI와 머신 러닝의 인기가 높아지면서 GPU를 사용하는 워크로드가 증가하고 있습니다. Kubernetes 환경에서 GPU를 효율적으로 관리하고 활용하기 위해 NVIDIA GPU Operator를 사용합니다. 이 블로그에서는 GPU Operator를 Helm Chart를 사용해 Kubernetes 클러스터에 배포하는 방법을 단계 별로 설명합니다. 특히, NVIDIA 드라이버를 사전 설치하는 방법에 대해 다룹니다.
사전 준비
먼저 GPU Operator를 설치하기 전에 필요한 몇 가지 사전 작업이 있습니다
- Kubernetes 클러스터: GPU Operator를 설치하려면 Kubernetes 클러스터가 필요합니다. 이미 클러스터가 구축되어 있어야 합니다.
- Helm 설치: Helm은 Kubernetes의 패키지 매니저로, Helm Chart를 사용하여 애플리케이션을 쉽게 배포할 수 있습니다.
- 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에 관련된 내용으로 찾아오도록 하겠습니다.
감사합니다!