HPC 와 Slurm · 노드·파티션·GRES 정의 · 실습
GPU 를 GRES 로 정의하기
목표
slurm.conf 와 gres.conf 를 함께 작성해 GPU 를 GRES 로 정의하고, 두 파일의 개수 일치를 검증합니다.
왜 중요한가
GRES 설정 오류 1위는 slurm.conf 의 GPU 개수와 gres.conf 의 장치 개수 불일치입니다. slurm.conf 에 gpu:a100:8 이라고 적었는데 gres.conf 에 File=/dev/nvidia[0-3] 이면 4개뿐이고, slurmd 가 count reported lower than configured 를 남기며 노드를 DRAIN 시킵니다. 이 검증은 배포 전에 스크립트로 자동화해야 하는 대표적인 항목입니다.
그리고 Cores= 로 NUMA 친화도를 알려 주면 Slurm 이 GPU 와 CPU 를 같은 소켓에 배치해 PCIe 왕복을 줄입니다. 대규모 학습에서 이 차이가 몇 퍼센트씩 납니다.
앞 실습(slurm-conf)에서 만든 /etc/slurm/slurm.conf 를 이어서 씁니다.
단계
1. /etc/slurm/slurm.conf 에 GresTypes=gpu 를 추가하세요.
2. 세 노드의 NodeName 줄에 Gres=gpu:a100:4 를 추가하세요.
3. /etc/slurm/gres.conf 를 만드세요. 세 노드 각각에 대해 NodeName=, Name=gpu, Type=a100, File= 을 포함한 줄이 있어야 하고, File 은 장치 4개를 가리켜야 합니다.
4. gpu-node01 에 대해서는 장치를 하나씩 네 줄로 나눠 쓰고, /dev/nvidia0, /dev/nvidia1 은 Cores=0-15, /dev/nvidia2, /dev/nvidia3 은 Cores=16-31 로 지정하세요. (나머지 두 노드는 3번의 범위 표기 그대로 두어도 됩니다.)
5. /etc/slurm/slurm.conf 에 GPU 전용 파티션 gpu 를 추가하세요. Nodes= 는 세 노드 전부, MaxTime=72:00:00, State=UP 입니다.
6. /root/slurm/gres-check.txt 를 다음 두 줄로 만드세요. 값은 설정 파일을 파싱해 얻은 실제 개수입니다.SLURM_CONF_GPUS=<slurm.conf 의 Gres 로 선언된 GPU 총 개수> / GRES_CONF_DEVICES=<gres.conf 의 File 이 가리키는 장치 총 개수>
두 값이 같아야 합니다.
7. /root/slurm/autodetect.txt 를 다음 3줄로 만드세요.AUTODETECT=nvml / NEEDS=nvml-library / MANUAL_PRO=reproducible
8. /root/slurm/gres-report.txt 를 다음 4줄로 만드세요.GRESTYPES=gpu / NODES=3 / GPUS_PER_NODE=4 / PARTITIONS=<slurm.conf 의 PartitionName 줄 수>
참고
File=/dev/nvidia[0-3]는 장치 4개를 뜻합니다. 범위 표기를 전개해 세어야 합니다.- 실제 토폴로지는
nvidia-smi topo -m으로 확인합니다. - 6번의 개수 계산은 셸이나 python3 로 파싱해 구하세요. 손으로 세도 되지만 스크립트로 하면 8번까지 재사용됩니다.
- 흔한 실수 1: 2번에서 노드 하나만 고치고 나머지를 빠뜨리는 경우. 세 노드 모두 필요합니다.
- 흔한 실수 2: 4번에서 장치를 네 줄로 나눈 뒤 3번의 범위 표기 줄을 지우지 않아
gpu-node01의 장치가 8개로 세어지는 경우.
단계 8개
- GRES 타입 선언
- 노드별 GPU 선언
- gres.conf 작성
- NUMA 친화도 표기
- GPU 전용 파티션
- 개수 일치 검증
- AutoDetect 비교 메모
- GRES 설계 보고서