LabHub
배우기 러닝패스 코스

HPCとSlurm

GPUをGRESとして定義する

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

slurm.confgres.conf 를 함께 작성해 GPU 를 GRES 로 정의하고, 두 파일의 개수 일치를 검증합니다.

왜 중요한가

GRES 설정 오류 1위는 slurm.conf 의 GPU 개수와 gres.conf 의 장치 개수 불일치입니다. slurm.confgpu:a100:8 이라고 적었는데 gres.confFile=/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.confGresTypes=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/nvidia1Cores=0-15, /dev/nvidia2, /dev/nvidia3Cores=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 줄 수>

참고

GRES 타입 선언

/etc/slurm/slurm.confGresTypes=gpu 를 추가하세요.

slurm.conf 최상단 영역에 한 줄이면 됩니다. 여러 타입은 쉼표로 구분합니다.

노드별 GPU 선언

세 노드의 NodeName 줄에 Gres=gpu:a100:4 를 추가하세요.

NodeName 줄에 Gres= 를 추가합니다. 형식은 이름:타입:개수 입니다.

gres.conf 작성

/etc/slurm/gres.conf 를 만드세요. 세 노드 각각에 대해 NodeName=, Name=gpu, Type=a100, File= 을 포함한 줄이 있어야 하고, File 은 장치 4개를 가리켜야 합니다.

노드마다 한 줄씩 쓰거나 장치마다 한 줄씩 쓸 수 있습니다. 범위 표기를 쓰면 간결합니다.

NUMA 친화도 표기

gpu-node01 에 대해서는 장치를 하나씩 네 줄로 나눠 쓰고, /dev/nvidia0, /dev/nvidia1Cores=0-15, /dev/nvidia2, /dev/nvidia3Cores=16-31 로 지정하세요. (나머지 두 노드는 3번의 범위 표기 그대로 두어도 됩니다.)

각 GPU 에 가까운 코어 범위를 적습니다. 장치를 반씩 나눠 두 소켓에 배분하세요.

GPU 전용 파티션

/etc/slurm/slurm.conf 에 GPU 전용 파티션 gpu 를 추가하세요. Nodes= 는 세 노드 전부, MaxTime=72:00:00, State=UP 입니다.

기존 파티션과 별개로 하나 더 정의합니다. 최대 시간을 길게 잡으세요.

개수 일치 검증

/root/slurm/gres-check.txt 를 다음 두 줄로 만드세요. 값은 설정 파일을 파싱해 얻은 실제 개수입니다. SLURM_CONF_GPUS=<slurm.conf 의 Gres 로 선언된 GPU 총 개수> / GRES_CONF_DEVICES=<gres.conf 의 File 이 가리키는 장치 총 개수> 두 값이 같아야 합니다.

slurm.conf 의 Gres 개수 합과 gres.conf 의 File 범위에서 나오는 장치 수를 비교하세요.

AutoDetect 비교 메모

/root/slurm/autodetect.txt 를 다음 3줄로 만드세요. AUTODETECT=nvml / NEEDS=nvml-library / MANUAL_PRO=reproducible

자동 탐지와 수동 정의의 트레이드오프를 키=값으로 정리합니다.

GRES 설계 보고서

/root/slurm/gres-report.txt 를 다음 4줄로 만드세요. GRESTYPES=gpu / NODES=3 / GPUS_PER_NODE=4 / PARTITIONS=<slurm.conf 의 PartitionName 줄 수>

값은 작성한 설정을 파싱해 얻어야 합니다.