IT개발

AI·ML 워크로드용 쿠버네티스 리소스 할당 및 GPU 스케줄링

우리모두 개발자되기 2025. 5. 1. 22:03

 

AI·ML 워크로드용 쿠버네티스 리소스 할당 및 GPU 스케줄링

1. 서론

인공지능(AI)과 머신러닝(ML) 워크로드는 일반적인 애플리케이션에 비해 훨씬 높은 컴퓨팅 자원을 요구합니다. 특히 대규모 데이터셋을 기반으로 한 모델 학습이나 추론 과정에서는 CPU만으로는 성능 한계에 도달하기 쉽습니다. 이에 따라 GPU(Graphic Processing Unit)는 필수적입니다. 그러나 GPU는 희소하고 고가의 자원이기 때문에, 이를 쿠버네티스(Kubernetes) 환경에서 적절히 할당하고 스케줄링하는 것은 매우 중요합니다. 본 글에서는 쿠버네티스 기반에서 AI·ML 워크로드를 위한 리소스 할당 및 GPU 스케줄링 전략을 심층적으로 다루겠습니다.


2. 쿠버네티스 리소스 모델과 AI·ML 특성

2.1 리소스 요청(Request)과 제한(Limit)

쿠버네티스에서는 각 파드(Pod)가 사용할 수 있는 CPU, 메모리, 스토리지, GPU 등의 리소스를 명시적으로 설정할 수 있습니다. 이때 사용되는 기본 단위가 요청(Request)과 제한(Limit)입니다.

  • Request: 파드가 실행될 때 최소 보장받는 리소스 양입니다.
  • Limit: 파드가 최대 사용할 수 있는 리소스 양입니다.

AI·ML 워크로드는 훈련(training) 과정에서는 엄청난 리소스를 요구하고, 추론(inference) 단계에서는 상대적으로 적은 리소스를 소비합니다. 이 특성을 고려해 동적으로 리소스 전략을 수립해야 합니다.

2.2 AI·ML 워크로드의 특징

  • 높은 GPU 및 CPU 사용량
  • 메모리 집약적 작업
  • 장시간 실행되는 작업
  • 실패 복구가 어려운 장기성 작업

따라서 리소스 부족이나 노드 장애 시 빠르게 복구하거나 이중화하는 구조보다는, 처음부터 신중한 배치와 스케줄링이 더 중요합니다.


3. 쿠버네티스에서 GPU 활용 준비

3.1 NVIDIA Device Plugin 설치

기본 쿠버네티스는 GPU를 인식하지 못합니다. NVIDIA에서는 이를 위해 별도의 Device Plugin을 제공합니다.

설치 방법은 다음과 같습니다.

kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/master/nvidia-device-plugin.yml

설치 후 GPU가 탑재된 노드들은 nvidia.com/gpu 리소스 타입을 가지게 되며, 이를 통해 스케줄러가 해당 노드를 선택할 수 있습니다.

3.2 파드에서 GPU 요청하기

GPU를 사용하는 파드를 정의할 때 다음처럼 요청(request)과 제한(limit)을 설정합니다.

apiVersion: v1
kind: Pod
metadata:
  name: gpu-ai-job
spec:
  containers:
  - name: training-container
    image: my-ai-image:latest
    resources:
      requests:
        nvidia.com/gpu: 1
      limits:
        nvidia.com/gpu: 1

이 설정은 파드가 반드시 1개의 GPU를 요구하며, 클러스터 스케줄러는 이를 고려하여 배치합니다.


4. GPU 스케줄링 전략

4.1 기본 스케줄링

쿠버네티스 기본 스케줄러는 노드 상태 및 리소스 가용성에 따라 GPU 파드를 자동 배치합니다. 하지만 기본 스케줄링만으로는 아래 문제가 발생할 수 있습니다.

  • 특정 GPU 노드 과부하
  • 비효율적 GPU 자원 사용
  • 우선순위 높은 작업 차단

이를 해결하기 위해 다양한 스케줄링 최적화 방법을 적용할 수 있습니다.

4.2 GPU 친화 스케줄링 최적화

  • Affinity/Anti-Affinity: GPU 자원을 가진 노드 선호 설정
  • Taints and Tolerations: GPU 노드를 특정 워크로드에만 사용하도록 제한
  • PriorityClass: 중요한 AI 워크로드에 높은 스케줄링 우선순위 부여

