Kubernetes에서 GPU Operator를 이용한 GPU 환경 자동 구성

GPU Operator 개요

Kubernetes 환경에서 GPU를 활용하기 위해서는 드라이버, 컨테이너 툴킷 등 다양한 구성 요소의 수동 설치가 필요했습니다. NVIDIA GPU Operator는 GPU 드라이버 설치, 컨테이너 툴킷 구성, 디바이스 플러그인 배포, 모니터링 설정을 자동화하여 Kubernetes에서의 GPU 사용 프로세스를 단순화합니다.

핵심 구성 요소

  • NFD(Node Feature Discovery): 노드의 하드웨어 특성(CPU, 커널 버전, GPU 존재 여부)을 레이블로 식별
  • GFD(GPU Feature Discovery): GPU 장치 속성(드라이버 버전, 모델 등)을 노드 레이블로 노출
  • 드라이버 설치기: 컨테이너 기반 GPU 드라이버 설치
  • 컨테이너 툴킷 설치기: 컨테이너 내 GPU 사용 환경 구성
  • 디바이스 플러그인: Kubernetes 리소스로 GPU 할당 관리
  • DCGM 익스포터: GPU 메트릭 수집 및 Prometheus 노출

배포 요구 사항

  1. GPU 노드는 동일한 OS 버전 사용
  2. 동일한 컨테이너 엔진(containerd 또는 Docker) 구성
  3. Pod Security Admission(PSA) 사용 시 프리빌리지드 모드 설정:
    kubectl create ns gpu-system
    kubectl label --overwrite ns gpu-system pod-security.kubernetes.io/enforce=privileged

헬름 배포 절차

# Helm 저장소 추가
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm repo update

# 기본 설치
helm install gpu-deployment --wait --generate-name \
    -n gpu-system --create-namespace \
    nvidia/gpu-operator

# 수동 드라이버 설치 시
helm install gpu-custom --wait --generate-name \
     -n gpu-system --create-namespace \
     nvidia/gpu-operator \
     --set driver.enabled=false

동작 검증

배포 후 Pod 상태 확인:

kubectl -n gpu-system get pods
NAME                                      READY   STATUS      RESTARTS   AGE
gpu-feature-discovery-abc12               1/1     Running     0          2m
nvidia-driver-daemonset-xyz78             1/1     Running     0          2m
nvidia-container-toolkit-daemonset-def45  1/1     Running     0          2m

GPU 리소스 할당 테스트:

apiVersion: v1
kind: Pod
metadata:
  name: gpu-test-pod
spec:
  containers:
  - name: cuda-sample
    image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.1-ubuntu22.04
    resources:
      limits:
        nvidia.com/gpu: 1

컨테이너 기반 드라이버 설치

GPU Operator는 컨테이너화된 드라이버 설치 방식을 사용합니다. 드라이버 설치 Pod는 호스트 시스템에 다음 디렉토리를 마운트합니다:

volumes:
- hostPath:
    path: /run/nvidia
  name: nvidia-run
- hostPath:
    path: /etc/os-release
  name: os-info

설치 프로세스는 다음 단계로 진행됩니다:

  1. 기존 드라이버 언로드
  2. 커널 모듈 패키지 설치
  3. NVIDIA 커널 모듈 로드
  4. 지속성 데몬 시작

컨테이너 툴킷 구성

컨테이너 런타임 구성 업데이트:

time="2024-06-12T02:07:58Z" level=info msg="Setting up runtime"
time="2024-06-12T02:07:58Z" level=info msg="Configuring Docker"
time="2024-06-12T02:07:58Z" level=info msg="Updating /etc/docker/daemon.json"

실제 적용된 Docker 설정 예시:

{
  "default-runtime": "nvidia",
  "runtimes": {
    "nvidia": {
      "path": "/usr/local/nvidia/toolkit/nvidia-container-runtime"
    }
  }
}

태그: kubernetes GPU-Operator NVIDIA-GPU Container-Toolkit GPU-Driver

7월 25일 23:31에 게시됨