728x90
AI 인프라에서 GPU는 아주 비싼 자원입니다.
그래서 어떤 노드에 어떤 워크로드를 배치할지는 비용과 성능에 매우 큰 영향을 미칩니다.
특히 Kubernetes 기반 환경에서는
단순히 “돌아만 가는” 것이 아니라,
자원의 물리적 위치와 상호 작용을 고려한 배치 전략이 필요합니다.
이번 글에서는 이를 가능하게 하는 Node Affinity / Anti-Affinity 개념을 정리해봅니다.
✅ 기본 개념 요약
| 용어 | 설명 |
| Node Affinity | 특정 노드에 “붙도록” 배치 (선호 또는 강제) |
| Node Anti-Affinity | 특정 노드를 “피해서” 배치 |
| Pod Affinity / Anti-Affinity | 특정 Pod와 “같이” 또는 “떨어져서” 배치 |
✅ Node Affinity의 예시
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: gpu-type
operator: In
values:
- a100
📌 의미: "gpu-type: a100" 라벨이 붙은 노드에만 배치하라
✅ 실무 활용 예시
| 시나리오 | 전략 | 설명 |
| GPU 종류별 클러스터 구성 | Node Affinity | A100 / H100 분리 운용 |
| 여러 GPU를 가진 노드 집중 사용 | Preferred Affinity | 단일 노드 집중 배치 |
| 고가형 GPU에 테스트 Job 배치 방지 | Anti-Affinity | 낮은 우선순위 Job 분산 |
| 한 노드에 너무 많은 Job 몰림 방지 | Pod Anti-Affinity | 같은 타입끼리 분리 배치 |
| 장애 분산 (High Availability) | Topology-aware Anti-Affinity | Zone 또는 Rack 기준으로 분산 |
✅ 배치 전략 구성 요소
| 요소 | 설명 |
| requiredDuringSchedulingIgnoredDuringExecution | 배치 시 반드시 만족해야 하는 조건 |
| preferredDuringSchedulingIgnoredDuringExecution | 선호 조건 (안 되면 무시하고 실행 가능) |
| topologyKey | 배치 분산 기준 (kubernetes.io/hostname, topology.kubernetes.io/zone 등) |
✅ GPU 클러스터에서의 확장 활용
- MIG를 사용하는 경우, GPU ID 기준으로 Pod 간 간섭 회피
- Volta / Ampere / Hopper 세대별 분리
- Spot 노드와 온디맨드 노드를 별도 운영
- Job priority에 따라 전용 노드 할당
✅ 주의 사항
- 잘못된 Anti-Affinity 조건은 Job을 영원히 대기 상태로 만들 수 있음
- 너무 많은 preferred 조건은 스케줄러 성능 저하 유발
- 실제 노드 라벨링 전략과 연동이 중요
✅ 마무리
GPU 클러스터는 단순히 “많이 갖는 것”보다
어떻게 잘 나눠서 쓰느냐가 중요합니다.
Node Affinity와 Anti-Affinity는
운영 효율을 높이고 장애 영향을 최소화하는 핵심 배치 전략입니다.
728x90