예시로, GPU 노드에 taint를 추가하면 다음과 같습니다.

kubectl taint nodes <gpu-node> nvidia.com/gpu=true:NoSchedule

이후 toleration이 설정된 파드만 해당 노드에 배치될 수 있습니다.


5. GPU 공유와 Multi-Instance GPU(MIG)

5.1 GPU 공유 필요성

GPU 하나를 하나의 워크로드에 독점적으로 사용하는 것은 비효율적일 수 있습니다. 특히 경량 추론 서비스는 GPU를 일부만 사용합니다. 이 경우 GPU를 여러 파드가 공유할 수 있다면 자원 활용률이 대폭 향상됩니다.

5.2 NVIDIA MIG 기능

NVIDIA A100 이상의 GPU는 **MIG(Multi-Instance GPU)**를 지원합니다. 하나의 GPU를 여러 개의 작은 독립 인스턴스로 분할하여 다수의 파드가 동시에 사용할 수 있게 합니다.

MIG 설정은 nvidia-device-plugin에서 자동으로 감지되며, 쿠버네티스에서는 마치 별개의 GPU처럼 인식합니다.


6. AI·ML 워크로드용 스케일링 전략

6.1 수평적 확장(Horizontal Pod Autoscaler)

추론 워크로드처럼 짧고 가벼운 작업은 **수평적 확장(HPA)**이 유효합니다. CPU 사용량이나 GPU Memory 사용량 기반으로 파드 수를 조절할 수 있습니다.

단, GPU 리소스가 희소할 경우 GPU 사용량 기반 오토스케일러가 별도로 필요할 수 있습니다.

6.2 수직적 확장(Vertical Pod Autoscaler)

훈련 작업처럼 장기 실행형 워크로드는 필요 리소스를 동적으로 조정하는 VPA가 적합합니다. 그러나 GPU 워크로드에서는 대부분 수직 확장(VPA)보다 처음부터 정확한 Request/Limit 설정이 선호됩니다.


7. GPU 자원 모니터링 및 최적화

7.1 Metrics Server와 GPU 모니터링

쿠버네티스 기본 metrics-server는 GPU 사용량을 수집하지 않습니다. NVIDIA에서는 별도로 DCGM Exporter를 제공하여 GPU 사용량을 Prometheus와 연동할 수 있습니다.

helm install dcgm-exporter nvidia/dcgm-exporter

이를 통해 GPU Utilization, Memory Usage, Temperature 등 다양한 메트릭을 수집할 수 있습니다.

7.2 Prometheus + Grafana 대시보드 구축

GPU 모니터링 데이터는 Prometheus에 수집한 후 Grafana 대시보드를 통해 실시간 모니터링할 수 있습니다. 이 방식은 GPU 과부하 및 병목 지점을 빠르게 감지하여 조치할 수 있게 해줍니다.


8. 실전 적용 사례

8.1 대규모 모델 학습 클러스터

  • NVIDIA A100 8장 탑재 노드
  • Node AffinityTaint/Tolerations 사용
  • GPU Memory Utilization 모니터링 후 오토스케일링

8.2 경량 추론 서비스

  • MIG 활성화
  • 1개의 GPU를 7개의 인스턴스로 분할
  • 높은 요청 처리량 달성, GPU 자원 낭비 최소화

9. 결론

AI·ML 워크로드는 그 특성상 고성능 리소스를 필요로 하며, GPU는 이러한 워크로드의 성능을 극대화하는 데 핵심적입니다. 쿠버네티스 환경에서는 GPU를 효율적으로 할당하고 스케줄링하기 위해 다음과 같은 전략을 필수적으로 적용해야 합니다.

  • NVIDIA Device Plugin 설치 및 관리
  • 정확한 리소스 요청(Request) 및 제한(Limit) 설정
  • GPU 친화 스케줄링 최적화
  • MIG 기반 GPU 공유 활성화
  • Prometheus+Grafana를 통한 GPU 모니터링

이러한 요소들을 통합적으로 고려할 때, AI·ML 워크로드의 성능과 안정성, 그리고 비용 효율성을 극대화할 수 있습니다. 빠르게 성장하는 AI 시장에서 쿠버네티스를 통한 효율적 GPU 관리와 운영은 앞으로 더욱 중요한 역량이 될 것입니다.