최초 게시일: 2021-05-02 / 최근 수정일: 2023-10-01
계산 작업은 프론트엔드 서버 gmunu.kasi.re.kr
에서 계산 작업 명령어를 통해 실행한다.
gmunu 서버는 Slrum 작업 관리를 사용한다.
계산 작업을 올리기 위해서는 아래의 명령어를 실행한다.
$ sbatch your_jobscript
여기서 your_jobscript
는 계산 작업을 올리기 위한 파일로 주요 사용하는 옵션은 아래 표로 정리해 두었다.
옵션 | 설명 |
---|---|
--job-name |
작업 이름. |
--partition |
파티션 이름. 현재 gmunu 서버는 normal 파티션만 존재한다. |
--time |
계산 시간. 날짜-시간:분:초 형식으로 작성. |
--nodes |
계산에 총 필요한 노드 수. |
--ntasks |
계산에 필요한 총 MPI task 수. |
--cpus-per-task |
각 MPI task 당 필요한 cpu 수. |
--output |
stdout 파일 명 |
--error |
stderr 파일 명 |
--exclusive |
계산 작업이 노드를 점유하고 있을때 계산하지 않고 남아 있는 cpu가 있더라도 작업이 들어오지 못하게 함 |
--chdir |
계산이 일어나는 디렉토리와 잡을 올리는 디렉토리가 다를 경우 계산 디렉토리 지정 |
여기에서 --nodes
, --ntasks
, --cpus-per-task
옵션이 혼동 될 수 있어 몇가지 예를 들면 아래와 같다.
--nodes = 1
--ntasks = 1
--cpus-per-task = 128
--nodes = 2
--ntasks = 256
--cpus-per-task = 1
--nodes = 2
--ntasks = 32
--cpus-per-task = 8
더 자세한 내용은 gmunu에 접속 후 아래 내용을 입력하면 자세한 옵션이 표시된다.
$ man sbatch
단일노드 openmp 병렬화, MPI 병렬화, openmp + MPI 하이브리드 병렬화에 따라 잡스크립트 파일 내용이 달라진다. 아래 내용은 세가지 방법에 대한 잡스크립트 예시로 파일에 복사 붙여넣기 하여 사옹하면 된다.
#!/bin/bash
#SBATCH --job-name OpenMP_job
#SBATCH --partition normal
#SBATCH --time 7-00:00:00
#SBATCH --nodes 1
#SBATCH --ntasks 1
#SBATCH --cpus-per-task 128
#SBATCH --output OpenMP_job.o%j
#SBATCH --error OpenMP_job.e%j
module load gcc/12.1.0 # 컴파일시 사용한 모든 모듈을 부른다.
export OMP_NUM_THREADS=128 # 사용할 cpu 갯수 (--cpus-per-task 값과 같아야 함.)
echo "Working directory"
pwd
echo "List of Modules"
module list
echo "Starting"
date
srun ./OpenMP_job_executable
echo "Stopping"
date
#!/bin/bash
#SBATCH --job-name MPI_job
#SBATCH --partition normal
#SBATCH --time 7-00:00:00
#SBATCH --nodes 2
#SBATCH --ntasks 256
#SBATCH --cpus-per-task 1
#SBATCH --output MPI_job.o%j
#SBATCH --error MPI_job.e%j
module load gcc/12.1.0 openmpi/4.1.2 # 컴파일시 사용한 모든 모듈을 부른다.
echo "Working directory"
pwd
echo "List of Modules"
module list
echo "Starting"
date
srun --mpi=pmi2 ./MPI_job_executable
echo "Stopping"
date
#!/bin/bash
#SBATCH --job-name MPI_OpenMP_job
#SBATCH --partition normal
#SBATCH --time 7-00:00:00
#SBATCH --nodes 2
#SBATCH --ntasks 32
#SBATCH --cpus-per-task 8
#SBATCH --output MPI_OpenMP_job.o%j
#SBATCH --error MPI_OpenMP_job.e%j
module load gcc/12.1.0 openmpi/4.1.2 # 컴파일시 사용한 모든 모듈을 부른다.
export OMP_NUM_THREADS=8 # OpenMP에 사용할 cpu 갯수 (--cpus-per-task 값과 같아야 함.)
echo "Working directory"
pwd
echo "List of Modules"
module list
echo "Starting"
date
srun --mpi=pmi2 ./MPI_OpenMP_job_executable
echo "Stopping"
date
주의사항
--chdir
옵션을 이용해 디렉토리를 지정해 주어야 한다.그 외 다양한 명령어 정리
$ squeue
$ scancel JOBID
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
normal* up infinite 1 down* node3
normal* up infinite 2 idle node[1-2]
$ scontrol show partition
PartitionName=normal
AllowGroups=ALL AllowAccounts=ALL AllowQos=ALL
AllocNodes=ALL Default=YES QoS=N/A
DefaultTime=NONE DisableRootJobs=NO ExclusiveUser=NO GraceTime=0 Hidden=NO
MaxNodes=UNLIMITED MaxTime=UNLIMITED MinNodes=0 LLN=NO MaxCPUsPerNode=UNLIMITED
Nodes=node[1-3]
PriorityJobFactor=1 PriorityTier=1 RootOnly=NO ReqResv=NO OverSubscribe=EXCLUSIVE
OverTimeLimit=NONE PreemptMode=OFF
State=UP TotalCPUs=320 TotalNodes=3 SelectTypeParameters=NONE
JobDefaults=(null)
DefMemPerNode=UNLIMITED MaxMemPerNode=UNLIMITED