GPU 리소스 관리
2026-02-05 작성2026-07-19 수정23분 읽기
EKS 환경에서 GPU 리소스를 관리하는 전략은 크게 세 가지 축으로 구성됩니다.
| 축 | 핵심 질문 | 주요 기술 |
|---|---|---|
| 프로비저닝 | 어떤 GPU 노드를 언제 생성하는가? | Karpenter, EKS Auto Mode, Managed Node Group |
| 스케줄링 | GPU Pod를 어떤 노드에 배치하는가? | Device Plugin, DRA, Topology-Aware Routing |
| 스케일링 | 트래픽 변화에 어떻게 대응하는가? | KEDA, HPA, Cluster Autoscaler |
이 문서는 각 축의 아키텍처와 설계 판단 기준을 다룹니다. GPU Operator 상세(ClusterPolicy, DCGM, MIG, Time-Slicing, Dynamo, KAI Scheduler 등 NVIDIA 소프트웨어 스택)는 NVIDIA GPU 스택을 참조하세요.
Karpenter GPU NodePool
Karpenter GA (v1.0+)
Karpenter는 v1.0부터 GA 상태이며, 본 문서의 모든 예제는 karpenter.sh/v1 API를 사용합니다. DRA allocator는 코어(kubernetes-sigs/karpenter) v1.14.0에 추가되었고, 이를 포함한 AWS Provider(karpenter-provider-aws) v1.14.0도 2026-07-11에 릴리스되었습니다. 따라서 self-managed Karpenter v1.14.0+ 를 직접 설치하면 EKS에서 DRA 노드 프로비저닝이 가능합니다. 단, 컨트롤러 설정 ignoreDRARequests가 기본값 true(DRA 요청 무시) 이므로 이를 false로 바꿔야 실제로 동작합니다. 상세는 아래 노드 프로비저닝 호환성과 Karpenter DRA 활성화 파라미터를 참조하세요.
GPU 노드 자동 프로비저닝 개념
Karpenter는 Pending Pod의 리소스 요청(nvidia.com/gpu, 메모리, CPU)을 분석하여 최적의 EC2 인스턴스를 자동으로 프로비저닝합니다. GPU 워크로드에서 Karpenter의 핵심 가치는 다음과 같습니다.
- 인스턴스 다양성: 단일 NodePool에서 p4d, p5, g5, g6e 등 다양한 GPU 인스턴스를 지원
- Spot/On-Demand 혼합: capacity-type으로 비용과 안정성 균형 조절
- Consolidation: 유휴 GPU 노드를 자동으로 정리하여 비용 절감
- Taint 기반 격리: GPU 노드에
nvidia.com/gputaint를 설정하여 비GPU 워크로드 배제
NodePool 설정 예시
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: gpu-inference-pool
spec:
template:
metadata:
labels:
node-type: gpu-inference
workload: genai
spec:
requirements:
- key: kubernetes.io/arch
operator: In
values: ["amd64"]
- key: karpenter.sh/capacity-type
operator: In
values: ["on-demand", "spot"]
- key: node.kubernetes.io/instance-type
operator: In
values:
- p4d.24xlarge # 8x A100 40GB
- p5.48xlarge # 8x H100 80GB
- g5.48xlarge # 8x A10G 24GB
- key: karpenter.k8s.aws/instance-gpu-count
operator: Gt
values: ["0"]
nodeClassRef:
group: karpenter.k8s.aws
kind: EC2NodeClass
name: gpu-nodeclass
taints:
- key: nvidia.com/gpu
value: "true"
effect: NoSchedule
limits:
cpu: 1000
memory: 4000Gi
nvidia.com/gpu: 64
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
consolidateAfter: 30s
weight: 100
설계 포인트:
limits.nvidia.com/gpu: 64— 클러스터 전체 GPU 상한으로 비용 폭주 방지disruption.consolidateAfter: 30s— GPU 노드는 비용이 높으므로 빠른 정리가 핵심weight: 100— 여러 NodePool 중 이 풀의 우선순위 설정- 워크로드별 분리: 추론은 On-Demand +
WhenEmpty, 훈련은[spot, on-demand]+consolidateAfter: 30m으로 중단 방지
EC2NodeClass 설정 예시
apiVersion: karpenter.k8s.aws/v1
kind: EC2NodeClass
metadata:
name: gpu-nodeclass
spec:
amiSelectorTerms:
- alias: al2023
role: KarpenterNodeRole-eks-genai-cluster
subnetSelectorTerms:
- tags:
karpenter.sh/discovery: eks-genai-cluster
subnet-type: private
securityGroupSelectorTerms:
- tags:
karpenter.sh/discovery: eks-genai-cluster
blockDeviceMappings:
- deviceName: /dev/xvda
ebs:
volumeSize: 200Gi
volumeType: gp3
iops: 16000
throughput: 1000
encrypted: true
deleteOnTermination: true
metadataOptions:
httpEndpoint: enabled
httpPutResponseHopLimit: 2
httpTokens: required # IMDSv2
tags:
Environment: production
ManagedBy: karpenter