HPC 사용 매뉴얼

HPC@SIC KHU

경희대학교 과학지능융합전공 HPC 서버

공지사항

  • 공지사항을 불러오는 중입니다…

1. 융합전공 HPC 서버 정보

1.1 HPC 사용을 위한 기초 정보

본 HPC 서버는 이과대학 과학지능정보 융합전공의 학부 교육과 실습을 주된 목적으로 운영됩니다. 수업 운영에 지장이 없는 유휴 시간에는 융합전공 수강생, 참여 학과의 교수·조교·연구원 및 별도의 사용 신청을 승인받은 사용자가 연구 목적의 간단한 계산에 활용할 수 있습니다.

서버는 1대의 로그인 노드와 4대의 계산 노드로 이루어져있습니다. SSH를 통해 로그인 노드에 접속하여 프로그램 코드 작성이나 가벼운 코드를 수행할수 있으며, GPU 자원 사용을 포함한 계산량이 많은 작업은 Slurm을 통해 계산 노드 자원을 할당받아 사용할 수 있습니다.
Slurm을 통해 제출되지 않은 작업 및 자원 독과점으로 판단되는 작업은 관리자가 임의로 종료할 수 있습니다.

2026년 9월 기준 컴퓨팅 자원은 아래와 같습니다.

sichpc

로그인 노드
  • Intel Xeon Silver 4309Y (2.8–3.6 GHz, 32 threads)
  • RAM 64 GB
  • Storage (/home) 74 TB

node01–04

GPU 계산 노드
  • Intel Xeon Silver 4310 (2.1–3.3 GHz, 48 threads)
  • RAM 약 120 GB (Slurm 할당 기준)
  • Nvidia GeForce RTX 3090 (노드당 2장, VRAM 24 GB)

1.2 계정 생성하기

모든 계정의 기본 유효기간은 계정을 발급받은 해당 학기까지입니다. 다음 학기에도 계속 사용하려면 관리자에게 계정 연장을 요청해 주세요.

2. 사용방법

2.1 서버 접속하기

터미널에서 아래 명령어로 로그인 노드에 접속합니다.

[LOCAL_ID@localhost ~]$ ssh -p 23432 <USER_ID>@sichpc.khu.ac.kr 
[USER_ID@sichpc ~]$

2.2 conda / mamba로 가상환경 쓰기

Python 패키지는 conda와 mamba로 관리합니다. 둘은 같은 환경을 보며, 역할만 다릅니다. Java·R 등은 관리자에게 문의하세요.

할 일 명령
환경 켜기 / 끄기 conda activate / conda deactivate
환경 만들기, 패키지 설치 mamba create / mamba install
환경 목록 conda env list 또는 mamba env list

개인 환경은 자동으로 홈(~/.conda/envs)에 만들어집니다. 공유 경로 /opt/shared에는 설치하지 마세요. 수업·실험은 공유 base가 아니라 자기 환경을 만들어 쓰는 것을 권장합니다.

2.2.1 개인 환경 예제 (myenv)

[USER_ID@sichpc ~]$ mamba create -n myenv python=3.12 numpy pandas -y
[USER_ID@sichpc ~]$ conda activate myenv
(myenv) [USER_ID@sichpc ~]$ which python
/home/USER_ID/.conda/envs/myenv/bin/python
(myenv) [USER_ID@sichpc ~]$ python -c "import numpy, pandas; print(numpy.__version__)"
(myenv) [USER_ID@sichpc ~]$ conda deactivate

만들 때 출력의 Prefix:가 /home/아이디/.conda/envs/myenv여야 합니다. 패키지를 더 넣을 때는 환경이 켜진 상태에서 mamba install matplotlib -y를 사용합니다.

3. Slurm 사용하기

3.1 개요

GPU는 계산 노드에만 설치되어 있으므로 GPU 작업은 Slurm 사용이 필수입니다.
현재 partition 이름은 sichpc입니다. 학기마다 달라질 수 있으니 제출 전에 sinfo -s로 확인하세요.

3.2 명령어

작업 흐름에 따라 자주 쓰는 명령어입니다. 아래 검색창으로 명령어·옵션을 필터링할 수 있습니다.

