NVIDIA/k8s-device-plugin

NVIDIA device plugin for Kubernetes

NVIDIA k8s‑device‑plugin – Kubernetes를 위한 GPU 지원

개요

  • NVIDIA GPU를 위한 Kubernetes device plugin API를 구현하는 공식 NVIDIA DaemonSet입니다.
  • 배포되면 각 노드의 GPU를 자동으로 검색하고, 상태를 보고하며, nvidia.com/gpu 리소스 유형(및 선택적 MIG 또는 공유 GPU 리소스)을 통해 컨테이너에서 사용할 수 있도록 합니다.

AI/ML에 중요한 이유

  • 대부분의 딥러닝 훈련 및 추론 워크로드는 NVIDIA GPU에서 실행됩니다. Kubernetes 클러스터는 TensorFlow, PyTorch 또는 RAPIDS와 같은 프레임워크가 컨테이너 내에서 실행될 수 있도록 이러한 GPU를 pod에 노출하는 방법이 필요합니다.
  • 이 플러그인은 클러스터 스케줄러와 NVIDIA 드라이버/런타임 스택 간의 다리 역할을 하여 다른 리소스와 마찬가지로 GPU 가속 작업을 스케줄링할 수 있게 합니다.

주요 기능 (README에 설명된 대로)

기능 역할
GPU 검색 및 상태 각 노드의 GPU 수를 감지하고 kube‑let에 상태를 보고합니다.
MIG 지원 Multi‑Instance GPU 슬라이스를 별도의 리소스(nvidia.com/mig‑…)로 노출하기 위한 선택적 전략(none, single, mixed)입니다.
공유 GPU 액세스 구성 파일을 통해 타임 슬라이싱 또는 NVIDIA MPS를 활성화하여 오버서브스크립션을 허용합니다(예: 물리적 GPU당 10개의 논리적 nvidia.com/gpu).
구성 가능한 장치 목록 전달 할당된 GPU를 컨테이너 런타임에 전달하는 방법을 선택합니다: 환경 변수, 볼륨 마운트, CDI 어노테이션 또는 CDI‑CRI 필드.
Helm chart 및 ConfigMap 지원 Helm로 플러그인을 배포하고, ConfigMap을 통해 플래그, 환경 변수 또는 YAML 구성 파일을 전달합니다.
GPU Feature Discovery와 통합 더 풍부한 스케줄링을 위해 GPU 기능(메모리, 컴퓨트 기능 등)을 설명하는 노드 레이블을 내보냅니다.
여러 런타임 지원 Docker(사용 중단), containerd, CRI‑O 및 NVIDIA Container Toolkit을 사용할 수 있는 모든 OCI 런타임과 함께 작동합니다.

일반적인 워크플로우

  1. 노드 준비 – NVIDIA 드라이버(≈ 384.81+), nvidia‑container‑toolkit(또는 nvidia‑docker ≥ 2.0)를 설치하고 nvidia‑container‑runtime을 기본 OCI 런타임으로 설정합니다.
  2. 플러그인 배포 – 정적 DaemonSet 매니페스트를 적용하거나 제공된 Helm chart를 통해 설치합니다.
  3. GPU pod 실행 – pod 스펙에서 nvidia.com/gpu: 1(또는 MIG 슬라이스)를 요청합니다. 스케줄러는 사용 가능한 GPU가 있는 노드에 pod를 배치하고 런타임은 장치 파일을 주입합니다.
  4. (선택 사항) YAML 구성 파일에서 타임 슬라이싱 또는 MPS를 활성화하고 ConfigMap을 통해 마운트하여 여러 pod가 단일 GPU를 공유하도록 허용합니다.

시작하기(빠른 시작 발췌)

# 1. Install NVIDIA Container Toolkit (see NVIDIA docs)
# 2. Deploy the plugin (static DaemonSet example)
kubectl create -f \
  https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.17.1/deployments/static/nvidia-device-plugin.yml

# 3. Launch a test pod
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  restartPolicy: Never
  containers:
  - name: cuda-container
    image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0
    resources:
      limits:
        nvidia.com/gpu: 1
  tolerations:
  - key: nvidia.com/gpu
    operator: Exists
    effect: NoSchedule
EOF

pod는 간단한 CUDA 벡터 덧셈 샘플을 실행하고 Test PASSED를 출력합니다.

구성 옵션(개요)

  • --mig-strategy – MIG 슬라이스의 노출을 제어합니다(none, single, mixed).
  • --device-list-strategy – GPU를 런타임에 전달하는 방법(envvar(기본값), volume-mounts, cdi-annotations, cdi-cri).
  • --device-id-strategy – GPU UUID 또는 인덱스 번호를 사용합니다.
  • --fail-on-init-error – 초기화 오류 시 플러그인을 실패하게 합니다(기본값 true).
  • --pass-device-specs – Kubernetes CPUManager와의 상호 작용을 활성화합니다(특권 DaemonSet 필요).
  • --config-file – 타임 슬라이싱 또는 MPS에 대한 공유 설정을 포함할 수도 있는 YAML 구성 파일의 경로입니다.

README에 명시된 제한 사항 / 주의 사항

  • 플러그인 API는 여전히 베타입니다(Kubernetes v1.10 기준).
  • 상태 확인 및 GPU 정리는 포괄적이지 않습니다.
  • 공유 GPU 모드(타임 슬라이싱, MPS)는 상호 배타적이며 노드의 모든 GPU에 적용됩니다.
  • GPU 요청을 잊어버리면 플러그인은 컨테이너 내부의 모든 GPU를 노출합니다 – 항상 제한을 지정해야 합니다.
  • 이 플러그인은 공식 지원만 받습니다. 포크는 지원되지 않습니다.

추가 정보를 찾을 수 있는 곳

  • 전체 문서는 docs/에 있습니다(예: GPU Feature Discovery, CDI 사용법).
  • 릴리스 노트와 변경 이력은 리포지토리에 링크되어 있습니다.
  • 이슈 및 기여 가이드라인은 Issues and Contributing 섹션에 제공됩니다.

위의 모든 정보는 리포지토리의 README에서 직접 가져온 것이며, 외부의 가정은 추가되지 않았습니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트