PLSI 자원사용을위한가이드 2010 년 9 월 KISTI 슈퍼컴퓨팅본부슈퍼컴퓨터인프라팀 1
목차 PLSI 사업과 PLSI 자원 1. PLSI 사업 4 2. PLSI 자원 4 PLSI 자원현황 1. PLSI 자원개요 6 2. PLSI 자원연동구성 7 3. PLSI 자원통합소프트웨어스택 8 PLSI 자원사용준비하기 1. 계정발급 10 2. 로그인방법 11 3. 로그인후해야할일 1 패스워드변경 13 2 사용자 shell변경 ( 옵션 ) 14 3 환경변수설정 - 개요 15 - module 사용법 16 - platforms별 module Names 17 4. 파일시스템 1 글로벌파일시스템 18 2 로컬파일시스템 19 PLSI 자원사용하기 1. 컴파일하기전 21 2. 컴파일하기 1 Serial code 컴파일 22 2 OpenMP code 컴파일 24 3 MPI code 컴파일 26 3. 작업제출준비 28 1 Job command file의문법 30 2 Job command file 의주요키워드 31 3 Job command File 작성시주의사항 32 4 class 이름 33 5 리모트클러스터이름 36 4. 작업제출 37 5. 작업관리 1 작업상태조회 38 2 노드별가용 CPU 알아보기 39 3 class별상태조회 39 4 작업취소 40 5 작업중지 41 [ 부록 1]Platform 별 Job command file 작성예제 42 [ 부록 2] 응용프로그램별 Job command file 작성예제 46 2
PLSI 사업과 PLSI 자원 1. PLSI 사업 2. PLSI 자원 3
PLSI 사업과 PLSI 자원 1. PLSI 사업 (PLSI Project) 국내슈퍼컴퓨터자원을국가적차원의체계적인연동과관리를통해효율적으로사용할수있도록지원하는사업 PLSI is a national project to support that Korean national supercomputing resources can be used effectively through the systematic integration and management 2. PLSI 자원 (PLSI Resources) PLSI 사업을통하여구축된고성능전용네트워크기반의슈퍼컴퓨터통합인프라 PLSI resources is an integrated supercomputing infrastructure based on the dedicated high performance network built by PLSI project 4
PLSI 자원현황 1. PLSI 자원개요 2. PLSI 자원연동구성 3. PLSI 자원통합소프트웨어스택 5
PLSI 자원현황 1. PLSI 자원개요 기관시스템구조 Platform 명 OS #Cores GF/s KISTI IBM p595 pgaia, pgaiab, pgaiac AIX 5.3 640 5,900 IBM p575 porion01, porion02 AIX 5.3 32 243 Intel Xeon - Windows server 2008 144 1,440 KIST Intel Xeon master-mpi CentOS 5.3 152 1,824 서울대 IBM PowerPC node393, node394 SuSE ES9 112 986 부산대 SGI Altix1350 pdasiy RHEL AS 5.2 112 672 동명대 IBM Xeon - Windows server 2008 120 1,500 IBM p690 tusmp AIX 5.3 28 218 부경대 IBM Xeon hamela, hamelb Cent OS 5.3 256 1,434 GIST IBM Xeon kigi-lg01, kigi-lg02 Cent OS 5.3 256 1,434 Intel Xeon cheetah-mg01 Cent OS 5.4 520 5,262 UNIST IBM p690 unist_smp1, unist_smp2 AIX 5.3 128 870 건국대 IBM PowerPC ci-lg01, ci-lg02 SuSE ES9 182 1,637 시립대 2010년 10월서비스예정 KOBIC AMD opteron Kobic-mg01 Cent OS 5.4 120 2,193 Platform 별설치된소프트웨어정보는아래웹사이트참조 http://www.plsi.or.kr/sub1_1.php1.php 6
PLSI 자원현황 2. PLSI 자원연동구성 - 최소 1Gbps 수준의전용네트워크로국내주요슈퍼컴퓨팅센터의컴퓨팅자원을연동 - 글로벌파일시스템공유및글로벌스케줄링이가능 슈퍼컴전용라인슈퍼컴전용트래픽 KIST 서울대 건국대 서울시립대 UNIST Supercom_C3560 서울 ACL Supercom C3560 ACL Supercom Ex4200 Supercom ACL ACL Supercom_C3560 ACL 울산 대전 광주 KISTI ACL KOBIC ACLPLSI _C6509 Login Node FireWall IDS Supercom_EX4200 ACL ACL Supercom _ C3560 ACL GIST Supercom_C4006 ACL Supercom_C4006 Supercom_C3560 동명대 KREONET 부산대부경대 부산 7
PLSI 자원현황 3. PLSI 자원통합소프트웨어스택 - 각연동시스템은아래와같은통합소프트웨어스택이모두설치 - 이를통해연동된시스템어디서나추가적인인증이나데이터이전과정없이단일배치작업스케줄러 명령을사용하여작업의제출 모니터링 제어및여러시스템에걸친연계작업의원활한수행이가능 사용자 통합작업실행환경제공 ( 시스템접속 / 컴파일 / 작업실행 ) 윈도우클러스터통합구성요소 응용소프트웨어 [Fluent, Gaussian, VASP, GAMESS ] 컴파일러 / 디버거 병렬 API 라이브러리 통합소프트웨어스택 사용자접속 PLSI Portal SSH/X11 Remote Desktop 통합계정 LDAP Nagios 통합모니터링 글로벌스케줄러 LoadLeveler-MC GPFS-MC 글로벌공유파일시스템 프로그래밍환경 시스템통합 MPI [MPICH/MVAPICH/OpenMPI) 이기종시스템환경컴파일러 [GCC/PGI/Intel/IBM/MS] Supercomputing 라이브러리 Infrastructure / 디버거 운영체제 AIX 5.3 CentOS 4/5 RHEL AS 3.4 SUSE ES9 Windows Server 2008 8 시스템 IBM POWER5 server IBM PowerPC Cluster X86-64 Cluster IA-64 Cluster 연동네트워크 [1GbE]
PLSI 자원사용준비하기 1. 계정발급 2. 로그인방법 3. 로그인후해야할일 1 패스워드변경 2 사용자 shell 변경 ( 옵션 ) 3 환경변수설정 - 개요 - module 사용법 - platforms별 module Names 4. 파일시스템 1 글로벌파일시스템 2 로컬파일시스템 9
PLSI 자원사용준비하기 1. 계정발급 - PLSI 홈페이지 (http://www. plsi.or.kr) 에게시된사용신청서를작성하여이메일을통해제출함. - 계정발급진행이완료된후계정담당자로부터이메일로아이디및패스워드를부여받는다. 10
PLSI 자원사용준비하기 2. 로그인방법 ( 중요 ) Linux 에서의예시 x $ssh p 1022 login01.plsi.or.kr 포트설정에주의 Execution platforms pgaia(kisti) pgaiab(kist) pgaiac(kisti) porion01(kisti) porion02(kisti) pdaisy( 부산대 ) node393( 서울대 ) node394( 서울대 ) masker-mpi(kist) hamela( 부경대 ) Or $ssh pgaic hamelb( 부경대 ) kigi-lg01(gist) 150.183.146.111 183 146 111 kigi-lg02(gist) cheetah-mg01(unist) unist_smp1(unist) unist_smp2(unist) tusmp( 동명대 ) ci-lg01 건국대 ) ci-lg02( 건국대 ) Kobic-mg01(KOBIC) Door nodes login01.plsi.or.kr 150.183.146.110 login02.plsi.or.kr [p019keg@login01 ~]$ssh pgaic 다양한 platform 이서비스되므로사용자의작업에적합한 platform을선택한다. [p019keg@gaiac:/phome01/p019keg # - Execution platforms으로직접로그인할수없으며사용자는 Door nodes로로그인한후사용할 Execution platforms으로재로그인해야함 - $ssh {platform_name} ( 예 )$ssh pgaiac - Door nodes는 PLSI자원의 front-end 서버로서작업제출을수행할수있으며 ( 단리모트클러스터명을지정해야함 35page 참조 ) 리모트클러스터지정없이작업제출시그작업은 hang 상태가됨 관리자에의해자동삭제됨 - Execution platforms 에서는컴파일이나작업제출등을수행할수있음 11
PLSI 자원사용준비하기 윈도우용유틸리티로 Door nodes 에접속하기 - http://www.chiark.greenend.org.uk/~sgtatham/putty/ 에서무료 putty 프로그램을다운받는다 - 를클릭한다 사용자는위예시의 p109keg 대신발급받은자신의 ID 를입력함 주의 : 비밀번호입력시커서가움직이지않기때문에오타없이입력해야함 12
PLSI 자원사용준비하기 3. 로그인후해야할일 1 패스워드변경 - Door nodes ONLY - PLSI 계정신청후발급받은패스워드는로그인후반드시변경. - 사용자패스워드를변경하기위해서는 passwd 명령을사용. ➀ passwd 명령어입력후 Enter. ➁ 기존 password 를입력후 Enter. ➂ 변경할 password 를입력후 Enter. [p019keg@login01 ~]$ passwd Changing password for user p019keg Enter login(ldap) password: New UNIX password: - 패스워드의유효기간은 60일임. 변경하지않은패스워드는 60일이경과하면만료됨. 패스워드정책 1 사용자 password 길이를 8 character 이상설정 2 사용자 password 변경기간을 2개월로설정 3 새로운패스워드는이전패스워드와비교하여 2문자이상달라야함 4 특수문자가최소 2 개이상포함되어야함 ➄ 최대허용로그인재시도회수 :10회 13
PLSI 자원사용준비하기 3. 로그인후해야할일 2 사용자 shell 변경 ( 옵션 ) - Door nodes ONLY - 기본 shell은 bash 임. - 사용자가선호하는 shell로변경하기위해서는 ldapchsh 명령을사용 - shell 변경후 Execution platforms에로그인하면변경한 shell이적용 ➀ ldapchsh 명령어입력후 Enter. ➁ password 를입력후 Enter. ➂ 변경할 shell 를입력후 Enter. [p019keg@login01 ~]$ ldapchsh Changing shell for p019keg password: New shell [/bin/bash]: /bin/csh /bin/ksh /bin/zsh 중한가지입력 14
PLSI 자원사용준비하기 3. 로그인후해야할일 3 환경변수설정 - 개요 - Execution platforms ONLY - Execution platform 중한가지시스템으로로그인되어있어야함 - 환경변수설정이란자신이사용하고자하는애플리케이션 ( 컴파일러, 라이브러리, 응용소프트웨어등 ) 을자신의홈디렉터리에서직접실행할수있도록 PATH 를등록하는작업임 기본적으로모든애플리케이션이나라이브러리등의경로가환경변수에모두포함되어있지않고사용자가일일이자신이필요한경로를설정해야하는이유는불필요한설정을하지않고사용자가필요한부분만경량화시키기위함 - PLSI 자원환경에서는수작업으로.bashrc등과같은환경변수파일을수정하는대신 module이라는유틸리티를이용하여미리만들어진환경변수모듈을로드함으로서환경변수가쉽게설정되는환경제공 15
PLSI 자원사용준비하기 3. 로그인후해야할일 3 환경변수설정 module 사용법 - ( 예시 )hamela 시스템에서 ifort( 인텔포트란 ) 을사용하려한다. - 우선 ifort 가실행가능한상태인지확인 - ifort 에대한모듈의존재여부확인 환경변수설정이정상적으로되지않은상태에서 ifort가없다는메시지가뜬다 Module 명령어 $ module avail $ module load [ 모듈명 ] - 모듈로드 16
PLSI 자원사용준비하기 3. 로그인후해야할일 3 환경변수설정 platforms별 module Names 표에없는 platforms 은별도의환경변수설정이필요없음 Platforms Module names Platforms Module names Platforms Module names blacs/gnu64 blacs/ibmcmp64 blacs/ibmcmp64gcc blas/gnu64 blas/ibmcmp64 fftw/fftw-3.2.2 fftw-lib/ibmcmp64 goto/goto gsl/gsl-0.2.5 ibm/ibmcmp ibm/ibmmath-essl-4.2 ibm/ibmmath-pessl-3.2 lapack/gnu64 node393 lapack/ibmcmp64 node394 scalapack/gnu64 scalapack/ibmcmp64 scalapack/ibmcmp64gcc gm/gm-2.0.19 lam-mpi/lam-mpi-7.1-gm lam-mpi/lam-mpi-7.1-ip mpich-gm-ssh/mpich-1.2.6-gnu64 mpich-gm-ssh/mpich-1.2.6-ibmcmp64 mpich-gm-ssh/mpich-1.2.6-ibmcmp64gcc pvm/gnu64-ssh pvm/ibmcmp64-ssh vasp/vasp-4.6 netcdf/ibmcmp64 Cheetah-mg01 hamela hamelb kobic intel/intel_11.0 mpi/gcc/mpich2-1.0.8p1 mpi/intel/mpich-1.2.7p1 mpi/intel/openmpi-1.2.9 mpi/gcc/mpich-1.2.7p1 mpi/gcc/openmpi-1.2.9 mpi/intel/mpich2-1.0.8p1 intel/intel_9.1.052 fftw/fftw-2.1.5 fftw/fftw-3.2 netcdf/netcdf gm/gm mpich-gm/llspawn/mpich-gm_gnu mpich-gm/llspawn/mpich-gm_intel mpich-gm/ssh/mpich-gm_intel lammps/lammps namd/namd-2.7b1 vasp/vasp intel/intel_11 mpi/gcc/mpich-1.2.7p1 mpi/intel/mpich-1.2.7p1 i 1 mpi/gcc/openmpi-1.2.9 pdaisy kigi-lg01 kigi-lg02 intel/intel-11.0 openmpi/openmpi mvapich/mvapich-gnu mvapich/mvapich-intel abaqus/abaqus ansys/ansys starcd/startcd-v406 ansys-cfx/ansys-cfx fluent/fluent namd/namd intel/intel_9.1.052 fftw/fftw-2.1.5 fftw/fftw-3.2 netcdf/netcdf gm/gm mpich-gm/llspawn/mpich-gm_gnu gnu mpich-gm/llspawn/mpich-gm_intel mpich-gm/ssh/mpich-gm_intel lammps/lammps namd/namd-2.7b1 vasp/vasp Execution platforms에서다음명령어로확인 $ module avail 17
PLSI 자원사용준비하기 4. 파일시스템 1 글로벌파일시스템 IBM GPFS 파일시스템기반으로 Door nodes 뿐만아니라모든 Execution platforms 이공유함 /phome01 홈디렉터리, 계정당 6GB /pwork01 스크래치디렉터리사용자 ID 당 1TB, 7 일이상액세스하지않은파일자동삭제 18
PLSI 자원사용준비하기 4. 파일시스템 2 로컬파일시스템 - Execution platforms 이각각보유한로컬파일시스템이며 platform 끼리공유하지않음 - 글로벌병렬파일시스템보다고성능 IO가요구될때사용 - 7일이상액세스하지않은파일자동삭제 /gpfs1, /gpfs2, /gpfs3, /gpfs4 : pgaia, pgaiab, pgaiac /work : porion01, porion02 /scr : master-mpi /scratch2 : pdaisy /work01 : hamela, hamelb /work01 : kigi-lg01, kigi-lg02 /work : unist_smp1, unist_smp2 /phome01과 /pwork01는 Door nodes 및모든 platforms 에공유 19
PLSI 자원사용하기 1. 컴파일하기전 2. 컴파일하기 1 Serial code 컴파일 2 OpenMP code 컴파일 3 MPI code 컴파일 3. 작업제출준비 1 Job command file의문법 2 Job command file의주요키워드 3 Job command File 작성시주의사항 4 class 이름 5 리모트클러스터이름 4. 작업제출 5. 작업관리 1 작업상태조회 2 노드별가용 CPU 알아보기 3 class별상태조회 4 작업취소 5 작업중지 20
PLSI 자원사용하기 1. 컴파일하기전 - 환경변수확인 - Execution platforms ONLY - Execution platform 중한가지시스템으로로그인되어있어야함 - 사용자가원하는컴파일러가사용할준비가되었는지확인 - 15page의 환경변수설정 [module 사용법 ] 을참조하여재확인후컴파일작업 을수행함 - 특히 MPI 라이브러리를사용할경우 module 유틸리티를이용하여필요한라이브러리를로드해야함 예를들어부산대시스템에서 intel 컴파일러로설치된 mvapich를사용한다면아래와같이모듈을불러오면된다. $ module load mvapich/mvapich-intel 모듈리스트는 16page 에서확인 21
PLSI 자원사용하기 2. 컴파일하기 1 Serial code 컴파일 - OpenMP 지시어나 MPI 라이브러리를사용하지않는일반적인사용자코드컴파일 - platform 별바이너리호환이되지않으므로반드시해당 platform 으로로그인하여수행함 - 컴파일러종류다양한컴파일러가설치되어있으므로사용자의용도에맞게선택 Fortran : xlf, ifort, gfortan C : xlc, icc, gcc C++ : xlc, ifort, g++ 표시된두개의컴파일러를혼돈하지말것 - 컴파일러사용예 exam.f90 이라는이름의포트란소스코드를인텔포트란컴파일러를이용하여컴파일한다. o 옵션을이용하여 exam 이란실행파일을동시에생성한다 $ ifort o exam exam.f90 22
PLSI 자원사용하기 2. 컴파일하기 1 Serial code 컴파일 - 일반적인리눅스시스템에서는 Intel 컴파일러를제공하고있으며, IBM AIX 시스템에서는 XL 컴파일러를제공하고있다. 최적화성능을얻기위해서는 Intel 컴파일러 ( 리눅스시스템 ) 또는 XL 컴파일러 (IBM AIX 시스템 ) 를사용할것을권장한다. - 설치된컴파일러를사용하기위해서는컴파일관련모듈을로드해야한다. 예를들어부산대시스템 (pdaisy) 에서 intel 컴파일러를사용하고싶다면아래와같이모듈을불러오면된다. $ module load intel/intel-11.0 23
PLSI 자원사용하기 2. 컴파일하기 2 OpenMP code 컴파일 - OpenMP 지시어가포함된사용자코드컴파일 - platform 별바이너리호환이되지않으므로반드시해당 platform 으로로그인하여수행함 - 컴파일러종류다양한컴파일러가설치되어있으므로사용자의용도에맞게선택 Fortran : xlf,_r, ifort -openmp, gfortan -fopenmp C : xlc_r, icc -openmp, gcc -fopenmp 다음옵션을사용하여 C++ : xlc_r, ifort -openmp, g++ -fopenmp 야 OpenMP 코드를컴파일할수있음 - 컴파일러사용예 exam.f90 이라는이름의포트란소스코드를인텔포트란컴파일러를이용하여컴파일한다. o 옵션을이용하여 exam이란실행파일을동시에생성한다. 추가로 openmp 또는 fopenmp 옵션을사용하면 OpenMP 병렬실행파일이생성됨 $ ifort o exam openmp exam.f90 24
PLSI 자원사용하기 2. 컴파일하기 2 OpenMP code 컴파일 - 컴파일된바이너리파일을실행시키기전원하는 thread 수를지정한다. - thread 수, 즉 OMP_NUM_THREADS 를설정하지않은경우 default 로 IBM 컴파일러는 1개 thread로 Intel과 GUN 컴파일러는노드당최대 thread수로동작함 - thread 개수는환경변수를통해설정 (shell 에따라명령어가약간다름 ) ( 예 ) thread 4 개를사용할경우 bash, ksh csh [p019keg@gaiac:/phome01/p019keg # export OMP_NUM_THREADS = 4 [p019keg@gaiac:/phome01/p019keg # setenv OMP_NUM_THREADS 4 25
PLSI 자원사용하기 2. 컴파일하기 3 MPI code 컴파일 - MPI 라이브러리를사용하여작성한사용자코드컴파일 - platform 별바이너리호환이되지않으므로반드시해당 platform 으로로그인하여수행함 - 컴파일러종류다양한컴파일러가설치되어있으므로사용자의용도에맞게선택 Fortran : mpif77, mpif90 C : mpicc C++ : mpicc - 컴파일러사용예 exam.f90 이라는이름의포트란소스코드를 MPI 컴파일러를이용하여컴파일한다. o 옵션을이용하여 exam이란실행파일을동시에생성한다. $ mpif90 o exam exam.f90 26
PLSI 자원사용하기 2. 컴파일하기 3 MPI code 컴파일 - MPI 병렬프로그램으로생성된 exam.x 라는실행파일을실행하기위해서는 mpirun 또는 poe 이라는 MPI 라이브러리에서제공하는명령을사용하여야한다. [ 부록 1 ] Platform 별 Job command file 작성예제 참조 - MPI 라이브러리를사용할때에도환경설정이필요하다. 예를들어부산대시스템에서 intel 컴파일러로설치된 mvapich를사용한다면아래와같이모듈을불러오면된다. $ module load mvapich/mvapich-intel 27
PLSI 자원사용하기 3. 작업제출준비 - 작업제출 (Job Submmition) 이란애플리케이션이실행되기위한여러조건들을기술한 job command file( 또는 job description file) 을작성하여작업스케줄러 (Job Scheduler) 에게실행을의뢰하는것 - 애플리케이션은컴파일된바이너리파일또는응용애플리케이션 (VASP, gaussian, Fluent 등 ) 이될수있다. - PLSI 자원사용을위한작업스케줄러 (Job Scheduler) 는 IBM Loadleveler 임 - Execution nodes 에서의작업실행은 Loadleveler 를통해서만실행할수있으며, interactive 작업수행은허용하지않음 - LoadLeveler를통해서사용자프로그램을실행하기위해서는먼저 Job command 파일을작성해야한다. 사용자가제출한작업은큐의대기열에있다가스케줄링되어 Execution nodes 가할당된다. 28
PLSI 자원사용하기 3. 작업제출준비 - 다음은 job command file 의한예임 MPI 용 Job command file의주요키워드 2 참조 #!/bin/bash # @ job_type = MPICH # @ step_name = mpi_job # @ output = $(step_name).$(host).$( name)$(host)$(jobid)$(stepid)out jobid).$(stepid).out # @ error = $(step_name).$(host).$( jobid).$(stepid).err # @ resources = ConsumableCpus(1) ConsumableMemory(100mb) # @ cluster_list = pku.hamel # @ class = normal # @ notification = complete # @ total_tasks = 4 Class 이름 4 참조 #@wall wall_clock_limit limit =2:00:00 # @ queue. /etc/profile module load mpich-gm/ssh/mpich-gm_intel 리모트클러스터이름 5참조 mpirun -np $LOADL_TOTAL_TASKS TASKS -machinefile $LOADL_HOSTFILE./mpi.x - job command file의기본문법은 1참조 - 각 platform 별샘플 job command file 의경로는다음같음 porion01, porion02 : /applic/applications/ll_samples pgaia, pgaiab, pgaisc : /applic/applications/ll_samples pdaisy : /mnt/data/sample/ 29
PLSI 자원사용하기 3. 작업제출준비 1 Job command file 의문법 - 키워드문은 #@ 로시작한다. # 와 @ 사이와전후의공백은무시된다. - # 로시작하되키워드문이아닌행 (#@ 로시작하지않은행 ) 은주석문이다. - 키워드는대소문자구별을하지않는다. 그러나일반 Shell Script 와같이변수또는상수명은대소문자를구별하므로주의해야한다. 즉, 키워드문에서 = 의좌측은대소문자구별을하지않고, = 의우측은대소문자를구별한다. - 행연속행은 \( 역슬래쉬 ) 로표현되며, 연속된행은 #@ 로시작해서는안된다. - Job Step 마다맨끝에 "#@queue" 선언행이있어야한다. 30
PLSI 자원사용하기 3. 작업제출준비 2 Job command file 의주요키워드 - Job Command File 내에서적절한키워드를사용하여원하는작업을위한자원할당방법을명시해야한다. 키워드 설명 job_type 작업의유형을지정하며, serial, parallel 가능. 명시하지않으면 serial로간주됨. MPI 작업은 parallel로설정 job_name 작업의이름을지정하며, 명시하지않으면 LoadLeveler가임의로부여 step_name 작업파일내에서 Job Step이름을지정하며, 명시하지않으면 LoadLeveler가 0, 1, 2,... 와같이 Job Command File내의순서대로부여 input Standard input 파일 output Standard output 파일 error Standard error 파일 initialdir 초기작업디렉터리 node Job Step을위해할당할노드수를지정하며, 각 Job Step 마다지정해주어야함. 노드수를하나의숫자로지정하거나범위로지정할수있으며, 지정하지않으면 1로간주 tasks_per_node 노드당태스크수 total_tasks 수행할전체의태스크수 class 작업수행을위한 LoadLeveler class - 4 참조 notification 알림메일을보낼조건. always, error, start, never, complete가가능하며일반적으로 complete를많이사용하고지정하지않으면 complete로간주 notify_user 알림메일을보낼주소. 지정하지않을경우, 작업제출노드의작업제출자주소로메일이보내진다. 사용자가자주사용하는메일주소를사용하면, 직접시스템에접속하지않더라도자동적으로작업의수행상태를알려주므로편리 모든사용자는반드시예상작업소요시간 (Elapsed time) 을지정해야만한다. 초단위또는시 : 분 : 초형식으로지정한다. wall_clock_limit 앞에서대기중인작업의수행에영향을미치지않으면서현재가용한자원만사용하여 wall_clock_limit가시간내에작업을마칠수있는경우, 먼저수행하도록허용한다. 단, wall_clock_limit가지나도완료되지않은경우에는 LoadLeveler 가강제로종료시키므로안전하게여유시간을주어지정 cluster_list 작업을실행할클러스터리스트를설정하며, 특정클러스터이름혹은공백문자로구분되는여러개의클러스터이름을기술한다. - 5 참조 31
PLSI 자원사용하기 3. 작업제출준비 3 Job command File 작성시주의사항 - 반드시 ConsumableCpus, ConsumableMemory 및 wall_clock_limit 를지정해야함. - MPI 작업수행시 MPI 통신네트워크옵션 : Network_MPI=sn_single.shared.US dus - resources 키워드에정의되는 ConsumableCpus는한 task당사용되는 thread수를의미하고, ConsumableMemory 는한 task 당필요로하는 Memory 요구량을의미함. - Serial 및순수 MPI 코드에서는 ConsumableCpus를 1로설정해야하고, OpenMP, Hybrid (MPI+ OpenMP) 코드에서는 ConsumableCpusfmf 사용하는 thread 개수만큼설정해주면됨. - ConsumableMemory 는 MPI 코드에서하나의 MPI task 당필요로하는 Memory 요구량을의미하고, OpenMP 코드에서는전체 thread가필요로하는 Memory 요구량을의미함. 32
PLSI 자원사용하기 3. 작업제출준비 4 class 이름 - Execution platforms 별로 CPU 수제한, 노드수제한, wall clock limit 등의조건을비교하여적절한 class 를선택함 Platform 명 Class 이름 CPU 수제한노드수제한 wall_clock_limit 비고 node393, node394, hamela, hamelb, Kigi-lg02, kigi0-lg02 ci, kobic normal no limit no limit 7 일일반병렬작업 pgaia, pgaiab, pgaiac long 64 2 10 일 long running 작업 large 512 8 3 일일반병렬작업 normal porion01, porion02, tusmp no limitit no limitit 20 일일반병렬작업 large master-mpi medium large 128 no limit 10 일일반병렬작업 normal 7일 pdasiy no limit no limit 일반병렬작업 long 30일 unist_smp1, unist_smp2 normal large no limit no limit 20 일일반병렬작업 Cheetah-mg01 normal No limit No limit 7 일일반병렬작업 33
PLSI 자원사용하기 3. 작업제출준비 - class 확인및 class 별최대 task 수및가용 task 수알아보기 로그인상태에서부산대시스템으로이동한후 llclass를이용하여작업 class를확인할수있다 Name 에해당하는항목이현재 LoadLeveler cluster 에서설정된 Class 이름이된다. 각 class 이름에대해 Max Slots 에해당하는수가최대 task 수를의미하고, Free Slots 에해당하는수가현재가용한 task 수를의미한다. 34
PLSI 자원사용하기 3. 작업제출준비 - llclass -l Class_name 을입력하면아래그림과같이상세정보를확인할수있다. - Class 별 wall_ clock_ limit 알아보기 35
PLSI 자원사용하기 3. 작업제출준비 5 리모트클러스터이름 - cluster_list 지시어는사용자애플리케이션이실행될 platform, 즉리모트클러스터이름을지정하는것으로 Door nodes 에서작업제출시반드시지정해야한다 단부산대시스템 ( pdasiy) 는 Door node 에서작업제출이않되기때문에필히 pdasiy 로로그인해서작업제출해야함 - 그러나사용자애플리케이션이실행될 platform 으로로그인한상태에서작업제출시본키워드는필요없다. - 리모트클러스터로작업을제출하고자할때는 Job command file 에서 cluster_list 라는지시어에리모트클러스터의이름을기술하면된다. 리모트클러스터이름 pku.hamel gist.kigi pku.hamel gist.kigi kisti.porion kisti.pgaia kisti.porion kisti.pgaia snu.nodenode unist.unist_smp unist.cheeetah 설명부경대클러스터 (hamel) GIST 클러스터 (kigi) 부경대 or GIST 클러스터 (hamel or kigi) KISTI porion or pgaia 시스템 KISTI porion 시스템 KISTI pgaia 시스템서울대클러스터 UNIST unist_smp 시스템 UNIST 리눅스클러스터 (cheetah) 36
PLSI 자원사용하기 4. 작업제출 $ llsubmit job_command_file - job_command_file은보통 XXX.cmd 형태로만들어짐. 예를들어 test.cmd 이름의 job command file 을제출하기위해서는아래와같이한다. $ llsubmit test.cmd - Door nodes 에서작업제출시 job command file 지시어중 cluser_list 를반드시지정해야한다. 37
PLSI 자원사용하기 5. 작업관리 1 작업상태조회 $ llq 원격시스템의작업상태를조회하기위해서는 -X 옵션을사용한다. 예를들어부경대시스템 (pku.hamel) 시스템의작업을조회하고싶다면아래와같이명령한다. $ llq -X pku.hamel 모든원격시스템의정보를보고싶을때는원격시스템의클러스터명대신에 all을쓰면된다. $ llq -X all [ 참고 ] - 해당작업이 idle 상태인이유가사용자가요구한 CPU 자원을제공할수있는노드가현재없기때문에, 가용 CPU 자원이확보될때까지대기하여야한다. 38
PLSI 자원사용하기 5. 작업관리 2 노드별가용 CPU 알아보기 $ llstatus -X all 또는 $ llstatus -R -X all 3 class 별상태조회 $ llclass -X all // class 별최대 task 수및가용 task 수알아보기 $ llclass -l -X all // class 별상세정보 $ llclass -l -X all grep Wall // class 별 wall_clock_limit 알아보기 39
PLSI 자원사용하기 5. 작업관리 4 작업취소 llcalcel 명령을통하여제출한작업을취소할수있다. 이때 llq 명령을통하여 Job_ID 를알아낸후아래와같이명령어를입력한다. 예를들어 pnu.daisy 에제출한작업을취소하기위해서는아래와같이하면된다. $ llq -X pnu.daisy ===== Cluster pnu.daisy ===== Id Owner Submitted ST PRI Class Running On ------------------------ ---------- ----------- -- --- ------------ ----------- pdaisy.1858.0 plsiuser 8/15 14:35 R 50 normal pdaisy6 1 job step(s) in queue, 0 waiting, 0 pending, 1 running, 0 held, 0 preempted $ llcancel pdaisy.1858.0 -X pnu.daisy 40
PLSI 자원사용하기 3. 작업관리 5 작업중지 $ llhold job_id [-X cluster_name] // 일시정지 $ llhold -r job_id [-X cluster_name] // 일시정지해제 예를들어 pnu.daisy 에제출한작업을일시정지하기위해서는아래와같이한다. $ llhold pdaisy.1858.0 -X pnu.daisy LoadLeveler 에대한자세한사항은다음 IBM 홈페이지를참조하시기바랍니다. http://publib.boulder.ibm.com/infocenter/clresctr/vxrx/index.jsp?topic=/com.ibm.clust er.loadl.doc/llbooks.html 41
[ 부록 1 ] 작업별 Job command file 작성예제 42
Serial Job #!/bin/bash # @ job_type = SERIAL # @ step_name = serial_job #@ output t = $(t $(step_name).$(host).$( )$(h t)$(jobid).$(stepid).out bid)$( t # @ error = $(step_name).$(host).$( jobid).$(stepid).err # @ resources = ConsumableCpus(1) ConsumableMemory(100mb) # @ notification =complete 리모트클러스터이름설명 # @ notify_user =plsiuser@plsi.or.kr pku.hamel 부경대클러스터 (hamel) # @ cluster _ list = pku.hamel gist.kigi GIST 클러스터 (kigi) pku.hamel gist.kigi # @ class = normal kisti.porion kisti.pgaia kisti.porion KISTI porion 시스템 # @ wall_clock_limit=2:00:00 kisti.pgaia KISTI pgaia 시스템 #@queue snu.nodenode 서울대클러스터 pnu.daisy 부산대 pdaisy 시스템./serial.x unist.unist_smp unist.cheeetah 부경대 or GIST 클러스터 (hamel or kigi) KISTI porion or pgaia 시스템 UNIST unist_smp 시스템 UNIST 리눅스클러스터 (cheetah) 부산대시스템 ( pdasiy) 는 Door node 에서작업제출이않되기때문에 cluser_list 지시어를쓸필요가없고필히 pdasiy 로로그인해서작업제출을해야함 43
OpenMP Job #!/bin/bash # @ job_type = SERIAL # @ step_name = openmp_job #@ output t = $(t $(step_name).$(host).$( )$(h t)$(jobid).$(stepid).out bid)$( t # @ error = $(step_name).$(host).$( jobid).$(stepid).err # @ resources = ConsumableCpus(2) ConsumableMemory(100mb) # @ notification =complete 리모트클러스터이름설명 # @ notify_user =plsiuser@plsi.or.kr pku.hamel 부경대클러스터 (hamel) # @ cluster _ list = pku.hamel gist.kigi GIST 클러스터 (kigi) pku.hamel gist.kigi # @ class = normal kisti.porion kisti.pgaia kisti.porion KISTI porion 시스템 # @ wall_clock_limit=2:00:00 #@queue export OMP_NUM_THREADS=2./openmp.x kisti.pgaia snu.nodenode pnu.daisy unist.unist_smp unist.cheeetah 부경대 or GIST 클러스터 (hamel or kigi) KISTI porion or pgaia 시스템 KISTI pgaia 시스템서울대클러스터 부산대 pdaisy 시스템 UNIST unist_smp 시스템 UNIST 리눅스클러스터 (cheetah) 44
MPI Job #!/bin/bash # @ job_type = MPICH # @ step_name = mpi_job #@ output t = $(t $(step_name).$(host).$( )$(h t)$(jobid).$(stepid).out bid)$( t # @ error = $(step_name).$(host).$( jobid).$(stepid).err # @ resources = ConsumableCpus(1) ConsumableMemory(100mb) # @ notification =complete 리모트클러스터이름설명 # @ notify_user =plsiuser@plsi.or.kr pku.hamel 부경대클러스터 (hamel) # @ cluster _ list = pku.hamel gist.kigi GIST 클러스터 (kigi) pku.hamel gist.kigi 부경대 or GIST 클러스터 (hamel or kigi) # @ class = normal kisti.porion kisti.pgaia KISTI porion or pgaia 시스템 kisti.porion KISTI porion 시스템 # @ total_tasks = 4 kisti.pgaia KISTI pgaia 시스템 #@wall wall_clock_limit=2:00:00 limit=2:00:00 snu.nodenode 서울대클러스터 pnu.daisy 부산대 pdaisy 시스템 # @ queue unist.unist_smp UNIST unist_smp 시스템. /etc/profile unist.cheeetah UNIST 리눅스클러스터 (cheetah) module load mpich-gm/ssh/mpich-gm_intel ih h/ ih i mpirun -np $LOADL_TOTAL_TASKS -machinefile $LOADL_HOSTFILE./mpi.x 45
[ 부록 2] 응용프로그램별 Job command file 작성예제 46
VASP 1. kigi-lg01, i kigi-lg02, i hamela, hamelb #!/bin/bash # @ job_type = MPICH # @ step_name = benchmark # @ output = $(step_name).$(host).$( jobid).$(stepid).out # @ error = $(step_name).$(host).$( $h $ jobid).$(stepid).err # @ resources = ConsumableCpus(1) ConsumableMemory(100mb) # @ notification =complete # @ notify_user =plsiuser@plsi.or.kr <- 사용자가작업이완료되었다는메시지를받을메일주소 # @ cluster_list = gist.kigi # @ class = normal # @ total_tasks = 16 #@ wall_clock_limit=2:00:00 l li it 20000 # @ queue. /etc/profile module load vasp/vasp p mpirun -np $LOADL_TOTAL_TASKS -machinefile $LOADL_HOSTFILE /home01/applic/vasp/vasp.4.6/vasp 47
VASP 2. node393, node394 #!/bin/bash # @ job_type = MPICH # @ step_name = benchmark # @ output = $(step_name).out # @ error = $(step_name).err # @ resources = ConsumableCpus(1) ConsumableMemory(100mb) # @ notification =complete # @ notify_user =plsiuser@plsi.or.kr <- 사용자가작업이완료되었다는메시지를받을메일주소 # @ class = normal # @ cluster_list = snu.node # @ node = 1 #@t tasks_per_node = 1 # @ queue /usr/local/mpich/mpichgm-1.2.6..14a/gm/ppc64/smp/ibmcmp64/ssh/bin/mpirun.ch_gm / / / p /g /pp / p/ p / / / p -np $LOADL_TOTAL_TASKS -machinefile $LOADL_HOSTFILE /usr/local/vasp/vasp.4.6/vasp 48
gaussian 1. porion01, porion02, pgaia, pgaiab, pgaiac #!/bin/bash # @ job_type = serial # @ class = large # @ error = my_g03_run.err # @ output = my_g03_run.out # @ notification =complete # @ notify_user =plsiuser@plsi.or.kr <- 사용자가작업이완료되었다는메시지를받을메일주소 # @resources= ConsumableCpus(4) ConsumableMemory(10gb) # @ cluster_list = kisti.porion # @ wall_clock_limit=10:00:00 # @ queue export MEMORY_AFFINITY=MCM MCM export OMP_NUM_THREADS=4 export g03root="/applic/applications" export GAUSS_SCRDIR="/work/$USER/G03_SCR" / / _ mkdir -p $GAUSS_SCRDIR. $g03root/g03/bsd/g03.profile /applic/applications/g03/g03 test.com > test.log 49
gaussian 2. unist-smp1, unist-smp2 #!/bin/bash # @ cluster_list = unist.unist_smp # @ job_type = serial # @ resources = ConsumableCpus(2) ConsumableMemory(4GB) # @ notification i =complete # @ notify_user =plsiuser@plsi.or.kr <- 사용자가작업이완료되었다는메시지를받을메일주소 # @ error = job_name.err # @ output = job_name.out # @ class = large # @ wall_clock_limit=40:00:00 # @ queue export MEMORY_AFFINITY=MCM MCM export OMP_NUM_THREADS=2 export g03root="/applic/applications" export GAUSS_SCRDIR="/work/$USER/G03_SCR" / / _ mkdir -p $GAUSS_SCRDIR. $g03root/g03/bsd/g03.profile /applic/applications/g03/g03 test.com > test.log 50
GAMESS 1. hamela, hamelb #!/bin/bash # @ job_type = MPICH # @ step_name = pku_test # @ output = $(step_name).$(host).$( jobid).$(stepid).out # @ error = $(step_name).$(host).$( $h $ jobid).$(stepid).err # @ resources = ConsumableCpus(1) ConsumableMemory(100mb) # @ cluster_list = pku.hamel # @class= normal # @ notification =complete # @ notify_user =plsiuser@plsi.or.kr <- 사용자가작업이완료되었다는메시지를받을메일주소 # @ node = 2 #@t tasks_per_node = 2 # @ wall_clock_limit=2:00:00 # @ queue export LD_LIBRARY_PATH=/home01/applic/test/openmpi/1.3.4/lib:$LD_LIBRARY_PATH _ / / / p p/ /./rungms_ll C12_mono_ring.inp 00 4 51
fluent 1. pgaia #!/bin/csh #@cluster_list =kisti.pgaia #@job_name =pgaia_fluent #@job_type =parallel #@class =large #@resources =ConsumableCpus(1) ConsumableMemory(1gb) #@notification =complete #@notify_user =plsiuser@plsi.or.kr <- 사용자가작업이완료되었다는메시지를받을메일주소 #@wall_clock_limit =30:00:00 #@output =pgaia.out #@error =pgaia.err #@node =1 #@tasks_per_node =2 #@queue setenv LANG en_us setenv MP_SHARED_MEMORY yes setenv XLSMPOPTS "spins=0:yields=0" setenv MEMORY_AFFINITY MCM setenv LM_LICENSE_FILE LICENSE '7241@lic01:7241@mon01:7241@acct01' /applic/applications/fluent.inc/bin/fluent 2d -psmpi -t2 -g -i pgaia.in > pgaia.out 52
fluent 2. pdaisy #!/bin/sh # @ job_type = parallel # @ class = normal # @ job_name = 02 # @ output = 02.out # @ error = 02.err # @ resources = ConsumableCpus(1) ConsumableMemory(1Gb) # @ wall_clock_limit limit = 168:00:00 # @ notification = complete # @notify_user =plsiuser@plsi.or.kr <- 사용자가작업이완료되었다는메시지를받을메일주소 # @ total_tasks = 2 #@ queue. /etc/profile module load fluent/fluent time fluent 2d -mpi=hp -t2 -g -i 02.in > 02.out 53
멀티클러스터다중스텝작업 하나의작업안에서서로다른클러스터에걸쳐순차적으로작업을실행하기위해서는멀티스텝 Job command 파일을작 성하되, 두번째다른클러스터에서실행되는작업은또다른작업스크립트를만들어제출하는방법을사용해야한다. #!/bin/bash # @ cluster_list = pku.hamel # @ job_type = MPICH # @ step_name = test1 #@ output =$(job_name).$(step_name).out )$( ) # @ error = $(job_name).$(step_name).err # @ resources = ConsumableCpus(1) ConsumableMemory(100mb) # @ class = normal # @ notify_user = user@plsi.or.kr #@ notification i = complete # @ node = 10 # @ tasks_per_node = 1 # @ queue # @ step_name = test2 #@d dependency d = (test1 == 1) # @ resources = ConsumableCpus(1) ConsumableMemory(100mb) # @ output = $(job_name).$(step_name).out # @ error = $(job_name).$(step_name).err # @ queue case $LOADL_STEP_NAME in test1) echo "`hostname`" export RSHCOMMAND=/opt/ibmll/LoadL/full/bin/llspawn export MPICH_HOME=/home01/applic/mpich/gm/1.2.7p1..20/gnu/llspawn time ${MPICH_HOME}/bin/mpirunHOME}/bi / i -np $LOADL_TOTAL_TASKS TASKS -machinefile $LOADL_HOSTFILE /phome01/plsiuser/mpi_pi_test/x86/mpi_pi / i i / i i ;; test2) echo "`hostname`" /opt/ibmll/loadl/full/bin/llsubmit /phome01/plsiuser/test/gist_mc.cmd ;; esac 54