명령어 설명 사용 예시
sinfo 사용 가능한 partition과 노드 상태를 확인합니다.
작업 제출 전 partition 이름을 확인할 때 가장 먼저 사용합니다.
sinfo
sinfo -s
sinfo -p sichpc
srun 명령어를 계산 노드에서 즉시 실행하고 결과를 터미널에 출력합니다.
짧은 테스트·GPU 확인에 적합하며, 대기 job이 있으면 실행 가능할 때까지 터미널이 블록됩니다.
srun -p sichpc hostname
srun -p sichpc -G1 -t 00:10:00 nvidia-smi
srun -p sichpc python train.py
sbatch 셸 스크립트를 batch job으로 제출합니다.
stdout/stderr는 지정한 로그 파일로 저장되며, 제출 후 터미널을 계속 사용할 수 있습니다.
sbatch -J MYJOB -p sichpc script.sh
sbatch -a 0-9 script.sh
salloc 계산 노드에 자원만 할당받아 대화형(interactive) 작업을 수행합니다.
할당 후 ssh $SLURM_JOB_NODELIST로 계산 노드에 접속할 수 있습니다.
exit로 빠져나오면 자원이 자동 해제됩니다.
salloc -p sichpc -G1 -t 01:00:00
ssh $SLURM_JOB_NODELIST

squeue 상태 코드: PD 대기 · R 실행 중 · CG 종료 중 · CA 취소됨 · F 실패

명령어 설명 사용 예시
squeue 제출된 job 목록과 상태를 확인합니다.
대기(PD) 또는 실행(R) 중인 job을 볼 수 있습니다.
squeue
squeue -u $USER
squeue -j <job_id>
scontrol show job 특정 job의 상세 정보를 확인합니다.
대기 중인 이유, 할당 GPU, 시간 제한 등을 파악할 때 사용합니다.
scontrol show job <job_id>
로그 파일 끝난 job은 #SBATCH -o / -e로 지정한 로그로 확인합니다.
ls logs/
cat logs/OUTPUT_<job_id>.log
scancel 실행 중이거나 대기 중인 job을 취소합니다. scancel <job_id>
scancel -u $USER
scancel -n <job_name>

srun, sbatch, salloc 공통 옵션입니다. sbatch 스크립트 안에서는 #SBATCH 지시자로 동일하게 지정할 수 있습니다.

Option Input Description
-J, --job-name <job_name> job 이름 (squeue, scancel -n 등에서 사용)
-p, --partition sichpc partition(작업 공간) 이름 — 현재 sichpc, sinfo -s로 확인
-G, --gpus <count> 할당받을 GPU 개수 (노드당 최대 2)
-c, --cpus-per-task <count> task당 CPU 코어 수
--mem <size> 메모리 제한 (예: 16G)
-t, --time HH:MM:SS 최대 실행 시간
-o, --output <pattern> stdout 로그 파일 (예: OUTPUT_%j.log)
-e, --error <pattern> stderr 로그 파일
-a, --array <range> 배열 job 범위 (예: 0-9)
  • partition 확인: sinfo -s
  • GPU 테스트: srun -p sichpc -G1 -t 00:10:00 nvidia-smi
  • batch 제출: sbatch -J MYJOB -p sichpc script.sh
  • 내 job 확인: squeue -u $USER
  • job 상세: scontrol show job <job_id>
  • job 취소: scancel <job_id>
  • 완료 확인: cat logs/OUTPUT_<job_id>.log

3.3 srun 예시

커맨드 라인에서 바로 실행하는 방식입니다. stdout·stderr가 터미널에 출력되며, job이 시작될 때까지 터미널을 사용할 수 없습니다. GPU 동작 확인이나 짧은 테스트에 적합합니다.

[USER_ID@sichpc ~]$ srun -J <jobname> -p sichpc -G1 -t 00:10:00 <executable> [args ...]
# 예: srun -J gputest -p sichpc -G1 -t 00:10:00 nvidia-smi
something may be printed out
[USER_ID@sichpc ~]$

3.4 salloc 예시

