Skip to content

14.5 Slurm 접근 및 작업 실행

Slurm은 독립된 배치 작업 클러스터입니다. 작업 스크립트를 제출하면 스케줄러가 자원을 배정해 실행합니다. 본 환경은 선입선출(FIFO) 로 큐를 처리합니다.

14.5.1 Slurm 로그인 노드 접속

JupyterHub의 Terminal에서 Slurm 로그인 노드로 SSH 접속합니다.

bash
ssh -p ${SLURM_SSH_PORT} ${LDAP_USER}@${SLURM_LOGIN_HOST}

접속 후 본인 계정과 공유 스토리지가 보이는지 확인합니다.

bash
whoami
ls -ld ${WORK_DIR}

📸 화면 캡처

<Slurm 로그인 노드 접속 후 프롬프트 화면>

14.5.2 클러스터 상태 확인

bash
sinfo                      # 파티션/노드 상태 한눈에
sinfo -N -l                # 노드별 상세
squeue                     # 전체 대기/실행 작업
squeue -u ${LDAP_USER}     # 내 작업만

sinfo로 사용 가능한 파티션(${SLURM_PARTITION})과 가용 노드 수를 먼저 확인하면 적절한 자원 요청에 도움이 됩니다.

📸 화면

<sinfo / squeue 출력 예시>

14.5.3 작업 스크립트 작성 (sbatch)

배치 작업은 #SBATCH 지시문으로 자원을 요청하는 스크립트로 작성합니다. 스크립트는 공유 스토리지(${WORK_DIR}/scripts)에 둡니다.

${WORK_DIR}/scripts/job_example.sh:

bash
#!/bin/bash
#SBATCH --job-name=analysis_test          # 작업 이름(식별용)
#SBATCH --partition=PARTITION_NAME        # ${SLURM_PARTITION} 값으로 치환
#SBATCH --nodes=1                         # 노드 수
#SBATCH --ntasks=1                        # 태스크 수
#SBATCH --cpus-per-task=4                 # 태스크당 CPU
#SBATCH --mem=16G                         # 메모리
#SBATCH --time=02:00:00                   # 최대 실행 시간(시:분:초)
#SBATCH --output=LOG_DIR/%x_%j.out        # 표준출력 (%x=작업명, %j=작업ID)
#SBATCH --error=LOG_DIR/%x_%j.err         # 표준에러

set -euo pipefail

# conda 환경 활성화 (Pod와 동일한 사내 conda 사용)
source ${WORK_DIR}/env.sh
conda activate ${CONDA_ENV_DIR}/analysis

echo "시작: $(date) / 노드: $(hostname)"

# 실제 분석 실행 (스크립트·데이터는 공유 스토리지 경로 그대로)
python ${WORK_DIR}/scripts/analyze.py \
  --input ${DATA_DIR}/sample.txt \
  --output ${WORK_DIR}/results/out.txt

echo "종료: $(date)"

자원 요청은 실제 필요량에 맞게

--time, --mem, --cpus-per-task를 과도하게 크게 잡으면 스케줄링이 늦어지고 다른 사용자의 작업을 막습니다. 반대로 너무 작으면 시간 초과/메모리 부족으로 작업이 죽습니다. 처음에는 소규모로 시험한 뒤 실제 사용량을 보고 조정하세요(14.9.4 자원·효율 팁).

경로 치환

위 예시의 PARTITION_NAME, LOG_DIR#SBATCH 지시문 특성상 변수 확장이 제한적이라 직접 값으로 적는 것이 안전합니다(예: --output=/.../logs/%x_%j.out). 본문 그대로 두지 말고 실제 경로값으로 치환하세요.

14.5.4 작업 제출·모니터링·취소

bash
# 제출
sbatch ${WORK_DIR}/scripts/job_example.sh
# -> Submitted batch job 12345  (작업 ID 확인)

# 대기/실행 상태 확인
squeue -u ${LDAP_USER}

# 작업 상세/사용량 (종료 후 포함)
sacct -j 12345 --format=JobID,JobName,State,Elapsed,MaxRSS,ReqMem

# 취소
scancel 12345
scancel -u ${LDAP_USER}      # 내 작업 전체 취소

작업 상태 약어: PD(대기) R(실행) CG(정리중) CD(완료) F(실패).

14.5.5 대화형 작업 (srun / salloc)

디버깅이나 짧은 시험 실행은 대화형으로 자원을 받아 진행합니다.

bash
# 자원을 받아 즉시 명령 실행
srun --partition=${SLURM_PARTITION} --cpus-per-task=4 --mem=8G --time=00:30:00 --pty bash

# 또는 자원만 먼저 할당받고 작업
salloc --partition=${SLURM_PARTITION} --cpus-per-task=4 --mem=8G --time=00:30:00

대화형 세션 점유 주의

대화형 세션은 사용하는 동안 자원을 계속 점유합니다. 디버깅이 끝나면 즉시 종료(exit) 하여 자원을 반납하세요. 장시간 계산은 대화형이 아니라 sbatch 배치로 돌리는 것이 원칙입니다.

14.5.6 로그·결과 위치

  • 표준출력/에러: #SBATCH --output/--error에 지정한 공유 스토리지 경로(${WORK_DIR}/logs)
  • 결과물: 스크립트에서 ${WORK_DIR}/results 등 공유 스토리지에 저장

공유 스토리지에 기록하므로 Pod(JupyterHub)에서도 같은 경로로 즉시 결과를 확인할 수 있습니다.

보안 주의

로그 파일에 민감 데이터(샘플 식별자, 경로에 포함된 개인정보 등)가 남지 않도록 출력 내용을 점검하고, 불필요한 로그는 분석 종료 후 정리하세요.