MPI 환경설정 및 작업 제출 방법(2021.03)

슈퍼컴퓨팅인프라센터 2019. 4. 30. 09:52

뉴론 시스템에는 mvapich2와 openmpi가 설치되어 있습니다. 이 문서에서는 MPI 기반 작업들을 slurm 스케쥴러를 이용해 작업 제출하는 방법에 대해 기술하고 있습니다.

가. mvapich2로 빌드된 애플리케이션의 작업 제출

뉴론 시스템에 설치되어 있는 mvapich2를 활용하기 위해서는 아래와 같은 module 명령으로 사용가능한 모듈 목록 및 모듈 사용법을 확인합니다.

2019년 5월 현재 뉴론 시스템에는 mvapich2-2.3이 설치되어 있으며, 이것은 gcc-4.8.5, intel-18.0.2, pgi-19.1 컴파일러로 빌드한 버전들이 존재합니다. 이를 사용하기 위해서는 위에 언급된 바와 같이 다음과 같이 module 명령어를 사용합니다.

$ module load intel/18.0.2 cuda/10.0 cudampi/mvapich2-2.3

작업제출 방법(배치 작업용)은 다음과 같습니다.

$ sbatch ./job_script.sh 

[작업스크립트 예제]

#!/bin/sh

#SBATCH -J test

#SBATCH -p ivy_v100_2

#SBATCH -N 2

#SBATCH -n 2

#SBATCH -o test.o%j

#SBATCH -e test.e%j

#SBATCH --time 00:30:00

#SBATCH --gres=gpu

srun ./hello

# 작업 이름 # partition 이름 # 총 필요한 컴퓨팅 노드 수 # 총 필요한 프로세스 수 # stdout 파일 명 # stderr 파일 명 # 최대 작업 시간 (Wall Time Clock Limit)

# GPU를 사용하기 위한 옵션

# hello는 MPI기반 어플리케이션

인터랙티브 작업 제출 방법은 다음과 같습니다.

1. 자원 할당

* 설명 : ivy_v100_2 파티션의 gpu 2노드(각각 2core, 2gpu)를 interactive 용도로 사용

$ salloc --partition=ivy_v100_2 -N 2 -n 4 --tasks-per-node=2 --gres=gpu:2 --comment={SBATCH 옵션이름} 

※ Application별 SBATCH 옵션 이름표 참고

※ 2시간 이상 미사용시 타임아웃으로 작업이 종료되고 자원이 회수됨, 인터렉티브 작업의 walltime은 최대 12시간으로 고정됨

2. 작업 실행

$ srun ./(실행파일) (실행옵션) 

3. 헤드 노드 접속

$ srun --pty bash 

※ 2시간 이상 키보드 미입력시 타임아웃으로 작업이 종료되고 자원이 회수됨\ ※ 헤드 노드에 접속한 후에는 srun을 통한 작업 제출 불가능

4. 진입한 노드에서 나가기 또는 자원 할당 취소

$ exit

5. 커맨드를 통한 작업 삭제

$ scancel [Job_ID]

※ Job ID는 squeue 명령으로 확인 가능

나. openmpi로 빌드된 애플리케이션의 작업 제출

mvapich2와 마찬가지로 뉴론 시스템에 설치된 openmpi를 사용하기 위해서는 다음과 같은 module 명령을 이용해 사용가능한 목록 및 사용방법을 확인합니다.

$ module av
 
----------------------------------------------- /apps/Modules/modulefiles/compilers -----------------------------------------------
gcc/4.8.5    intel/18.0.2 pgi/19.1
 
----------------------------------------------- /apps/Modules/modulefiles/libraries -----------------------------------------------
hdf4/4.2.13  hdf5/1.10.2  lapack/3.7.0 netcdf/4.6.1
 
-------------------------------------------------- /apps/Modules/modulefiles/mpi --------------------------------------------------
cudampi/mvapich2-2.3  cudampi/openmpi-3.1.0 mpi/impi-18.0.2       mpi/mvapich2-2.3      mpi/openmpi-3.1.0
 
------------------------------------------ /apps/Modules/modulefiles/libraries_using_mpi ------------------------------------------
fftw_mpi/2.1.5 fftw_mpi/3.3.7
 
--------------------------------------------- /apps/Modules/modulefiles/applications ----------------------------------------------
cmake/3.12.3        gaussian/g16.b01    java/openjdk-11.0.1 python/2.7.15       qe/6.4.1_v100       singularity/3.6.4
cuda/10.0           gaussian/g16.c01    lammps/16Mar18      python/3.7.1        R/3.5.0
gaussian/g16        gromacs/2016.4      namd/2.12           qe/6.4.1_k40        singularity/3.1.0
 
-------------------------------------------- /apps/Modules/modulefiles/conda_packages ---------------------------------------------
conda/caffe_1.0       conda/pytorch_1.0     conda/tensorflow_1.13

2019년 5월 현재 뉴론 시스템에는 openmpi-3.1.0 가 설치되어 있으며, 이것은 gcc-4.8.5, intel-18.0.2, pgi-19.1 컴파일러로 빌드되어 있습니다. 이를 사용하기 위해서는 다음과 같은 module 명령어를 사용합니다.

$ module load intel/18.0.2 cuda/10.0 cudampi/openmpi-3.1.0

작업제출 방법(배치 작업용)은 다음과 같습니다.

$ sbatch ./job_script.sh 

[작업스크립트 예제]

#!/bin/sh

#SBATCH -J test

#SBATCH -p ivy_v100_2

#SBATCH -N 2

#SBATCH -n 2

#SBATCH -o test.o%j

#SBATCH -e test.e%j

#SBATCH --time 00:30:00

#SBATCH --gres=gpu

srun ./hello

# 작업 이름 # partition 이름 # 총 필요한 컴퓨팅 노드 수 # 총 필요한 프로세스 수 # stdout 파일 명 # stderr 파일 명 # 최대 작업 시간 (Wall Time Clock Limit)

# GPU를 사용하기 위한 옵션

# hello는 MPI기반 어플리케이션

인터랙티브 작업 제출 방법은 다음과 같습니다.

1. 자원 할당

* 설명 : ivy_v100_2 파티션의 gpu 2노드(각각 2core, 2gpu)를 interactive 용도로 사용

$ salloc --partition=ivy_v100_2 -N 2 -n 4 --tasks-per-node=2 --gres=gpu:2 --comment={SBATCH 옵션이름} 

※ Application별 SBATCH 옵션 이름표 참고

※ 2시간 이상 미사용시 타임아웃으로 작업이 종료되고 자원이 회수됨, 인터렉티브 작업의 walltime은 최대 12시간으로 고정됨

2. 작업 실행

$ srun ./(실행파일) (실행옵션) 

3. 헤드 노드 접속

$ srun --pty bash 

※ 2시간 이상 키보드 미입력시 타임아웃으로 작업이 종료되고 자원이 회수됨\ ※ 헤드 노드에 접속한 후에는 srun을 통한 작업 제출 불가능

4. 진입한 노드에서 나가기 또는 자원 할당 취소

$ exit

5. 커맨드를 통한 작업 삭제

$ scancel [Job_ID]

※ Job ID는 squeue 명령으로 확인 가능

Last updated