GPU 노드에서 대화형으로 작업할 때 사용합니다. 자원 할당 후 계산 노드에 SSH 접속하고, 작업이 끝나면 exit로 노드와 할당을 순서대로 해제합니다.

salloc은 사용을 마친 뒤 직접 할당을 해제해야 합니다. 로그인 노드에서 exit로 salloc 세션을 종료하지 않으면 GPU·CPU 자원이 계속 점유되어 다른 사용자가 해당 자원을 사용할 수 없습니다. 작업이 끝나면 반드시 할당 해제를 해 주세요.
[USER_ID@sichpc ~]$ salloc -p sichpc -G1 -t 01:00:00
salloc: Granted job allocation 12346
[USER_ID@sichpc ~]$ ssh $SLURM_JOB_NODELIST
[USER_ID@node01 ~]$ nvidia-smi
[USER_ID@node01 ~]$ exit          # 계산 노드에서 빠져나오기
[USER_ID@sichpc ~]$ exit          # salloc 할당 해제
salloc: Relinquishing job allocation 12346

3.5 sbatch 예시

셸 스크립트로 job을 제출하는 방식입니다. stdout·stderr는 로그 파일로 저장되며, 제출 후에도 터미널을 계속 사용할 수 있습니다. #SBATCH 지시자로 스크립트 안에 옵션을 미리 지정할 수 있습니다.

아래 예시는 원주율을 계산하는 Python 스크립트를 계산 노드에서 10개(array job) 실행하고, 결과를 logs/OUTPUT_<job_id>_<task_id>.log 파일로 저장합니다. 실행 전에 2.2절대로 개인 환경 myenv를 만들어 두세요. numpy만 사용합니다.

compute_pi.py 다운로드
#!/usr/bin/env python
import os
import numpy as np

def getenv(var, default=""):
    return os.environ.get(var, str(default))

job_id = int(getenv("SLURM_JOB_ID", 0))
task_id = int(getenv("SLURM_ARRAY_TASK_ID", 0))
np.random.seed(job_id * 1000 + task_id)

n = 100000
rx = np.random.uniform(-1, 1, n)
ry = np.random.uniform(-1, 1, n)
n_in = np.sum(rx * rx + ry * ry < 1)

print(n_in, n, n_in / n * 4)
script.sh 다운로드
#!/bin/bash

#SBATCH -J MYTESTJOB
#SBATCH -p sichpc
#SBATCH -c 2
#SBATCH --mem=4G
#SBATCH -t 00:10:00
#SBATCH -o logs/OUTPUT_%A_%a.log
#SBATCH -e logs/OUTPUT_%A_%a.err

hostname

source /opt/shared/miniconda3/etc/profile.d/conda.sh
conda activate myenv

python compute_pi.py
[USER_ID@sichpc ~]$ mkdir -p logs
[USER_ID@sichpc ~]$ sbatch -a 0-9 script.sh
Submitted batch job 12345
[USER_ID@sichpc ~]$ squeue -u $USER
[USER_ID@sichpc ~]$ cat logs/OUTPUT_12345_0.log

4. AI에게 맡기기

리눅스나 Slurm이 익숙하지 않으면 AI에게 아래 글을 대화 맨 위에 그대로 붙여 넣은 뒤, 하고 싶은 일만 한두 줄 이어서 적으면 됩니다.

ai_prompt.txt 다운로드
너는 경희대학교 과학지능융합전공 HPC(SICHPC)에서 나를 돕는 조교다.
나는 리눅스·Slurm이 익숙하지 않다. 추측하지 말고 아래 사실만 기준으로 답하고,
명령은 복사해 실행할 수 있게 짧게 줘. 로그인 노드에서 GPU·긴 계산을 시키지 마라.

## 클러스터
- 로그인 노드: sichpc.khu.ac.kr (GPU 없음). SSH: ssh -p 23432 <USER_ID>@sichpc.khu.ac.kr
- 계산 노드 4대(node01–04)를 여러 사람이 나눠 쓴다. 노드당 GPU 2장(RTX 3090, VRAM 24GB).
- GPU·긴 계산은 반드시 Slurm. 계산 노드 SSH는 할당 후에만 (ssh $SLURM_JOB_NODELIST).
- 매뉴얼: https://sichpc.khu.ac.kr/  문의: siconv@khu.ac.kr

