HPC & GPU Engineering/AI Infrastructure Engineer

[HPC/GPU 클러스터 운영 Scheduling Deep Dive 9편] GPU Memory-Aware Scheduling – OOM 방지와 효율 극대화

ygtoken 2025. 8. 20. 23:42
728x90

 

GPU 메모리 관리가 중요한 이유

 

GPU 클러스터 운영에서 가장 흔히 발생하는 오류 중 하나는 Out-of-Memory(OOM) 에러입니다. 학습(Job)이나 추론(Job)이 GPU 메모리를 초과해서 사용하려 하면 Job이 강제 종료되거나 성능이 급격히 저하됩니다. 특히 대규모 모델 학습에서는 GPU 메모리 한계가 시스템 안정성에 직접적으로 영향을 주며, 추론 환경에서는 Latency 증가로 이어집니다.

 

따라서 GPU 스케줄링은 단순히 GPU 개수만 고려하는 것이 아니라 GPU 메모리 사용량까지 고려해야 효율적이고 안정적인 운영이 가능합니다. 이를 GPU Memory-Aware Scheduling이라고 부릅니다.

 


 

GPU Memory-Aware Scheduling의 개념

 

GPU Memory-Aware Scheduling은 GPU를 단일 단위로 배정하는 대신, 메모리 단위로 세분화하여 Job을 할당하는 방식입니다. 예를 들어 80GB H100 GPU 하나를 여러 Job이 나누어 사용할 수 있도록 스케줄링하는 것입니다.

 

이 방식은 다음과 같은 원리로 작동합니다.

 

  1. Job 제출 시 GPU 메모리 요구량을 명시합니다.
  2. 스케줄러는 GPU 전체 메모리와 현재 사용량을 조회합니다.
  3. 여유 메모리가 충분한 GPU에 Job을 배치합니다.
  4. 필요 시 GPU 분할 기능(MIG, Multi-Instance GPU)을 활용합니다.

 


 

Slurm에서의 GPU 메모리 관리

 

Slurm은 gres.conf 파일을 통해 GPU 메모리를 자원 단위로 정의할 수 있습니다. 예를 들어 80GB GPU를 4개의 20GB 단위로 나눠 관리할 수 있습니다.

# /etc/slurm/gres.conf 예시
NodeName=node01 Name=gpu File=/dev/nvidia0 Cores=0-127 Memory=81920

사용자는 Job 제출 시 --gres=gpu:mem:20g 형태로 요청할 수 있습니다.

# GPU 메모리 단위 요청 예시
srun --gres=gpu:mem:20g python inference.py

이를 통해 하나의 GPU에서 여러 소규모 Job을 실행할 수 있어 자원 활용 효율이 극대화됩니다.

 


 

Kubernetes/Volcano와 MIG

 

Kubernetes에서는 기본적으로 GPU를 전체 단위로 할당하지만, NVIDIA의 MIG(Multi-Instance GPU) 기능을 활용하면 GPU를 물리적으로 분할해 메모리 단위 스케줄링이 가능합니다. Volcano 스케줄러와 연계하면 MIG 인스턴스를 Pod 단위로 배정할 수 있습니다.

apiVersion: v1
kind: Pod
metadata:
  name: inference-pod
spec:
  containers:
  - name: app
    image: inference:latest
    resources:
      limits:
        nvidia.com/mig-1g.10gb: 1

위 예시는 H100 GPU의 10GB MIG 인스턴스를 요청하는 Pod 정의입니다. 이렇게 하면 Inference Job은 필요한 만큼만 GPU 메모리를 점유하고, 나머지는 다른 Job이 활용할 수 있습니다.

 


 

실제 적용 사례

 

  • AI 스타트업: Inference Job이 GPU 전체를 차지하는 문제를 MIG로 해결해, 동일 서버에서 여러 모델을 동시에 서빙하도록 개선했습니다. GPU 자원 활용률이 60%에서 95%로 향상되었습니다.
  • 연구기관 HPC: 대규모 학습 Job에서 OOM 발생이 잦았으나, Slurm GPU 메모리 요청 기능과 Checkpointing을 병행하여 실패율을 30% 이상 줄였습니다.
  • 클라우드 GPUaaS 업체: 고객이 GPU 단위를 모두 차지하지 않고, 메모리 기반 과금 모델을 적용해 비용 절감형 서비스를 제공했습니다.

 


 

장점과 단점

 

장점

 

  • GPU 활용률이 극대화됩니다.
  • OOM 오류를 방지하여 Job 안정성이 높아집니다.
  • 다양한 Job이 동일 GPU에서 공존할 수 있습니다.

 

단점

 

  • MIG 지원이 없는 GPU에서는 소프트웨어 기반 관리가 필요합니다.
  • 메모리 단위로 쪼갤 경우 Job 성능 간 간섭(Interference)이 발생할 수 있습니다.
  • 관리자가 Job 제출 가이드와 모니터링 체계를 철저히 마련해야 합니다.

 


 

실무 팁과 주의사항

 

  1. 모니터링 필수
  2. nvidia-smi --query-gpu=memory.used,memory.total 명령과 Prometheus/Grafana를 연동해 GPU 메모리 사용량을 지속적으로 추적해야 합니다.
  3. MIG 적극 활용
  4. A100, H100 등 최신 GPU는 MIG 기능을 제공하므로, Inference 워크로드에는 반드시 적용하는 것이 효율적입니다.
  5. Job 제출 가이드 제공
  6. 사용자에게 GPU 메모리 요구량을 명시하도록 교육하고, 스케줄러가 이를 인식할 수 있도록 정책화해야 합니다.
  7. OOM 대비
  8. PyTorch, TensorFlow의 torch.cuda.empty_cache() 또는 Gradient Accumulation 같은 메모리 최적화 기법을 병행하면 안정성이 높아집니다.
  9. 정책과 과금 모델 연계
  10. GPU 메모리 단위 할당은 클라우드 서비스와 연계해 과금 단위를 세분화할 수 있어, 비용 최적화에도 효과적입니다.

 


 

정리하며

 

GPU Memory-Aware Scheduling은 HPC/GPU 클러스터 운영에서 안정성과 효율성을 동시에 확보하는 전략입니다. GPU 메모리 단위로 Job을 관리하면 OOM 발생을 줄이고, 다양한 워크로드를 균형 있게 배치할 수 있습니다. Slurm의 GRES, Kubernetes의 MIG, 그리고 모니터링/최적화 기법을 함께 적용하면 GPU 자원을 극대화하면서도 안정적인 서비스 품질을 보장할 수 있습니다.

 

 

728x90