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 런타임과 함께 작동합니다. |
일반적인 워크플로우
- 노드 준비 – NVIDIA 드라이버(≈ 384.81+),
nvidia‑container‑toolkit(또는nvidia‑docker≥ 2.0)를 설치하고nvidia‑container‑runtime을 기본 OCI 런타임으로 설정합니다. - 플러그인 배포 – 정적 DaemonSet 매니페스트를 적용하거나 제공된 Helm chart를 통해 설치합니다.
- GPU pod 실행 – pod 스펙에서
nvidia.com/gpu: 1(또는 MIG 슬라이스)를 요청합니다. 스케줄러는 사용 가능한 GPU가 있는 노드에 pod를 배치하고 런타임은 장치 파일을 주입합니다. - (선택 사항) 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– KubernetesCPUManager와의 상호 작용을 활성화합니다(특권 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에서 직접 가져온 것이며, 외부의 가정은 추가되지 않았습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트