ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [K8S] Kubernetes에서 GPU 사용하기 (apt/yum)
    Kubernetes 2024. 3. 10. 23:06

    0. 전제 조건

     

     

     

    1. NVIDIA Conatainer Toolkit 설치

    nvidia-container-toolkit : NVIDIA GPU를 사용하는 컨테이너를 빌드하고 실행하기 위한 도구 모음

     

    • 저장소 및 GPG키 설정
    # ubuntu
    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
        
    # centos
    curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
      sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo

     

     

    • nvidia-container-toolkit 패키지 설치
    # ubuntu
    sudo apt-get update
    sudo apt-get install -y nvidia-container-toolkit
    
    # centos
    sudo yum install -y nvidia-container-toolkit

     

     

    • 컨테이너 런타임 구성
    sudo nvidia-ctk runtime configure --runtime=docker
    # vi /etc/docker/daemon.json
    
    {
      "default-runtime": "nvidia",
      "runtimes": {
          "nvidia": {
              "path": "/usr/bin/nvidia-container-runtime",
              "runtimeArgs": []
          }
      }
    }

     

     

    • 적용
    systemctl daemon-reload
    systemctl restart docker

     

     

    • 확인 테스트
    sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi

     

     

     

     

     

    2. NVIDIA GPU 디바이스 플러그인 설치

    Kubernetes는 device-plugin을 사용하여 Pod가 GPU와 같이 특별한 하드웨어 기능에 접근할 수 있게 합니다.

    • 설치
    kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta4/nvidia-device-plugin.yml

     

     

    • 확인
    kubectl get daemonset -n kube-system

     

     

     

     

     

    3. POD 테스트

    GPU 리소스 할당 X

    • Test POD 배포
    # vi ubuntu-test.yaml
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: ubuntu-test
    spec:
      containers:
      - name: os-ubuntu
        image: ubuntu:18.04
        imagePullPolicy: IfNotPresent
        command:
        - "/bin/sleep"
        - "3650d"
        resources:
          limits:
            cpu: "5"
            memory: "8G"
    kubectl apply -f ubuntu-test.yaml

     

     

    • POD 내부로 shell 진입하여 확인
      → nvdia-smi 명령어가 실행되지 않음
    kubectl exec -it ubuntu-test /bin/bash
    
    nvidia-smi

     

     

     

    GPU 리소스 할당 O

    • Test POD 배포
      • GPU 리소스 할당 추가 : nvidia.com/gpu: "1"
    vi ubuntu-test-gpu.yaml
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: ubuntu-test-gpu
    spec:
      containers:
      - name: os-ubuntu
        image: ubuntu:18.04
        imagePullPolicy: IfNotPresent
        command:
        - "/bin/sleep"
        - "3650d"
        resources:
          limits:
            cpu: "5"
            memory: "8G"
            nvidia.com/gpu: "1"
    kubectl apply -f ubuntu-test-gpu.yaml

     

     

    • POD 내부로 shell 진입하여 확인
      → nvdia-smi 명령어 실행됨 (= GPU 사용 O)
      kubectl exec -it ubuntu-test-gpu /bin/bash
      
      nvidia-smi

     

     

     

     

     

     

    Reference

Designed by Tistory.