HPC & GPU Engineering/AI Infrastructure Engineer

[HPC/GPU 클러스터 운영 Zero to Hero 19편] Slurm에서 GPU Job 제출하기 – –gres 옵션과 GPU 리소스 예약

ygtoken 2025. 8. 10. 08:46
728x90

왜 GPU Job 제출 방식이 중요한가

 

HPC/GPU 클러스터 환경에서 GPU는 가장 귀중한 자원입니다.

GPU는 CPU·메모리와 달리 개수가 제한적이고, 특정 노드에만 장착되어 있어 정확한 요청과 예약이 필수입니다.

Slurm에서는 --gres(Generic Resources) 옵션을 사용해 GPU와 같은 특수 자원을 요청합니다.

 

잘못된 GPU 요청은 다음과 같은 문제를 유발할 수 있습니다.

 

  • GPU 없는 노드에 Job이 할당 → 실행 실패
  • 필요한 GPU보다 과도한 요청 → 자원 낭비
  • 동일 노드에서 GPU 경합 발생 → 성능 저하

 


 

1. –gres 옵션 기본 사용법

형식

--gres=<자원종류>:<개수>

 

GPU 1개 요청 예시

srun --gres=gpu:1 --time=01:00:00 nvidia-smi

 

GPU 4개 요청 예시

sbatch --gres=gpu:4 job_script.sh

 


 

2. gres.conf 설정 이해하기

 

운영자 관점에서 GPU를 Slurm에 인식시키려면 각 노드의 /etc/slurm/gres.conf에 GPU 자원을 정의해야 합니다.

# node01의 예시 (GPU 4개, 모델명 A100)
NodeName=node01 Name=gpu File=/dev/nvidia0
NodeName=node01 Name=gpu File=/dev/nvidia1
NodeName=node01 Name=gpu File=/dev/nvidia2
NodeName=node01 Name=gpu File=/dev/nvidia3

 

주의

  • slurm.confGresTypes=gpu와 일치해야 함
  • GPU 장치 파일(/dev/nvidia*) 번호와 순서 확인 필수

 


 

3. GPU Job Script 예시

#!/bin/bash
#SBATCH --job-name=gpu_job
#SBATCH --nodes=1
#SBATCH --gres=gpu:2
#SBATCH --cpus-per-task=8
#SBATCH --mem=64G
#SBATCH --time=12:00:00
#SBATCH --partition=gpu
#SBATCH --output=logs/%x_%j.out

module load cuda/12.2
nvidia-smi
python train.py --epochs 50 --batch-size 128

 


 

4. GPU 모델 지정 요청

Slurm에서는 GPU 모델별 요청이 가능합니다.

# A100 2개 요청
srun --gres=gpu:a100:2 my_job.sh

이 기능을 쓰려면 gres.conf에서 GPU 모델명을 지정해야 합니다.

NodeName=node01 Name=gpu:a100 File=/dev/nvidia0

 


 

5. MIG(Multi-Instance GPU)와 –gres

NVIDIA A100/H100 GPU에서는 MIG로 GPU를 논리적으로 분할 가능하며, Slurm에서도 이를 --gres로 요청할 수 있습니다.

# MIG 인스턴스 4개 요청
srun --gres=gpu:1g.5gb:4 my_job.sh

MIG 활용 시 장점

 

  • 여러 사용자가 동일 물리 GPU를 나눠 사용 가능
  • 작은 모델 학습·추론에 효율적

 


 

6. 멀티 노드 GPU Job

멀티 노드에서 GPU Job을 실행하려면 노드·태스크·GPU 요청을 조합해야 합니다.

#SBATCH --nodes=2
#SBATCH --ntasks-per-node=1
#SBATCH --gres=gpu:8

 

  • 2개의 노드에 각각 8개 GPU 할당
  • MPI 또는 NCCL을 사용한 분산 학습에 적합

 


 

7. GPU 예약 시 주의사항

  • 과다 요청 방지: 필요한 만큼만 요청해야 큐 대기 시간 단축
  • NUMA 구조 고려: 일부 노드에서는 CPU-GPU 연결 대역폭 차이가 있음
  • NVLink/NVSwitch 확인: 분산 학습 시 GPU 간 연결 토폴로지 중요
nvidia-smi topo -m

 

  • MIG 환경 확인: nvidia-smi -L로 실제 할당된 MIG 인스턴스 확인

 


 

8. 운영자 관점 GPU 정책 예시

정책 항목 설정 방법
GPU 모델별 파티션 slurm.conf에서 Partition 분리
GPU 개수 제한 MaxGRESPerUser QoS 정책 적용
특정 사용자 전용 GPU NodeName + AllowUsers 설정
MIG 자원 관리 gres.conf에 MIG 인스턴스 등록

 


 

HPC 운영 시나리오 예시

상황 명령어/설정 조치
특정 Job이 GPU 전부 점유 QoS 정책 제한 사용자별 GPU 최대 요청 제한
A100 Job만 실행하고 싶음 --gres=gpu:a100:N GPU 모델 지정
멀티 노드 분산 학습 --nodes=N --gres=gpu:M MPI/NCCL 환경 구성

 


 

장점과 단점

장점

  • GPU 자원을 세밀하게 제어 가능
  • 모델별, 개수별, MIG 단위까지 요청 가능
  • GPU 경합 최소화로 성능 최적화

 

단점

  • gres.conf와 slurm.conf 불일치 시 Job 실패
  • 잘못된 GPU 요청은 큐 대기 시간 증가

 


 

실무 팁과 주의사항

  • GPU Job 제출 전 sinfo -o "%N %G"로 노드별 GPU 정보 확인
  • MIG 환경에서는 Slurm 설정 변경 후 NVIDIA 드라이버와 동기화 필요
  • GPU Job 실패 시 scontrol show job JOBID로 자원 할당 내역 확인

 


 

정리하며

--gres 옵션은 Slurm에서 GPU 자원을 요청·예약하는 핵심 기능입니다.

정확한 자원 요청과 운영 정책 설계는 GPU 활용 효율을 극대화하며, 큐 대기 시간과 자원 경합을 줄입니다.

다음 20편에서는 Slurm QoS와 Fairshare – 자원 우선순위 정책 설계를 다뤄, 다수 사용자 환경에서 공정하고 효율적인 GPU/CPU 자원 배분 방법을 소개하겠습니다.

 

728x90