## 자원 — 반드시 지킬 것 (수업용 공유 클러스터)
- 기본은 항상 최소: 노드 1대, CPU 2개, 메모리 8G, 시간 1시간. 기본 템플릿에 GPU를 넣지 마라.
- GPU가 필요 없으면 -G, --gres=gpu 를 절대 넣지 마라. (numpy/pandas/sklearn, 전처리, CPU 학습 등)
- GPU는 코드가 CUDA를 쓰거나 사용자가 GPU·학습(딥러닝)·nvidia-smi를 명시한 경우에만 1장.
- 애매하면 GPU를 넣지 말고, 필요한지 한 줄로 물어라.
- 사용자가 "최대", "전부", "빨리", "노드 다"라고 해도 노드를 2대 이상 잡지 마라.
  쓰지 말 것: -N 2 이상, --nodes, --exclusive, -w node01,node02, --gres=gpu:2, -G 2 이상, -c 16 이상, --mem=32G 이상.
- 동시에 돌아가는 GPU job은 1개만. 이미 GPU job이 있으면 새로 제출하지 말고 squeue를 보게 하거나 끝난 뒤 제출하라.
- array job(-a)은 사용자가 명시하지 않으면 만들지 마라. 만들어도 CPU-only, 4개 이하. GPU array 금지.
- 학습·실험은 sbatch. salloc은 짧은 디버깅만(30분). GPU 디버깅일 때만 -G1. 끝나면 계산 노드 exit 후 로그인 노드에서 한 번 더 exit.
- -t 없는 job을 만들지 마라. 테스트 10분, 학습 기본 1시간. 사용자가 더 달라고 해도 한 job당 4시간을 넘기지 마라.
- 제출 전에 squeue -u $USER 와 squeue -p sichpc 를 안내하라.

## Slurm
- 파티션: sichpc (sinfo -s 로 확인)
- 내 job: squeue -u $USER  / 취소: scancel <jobid>
- CPU 테스트: srun -p sichpc -c 2 --mem=4G -t 00:10:00 hostname
- GPU 확인: srun -p sichpc -G1 -c 2 --mem=4G -t 00:10:00 nvidia-smi
- 대화형(CPU): salloc -p sichpc -c 2 --mem=8G -t 00:30:00 후 ssh $SLURM_JOB_NODELIST
- 대화형(GPU가 필요할 때만): salloc -p sichpc -G1 -c 2 --mem=8G -t 00:30:00
- sacct 는 쓸 수 없다. 끝난 job은 #SBATCH -o/-e 로그로 확인

## conda / mamba
- 공식 prefix: /opt/shared/miniconda3
- 환경 켜기/끄기: conda activate / conda deactivate
- 환경 생성·패키지: mamba create / mamba install
- mamba activate, 그냥 conda init, mamba shell init 하지 말 것
- 개인 환경은 ~/.conda/envs 에 자동 생성. /opt/shared 에 설치하지 말 것
- mamba create -n myenv python=3.12 numpy pandas -y
- sbatch 안: source /opt/shared/miniconda3/etc/profile.d/conda.sh
  conda activate myenv

## sbatch 기본 템플릿 (CPU. 이것보다 크게 쓰지 마라)
#!/bin/bash
#SBATCH -J JOBNAME
#SBATCH -p sichpc
#SBATCH -c 2
#SBATCH --mem=8G
#SBATCH -t 01:00:00
#SBATCH -o logs/%x_%j.out
#SBATCH -e logs/%x_%j.err

source /opt/shared/miniconda3/etc/profile.d/conda.sh
conda activate myenv

python my_script.py

## GPU가 필요할 때만 위 템플릿에 이 한 줄을 추가
#SBATCH -G 1

## 하지 말 것
- 로그인 노드에서 학습·전처리 대량 실행
- 할당 없이 ssh node01
- /opt/shared 에 conda/mamba install
- CPU job에 GPU 할당 (-G, --gres=gpu)
- 시간 제한 없는 GPU job, 끝난 salloc 방치
- 한 사람이 여러 GPU·여러 노드를 동시에 점유