본문 바로가기

Kubernetes

kind 환경에서 GPU 사용하기

OS : Ubuntu 22.04.4 LTS

kind : version 0.24.0

nvidia graphic driver version : 550.90.07

 

 

이번에는 kind cluster 환경에서 GPU를 사용할 수 있는 환경을 구축해보겠습니다.

 

kind 설치와 환경 설정은 링크 에서 확인하시면 됩니다.

 

 

1. nvidia container toolkit 설치

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
    
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

 

 

2. 도커 설정 

 

kind는 container를 사용하기 때문에, nvidia docker runtime 설정을 해야 합니다. (docker 사용을 추천드립니다.)

sudo nvidia-ctk runtime configure --runtime=docker --set-as-default
sudo systemctl restart docker

 

 

2-2. accept-nvidia-visible-devices-as-volume-mounts = true in /etc/nvidia-container-runtime/config.toml 

 

해당 설정이 필요하다고 합니다.

sudo sed -i '/accept-nvidia-visible-devices-as-volume-mounts/c\accept-nvidia-visible-devices-as-volume-mounts = true' /etc/nvidia-container-runtime/config.toml

 

 

3. kind config file 설정 및 kind cluster 생성

 

kind 내에서 GPU를 사용할 노드에 필요한 설정을 합니다.

# kind.yaml 예시
- role: worker
  image: kindest/node:v1.31.0@sha256:53df588e04085fd41ae12de0c3fe4c72f7013bba32a20e7325357a1ac94ba865
  # GPU 사용을 위한 설정
  extraMounts:
    - hostPath: /dev/null
      containerPath: /var/run/nvidia-container-devices/all

 

 

 

4. Nvidia GPU Operator 설치

 

GPU를 쿠버네티스에서 사용하기 위해서 필요한 것들은 다음과 같습니다.

 

  • CUDA (Optional) - gpu 가속
  • nvidia container toolkit
  • nvidia graphic driver
  • nvidia device plugin

 

이것들을 수동으로 하나씩 설치하여도 됩니다. 저는 gpu-operator를 이용하여 필요한 요소들을 간단하게 설치해보겠습니다.

 

CUDA는 gpu-operator에 내장되어 있지 않기 때문에 따로 설치해 주셔야 합니다.

 

먼저, CUDA를 설치하시려면 Graphic driver가 설치되어 있어야 하는데요.

 

저같은 경우에는 우분투를 설치할 때, 써드파티 그래픽 드라이버를 설치를 함께 하였기 때문에, 그래픽 드라이버가 설치되어 있는 상태입니다.

 

nvidia-smi

 

graphic driver가 설치되어 있다면 다음과 같은 화면이 출력됩니다.

 

그래픽 드라이버가 설치되어있지 않으신 분들은 gpu-operator에 내장되어 있는 드라이버를 설치해 주시는게 좋습니다.

 

릴리즈 노트를 참고하세요.

 

CUDA 설치는 공식 아카이브에서 환경에 맞게 선택하여 설치해 주시면 됩니다.

 

주의하실 점은 nvidia-smi 명령어 출력 결과의 CUDA Version과 일치하는 버전의 CUDA toolkit을 설치해주셔야 합니다.

 

저는 12.4버전의 CUDA를 설치해 주었습니다.

 

 

설치가 완료되었다면, CUDA 설치가 잘 되었는지 확인합니다.

 

 

nvcc --version

 

 

 

만약 해당 오류가 발생하신다면 아래의 명령어를 실행하여, 파일을 수정해줍니다.

Command 'nvcc' not found

 

vi ~/.bashrc
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"

# 저장 후 다음 명령어 실행
source ~/.bashrc

 

 

여기까지 포스팅을 따라오셨다면 현재 CUDA와 그래픽 드라이버는 설치되어 있으실 겁니다.

 

이제 gpu-operator를 helm을 이용하여 설치해봅시다.

 

 

Add gpu-operator helm repo

 

# helm 설치 후에 진행합니다.
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia || true
helm repo update

 

 

gpu-operaotor 설치

 

저는 추후 모니터링을 위해 dcgm을 활성하여 설치하였습니다.

helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator --set driver.enabled=false \
--set dcgm.enabled=true

 

 

helm 설치 옵션(values 파일) 을 확인해보시려면 다음 명령어를 실행하시면 됩니다.

 

helm show values nvidia/gpu-operator

 

 

k9s를 통해 배포된 pod들을 확인해보겠습니다.

 

 

node describe를 통해 사용할 수 있는 gpu 리소스를 확인하실 수 있습니다.

가용 GPU가 1인 것을 확인하실 수 있습니다.

 

 

GPU 사용이 가능한지 확인해 보겠습니다.

gpu-test.yaml

apiVersion: v1
kind: Pod
metadata:
  name: cuda-vectoradd
spec:
  restartPolicy: OnFailure
  containers:
  - name: cuda-vectoradd
    image: "nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda11.7.1-ubuntu20.04"
    resources:
      limits:
        nvidia.com/gpu: 1

 

 

kubectl apply -f gpu-test.yaml

 

 

cuda-vectoradd pod의 컨테이너 로그를 확인해보시면 정상적으로 실행이 된 것을 확인하실 수 있습니다.