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.conf의 GresTypes=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