⸻
⸻
🧭 왜 GPU 자원 스케줄링이 중요한가?
AI/ML 워크로드가 늘어나며 Kubernetes 위에서 GPU를 할당하고 관리하는 것이 일반화되었지만,
기본 스케줄링만으로는 “과도한 자원 고립”, “불균형 GPU 할당”, “미활용 자원” 문제가 빈번하게 발생합니다.
이 글에서는 다음과 같은 GPU 관련 실전 이슈를 커버합니다:
• GPU 단위가 아닌 Sub-GPU(MIG) 레벨의 분배
• GPU Job의 큐잉/자원 대기 시간 최소화
• 쿠버네티스 스케줄러 확장을 통한 fine-grained 자원 제어
⸻
🧱 구성 요소 요약
구성 요소 역할 설명
Nvidia Device Plugin GPU 디바이스를 K8s 노드에 등록, 사용 가능한 리소스로 인식
MIG (Multi-Instance GPU) A100 같은 고성능 GPU를 sub-partition 하여 병렬 사용 가능
Kueue (Job Queueing) 대규모 GPU Job의 자원 풀 기반 대기열 스케줄링
Scheduler Extender 커스텀 스케줄러로 GPU 점유 상태, Job 우선순위 반영 가능
⸻
1. 기본 Device Plugin 설치
kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.0/nvidia-device-plugin.yml
기본 설치 시 /dev/nvidia0 형태의 장치들이 K8s의 리소스로 등록됩니다.
Pod 스펙에서 nvidia.com/gpu: 1과 같이 명시하여 요청 가능.
⸻
2. MIG 활성화 및 할당 전략
Nvidia A100/V100과 같은 고성능 GPU는 MIG(Multi-Instance GPU) 기능을 지원하여
GPU 하나를 여러 워크로드에 분할 제공할 수 있습니다.
sudo nvidia-smi mig -cgi 0,1,2,3,4,5,6,7 -C
• -cgi: MIG 인스턴스 생성 방식 정의 (e.g. 1g.5gb, 2g.10gb 등)
• MIG 인스턴스마다 nvidia.com/mig-1g.5gb 등의 리소스로 인식
이제 Pod에서는 다음과 같이 선언 가능:
resources:
limits:
nvidia.com/mig-1g.5gb: 1
⸻
3. GPU Job 스케줄링 최적화 - kueue 도입
Kueue는 GPU 자원을 Job 단위로 관리하는 K8s 네이티브 큐잉 컨트롤러입니다.
주요 기능:
• Job을 자원 풀 기반으로 큐잉
• 우선순위 기반 처리 (Fair share, FIFO 등)
• 자원 할당 가능 시 자동 실행
구성 예시
apiVersion: kueue.x-k8s.io/v1beta1
kind: LocalQueue
metadata:
name: gpu-jobs
spec:
clusterQueue: gpu-cluster
⸻
4. 스케줄러 확장 (Scheduler Extender) 전략
기본 kube-scheduler는 GPU 점유율, 온도, 상태 등을 고려하지 않음 → Scheduler Extender 사용
Extender 구성 예시 (config.yaml)
extenders:
- urlPrefix: "http://gpu-scheduler-extender.default.svc.cluster.local:9000"
filterVerb: "filter"
prioritizeVerb: "prioritize"
weight: 5
nodeCacheCapable: true
Extender는 노드 상태 기반으로 필터링과 우선순위 점수를 부여합니다.
예: 남은 GPU memory > 16GB, MIG conflict 없음 등
⸻
5. 커스텀 스케줄러 우선순위 로직 예시 (Python Flask)
@app.route("/prioritize", methods=["POST"])
def prioritize():
args = request.get_json()
scores = []
for node in args["nodes"]:
gpu_free = check_gpu_status(node["name"])
scores.append({"name": node["name"], "score": gpu_free})
return jsonify({"nodeScores": scores})
⸻
6. 실전 운영 팁
상황 대응 전략
GPU 자원이 남지만 Job 대기 MIG + Queue 기반 자동 scaling 구성
노드 하나에만 Job 몰림 Topology Aware Scheduling 활성화
자원 충돌로 Pod 실패 Taint/Toleration 기반 격리 및 affinity 구성
GPU 사용률 낮음 Prometheus + DCGM Exporter로 실시간 모니터링
⸻
7. 결론
Kubernetes 환경에서도 GPU 자원을 정교하게 제어하는 것은
단순한 nvidia.com/gpu: 1 선언만으로는 부족합니다.
MIG, 스케줄러 확장, 큐잉 기반 Job 대기열, 실시간 자원 가시화까지 포함한
전체 GPU 관리 파이프라인을 구성해야 진짜 의미 있는 효율화를 이룰 수 있습니다.
카테고리 없음