더듬이

[kubernetes] k8s 클러스터에 gpu worker node 붙이기 본문

Kubernetes

[kubernetes] k8s 클러스터에 gpu worker node 붙이기

dbhang 2021. 7. 1. 21:54

일단 기본적으로 docker와 nvidia-driver가 설치되었다는 전제하에 설정을 진행하겠다.

 

1. worker-node에 nvidia-docker2를 설치

공식 사이트에  따라 아래 명령어들을 실행해보자

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker

 

docker 가 정상 재시작 되었다면 아래 명령어를 통해 nvidia-docker가 2버전 이상으로 잘 잡혀있는지 확인하자!

 

nvidia-docker version

 

NVIDIA Docker: 2.2.2
Client:
 Version:           18.09.3
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        774a1f4
 Built:             Thu Feb 28 06:40:58 2019
 OS/Arch:           linux/amd64
 Experimental:      fals

 

2. docker 설정

아래 명령어로 데몬파일을 읽은뒤

vi /etc/docker/daemon.json

아래 내용을 추가해준다!

{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

 

그리고 도커 재시작

 

systemctl daemon-reload
systemctl restart docker

 

3.master-node에서 k8s-device-plugin 을 추가해준다!

kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.9.0/nvidia-device-plugin.yml

 

4. gpu pods 실행!

아래 yaml과같이 limits에 nvidia.com/gpu: {gpu갯수} 옵션을 추가해 주면 된다!

https://github.com/NVIDIA/k8s-device-plugin

 

 

NVIDIA/k8s-device-plugin

NVIDIA device plugin for Kubernetes. Contribute to NVIDIA/k8s-device-plugin development by creating an account on GitHub.

github.com

 

 

apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  containers:
    - name: cuda-container
      image: nvcr.io/nvidia/cuda:9.0-devel
      resources:
        limits:
          nvidia.com/gpu: 2 # requesting 2 GPUs
    - name: digits-container
      image: nvcr.io/nvidia/digits:20.12-tensorflow-py3
      resources:
        limits:
          nvidia.com/gpu: 2 # requesting 2 GPUs

 

사실 위 단계는 아주쉽다... 

윗단계 이전에 nvidia-smi 설치랑 cuda 설치가 눈물나서그러지....

 

다만 주의할 점은 nvidia.com/gpu 를 설정하지 않는 pods들에 경우 워커 노드에 있는 모든 gpu 카드가 잡히게 된다....

위 같은 경우는 여러 파훼법이 있다고 하는데 그 내용은 다른 포스팅에서 다루도록  하겠다.