Microk8s에서 gpu 사용하기

강재호·2024년 4월 3일

microk8s에서 gpu 할당하기

요 근래 mlops 관련 패키지중
직원중 한명이 추천한 vessl이란 패키지를 알게 되어
나름 괜찮아 보여서 사용법을 익히기 위해 설치 하던 도중
k0s, microk8s와 같은 쿠버네티스 환경을 접하게 되었고, 그 환경에서 gpu을 pod를 서비스를 하기 위한 설정을 위한 삽질을 근 2주 가까이 하다가.
오늘에야 일단락을 내게 됨

vessl에서 on promise(내부 설치형) 클러스터에 gpu부분이 1이 되게 하기 위한 삽질이 끝났다.

microk8s 에서 nvidia(구 gpu) 애드온을 추가하고,
nvidia-device-plugin 네임스페이스 혹은 gpu-operator-resources 네임 스페이스의 pod 가 시작하면서 오류가 생김.


오류 로그를 보면 NVML을 찾을수 없다고 나오고.
nvidia-container-toolkit을 제대로 깔았는지 점검하라는 메세지만 나옴.

nvidia-container-toolkit이 제대로 깔렸있다고 판단되어

다른 원인을 찾던 중 containerd.toml과 같은 설정 파일에서 원인 발견 해결.

원인 : containerd 설정에서 default_runtime_name 변수가 환경 변수를 받아서 실행 되는것 같은데 이 변수가 정상적으로 반영되지 않는것으로 보임.
해결 :

default_runtime_name = "${RUNTIME}" <- 원본
default_runtime_name = "nvidia"     <- 수정본

위 원본의 내용을 수정본으로 수정하고
microk8s 에서 container를 재시작하니 해결됨.

참조 문서 : https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/23.9.0/getting-started.html

https://velog.io/@myeong01/Containerd-%EB%A1%9C-GPU-Kubernetes-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0

version = 2
[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
    [plugins."io.containerd.grpc.v1.cri".containerd]
      default_runtime_name = "nvidia"

      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia]
          privileged_without_host_devices = false
          runtime_engine = ""
          runtime_root = ""
          runtime_type = "io.containerd.runc.v2"
          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]
            BinaryName = "/usr/bin/nvidia-container-runtime"

참조 문서에서는 default_runtime_name 뿐만 아니라 그 아래 부분이 없으면 수정하라고 함.

여튼.. 해결 되서 다행.. ^^//

profile
사진 찍는 프로그래머입니다 ^^

0개의 댓글