Posted on 2009/04/30 11:03

보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.

Posted on 2008/04/18 09:35
Filed Under Etc/cluster







MPI에 대한 동영상 이네요...^^

펌질좀 햇습니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/04/18 09:35 2008/04/18 09:35


Posted on 2008/03/18 00:24
Filed Under Etc/cluster

출처 : 미상 ( 어딘지 기억 안 남 )
작성자의 요청이 있을경우 자삭할 예정임

###  프로그래밍 도구
 
PVM
  www.epm.ornl.gov/pvm/
 
MPICH
  www.mcs.anl.gov/mpi/mpich/
 
LAM
  www.mpi.nd.edu/lam/
 

### 클러스터 관리 도구
 
SMILE
  smile.cpe.ku.ac.th/~ppe/
 
M3C
  www.epm.ornl.gov/torc/
 
MAT
  www.ee.ryerson.ca:8080/~sblack/mat/
 
VACM
  www.valinux.com/projects/vacm/
 

### 성능 감시기 및 디버거
 
XPVM
  www.netlib.org/utk/icl/xpvm/
 
Pablo
  www-pablo.cs.uiuc.edu/
 
TotalView
  www.etnus.com/
 
LCB
  www.ptools.org/projects/lcb/
 

### 작업 관리 도구
 
LSF
  www.platform.com/
 
NQS
  www.gnqs.org/
 
PBS
  pbs.mrj.com/
 
Condor
  www.cs.wisc.edu/condor/
 
DQS
  www.scri.fsu.edu/pasko/dqs.html
 
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
2008/03/18 00:24 2008/03/18 00:24


Posted on 2007/04/28 10:41
Filed Under Etc/cluster

출처 : http://pc.oopslinux.com/index.php?left=bbs&right=tech
작성사 요청시 자삭함.


pgi compiler 환경에서 lammps 설치하기


1. 시스템 및 소프트웨어 환경
1.1 시스템은 x86기반 리눅스 클러스터로, MPI용 네트웍은 이더넷이며,
운영체제는 CentOS 4.2 (RedHat EL4 update2 호환) 입니다.
1.2 패키지 버전
- lammps-4Oct06 ( http://lammps.sandia.gov/download.html : 오픈소스 )
* LAMMPS upgrade를 선택하여 다운로드 합니다.

* mpich는 이미 설치 되었다고 가정합니다. (기술자료 참고)
* 이 문서의 작업 예는 root계정에서 실행하는 것입니다.
* vi를 실행하는것은, 그 이후에 나오는 코드를 해당 파일에 추가하거나,
편집하는 것을 뜻합니다.

2. lammps-4Oct06 설치
- 압축을 풀고, 다음과 같이 Makefile.pgi를 생성합니다.
==========================================================================
# tar xzvf ./lammps-upgrade.tar.gz
# cd ./lammps-4Oct06/src/MAKE
# vi Makefile.pgi
-----------------------------------------------
nux = RedHat Linux box, PGI pgcc, MPICH, FFTW

SHELL = /bin/sh
#.IGNORE:

# System-specific settings

CC = mpiCC
CCFLAGS = -O -I/usr/local/mpich/include \
-I/usr/local/include \
-DFFT_NONE -DGZIP
DEPFLAGS = -M
LINK = mpiCC
LINKFLAGS = -v -O -L/usr/local/mpich/lib \
-L/usr/local/lib
USRLIB = -lmpich
SYSLIB =
SIZE = size

# Link rule

......

-----------------------------------------------
# cd ..
# make pgi
==========================================================================
- 심볼릭 링크를 해줍니다.
==========================================================================
# mkdir /usr/local/lammps-4Oct06
# cp ./lmp_pgi /usr/local/lammps-4Oct06/
# ln -s /usr/local/lammps-4Oct06 /usr/local/lammps
==========================================================================

3. 예제 실행
- 먼저 노드를 지정하기 위해, 머신파일을 생성합니다.
==========================================================================
# vi ~/mf
--------------------------------------------
node001
node002
--------------------------------------------
==========================================================================
- 소스에 포함된 crack예제를 홈디렉토리로 이동합니다.
==========================================================================
# cp -r ../examples/crack ~/
==========================================================================
- cpu개수 2개, 머신파일 ./mf, 마스터노드에서는 실행하지 않는 옵션으로 mpirun을
실행합니다.
==========================================================================
# cd ~/crack
# mpirun -np 2 -machinefile ~/mf -nolocal /usr/local/lammps/lmp_pgi < ./in.crack


......

Nlocal: 8141 ave 8141 max 8141 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 70723 ave 70723 max 70723 min
Histogram: 1 0 0 0 0 0 0 0 0 0

Total # of neighbors = 70723
Ave neighs/atom = 8.68726
Neighbor list builds = 489
Dangerous builds = 0
==========================================================================
- 실행내역은 표준출력과 log.lammps파일로 각각 출력됩니다.
* 노드의 사양과 cpu갯수에 따라 시간이 오래 걸릴 수 있습니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/04/28 10:41 2007/04/28 10:41


Posted on 2007/04/28 10:37
Filed Under Etc/cluster

출처 : http://pc.oopslinux.com/index.php?left=bbs&right=tech
작성자 요청시 자삭 함.


namd와 vmd를 이용한 imd(Interactive Molecular Dynamics)



























































1. 시스템 및 소프트웨어 환경
1.1 시스템은 x86기반 리눅스 클러스터로, MPI용 네트웍은 이더넷이며,
운영체제는 CentOS 4.2 (RedHat EL4 update2 호환) 입니다.
1.2 vmd를 실행하는 pc는 windows xp환경이며, 이외에도 여러가지 운영체제를
지원합니다.
1.3 패키지 버전
- Namd 2.5 Source ( http://www.ks.uiuc.edu/Development/Download/download.cgi?PackageName=VMD
: 오픈소스 )
- VMD 1.8.5 ( http://www.ks.uiuc.edu/Development/Download/download.cgi?PackageName=VMD
: 오픈소스 )

* namd및 mpich설치는 이전 문서를 참조 바랍니다.

2. vmd 1.8.5 설치
- 다운로드한 vmd185.exe를 더블클릭하여 설치 합니다.

3. 실행용 예제(alanin)의 구조, 파라메터, 좌표 파일들을 클러스터로 부터,
다운로드하여, pc에 저장합니다.
(alanin.params, alanin.pdb, alanin.psf)
* vmd가 한글을 읽지 못하므로, 한글 윈도우의 경우는 [바탕화면]과 같은
경로에 파일을 위치시키면 안됩니다.
ex>
==========================================================================
D:\>dir d:\alanin
D 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: 2400-08F9

d:\alanin 디렉터리

2006-10-04 오후 08:26 .
2006-10-04 오후 08:26 ..
2006-10-04 오후 07:37 517 alanin
2006-10-04 오후 07:37 17,389 alanin.params
2006-10-04 오후 07:37 5,748 alanin.pdb
2006-10-04 오후 07:37 12,953 alanin.psf
2006-10-04 오후 08:26 16,247 imd.vmd
5개 파일 52,854 바이트
2개 디렉터리 108,966,461,440 바이트 남음
==========================================================================

4. vmd 실행
- [시작]->[프로그램]->[VMD 1.8.5]를 클릭하여, vmd를 실행합니다.
- [VMD Main]창의 [File]->[New Molecule...]을 선택합니다.
- [alanin.pdb]파일을 찾아 [열기] 합니다.
- [VMD Main]창의 [Graphics]->[Representations...]을 선택합니다.
- [Drawing Method] 항목을 [CPK]로 선택합니다.
- [VMD Main]창의 [Mouse]->[Label]을 이용하여 [Display]창에 [Atoms], 
[Bonds], [Angles]등을 표시해 넣습니다.
5. namd 실행
- ssh터미널을 열고 마스터 노드에 로그인 하여, alanin예제가 있는 디렉토리로
이동하고, alanin파일에 IMD를 사용하도록 다음과 같은 설정을 추가합니다.
* 이때, numstep의 값을 충분히 주어야 imd가 빨리 끝나는 것을 방지 할 수
있습니다.
==========================================================================
# cd ~/alanin
# vi ./alanin
-------------------------------------------------------------
# This is a test namd configuration file

timestep 0.5
numsteps 50000
structure alanin.psf
parameters alanin.params
coordinates alanin.pdb
exclude scaled1-4
1-4scaling 0.4
outputname output
margin 1.0
stepspercycle 3
temperature 0

switching on
switchdist 7.0
cutoff 8.0
pairlistdist 9.0

#dcdfile alanin.dcd
#dcdfreq 10

#restartname alanin.restart
#restartfreq 10

#langevin on
#langevinTemp 300.0
#langevincol O

#constraints on

#fma on

#seed 791064881

IMDon yes
IMDport 2030
IMDfreq 1
IMDwait on
-------------------------------------------------------------
==========================================================================
- 이제 namd을 실행합니다.
==========================================================================
# vi ~/mf
--------------------------------------------
node001
node002
--------------------------------------------
# mpirun -np 2 -machinefile ~/mf -nolocal /usr/local/namd/Linux-i686-MPI/namd2 ./alanin
==========================================================================
- namd가 실행되면 다음과 같이 imd접속을 기다린다는 메시지가 나옵니다.
6. imd접속
- [VMD Main]창의 [Extensions]->[Simulation]->[IMD Connect(NAMD)]을
선택합니다.
- [VMD Main]창의 [Mouse]->[Force]->[Atom]을 선택하여, imd실행 중에
원자에 응력을 가할 수 있도록 준비합니다.
- [IMD Connection]창에서 [Hostname]에 첫번째 계산노드(node001)의 ip,
[Port]에 2030을 입력하고 [Connect]를 클릭합니다.
* imd의 포트는 첫번째 계산노드에 열리는 것이므로, 반드시 첫번째 노드로
접속해야 합니다.
- 마우스 포인터로 [Display]창의 각 원자를 잡아당기면, 응력을 줄 수 있습니다.
- 설정한 numsteps가 되면 종료됩니다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/04/28 10:37 2007/04/28 10:37


Posted on 2007/04/28 10:35
Filed Under Etc/cluster

출처 : http://pc.oopslinux.com/index.php?left=bbs&right=tech
작성자의 요청시 자삭 합니다.

pgi compiler 환경에서 namd 설치하기

1. 시스템 및 소프트웨어 환경
1.1 시스템은 x86기반 리눅스 클러스터로, MPI용 네트웍은 이더넷이며,
운영체제는 CentOS 4.2 (RedHat EL4 update2 호환) 입니다.
1.2 패키지 버전
- FFTW 2.1.5 ( http://www.fftw.org/fftw-2.1.5.tar.gz : 오픈소스 )
* 3.x버전이 최신이지만, MPI환경을 지원하지 않음
- Tcl 8.4.13 ( http://optusnet.dl.sourceforge.net/sourceforge/tcl/tcl8.4.13-src.tar.gz : 오픈소스 )
- NAMD 2.5 Source ( http://www.ks.uiuc.edu/Development/Download/download.cgi?UserID=&AccessCode=&ArchiveID=722 : 오픈소스 )
* 2.6이 최신 버전이지만, mpirun시 애러가 발생함

* mpich는 이미 설치 되었다고 가정합니다.
* 이 문서의 작업 예는 root계정에서 실행하는 것입니다.
* vi를 실행하는것은, 그 이후에 나오는 코드를 해당 파일에 추가하거나,
편집하는 것을 뜻합니다.

2. fftw-2.1.5 설치
- double/single 두가지 precision을 모두 지원하기위해 다음과 같이
두번 컴파일 합니다.
==========================================================================
# tar xzvf ./fftw-2.1.5.tar.gz
# cd ./fftw-2.1.5
# ./configure CC=mpicc LDFLAGS=-L/usr/local/mpich/lib CPPFLAGS=-I/usr/local/mpich/include \
F77=mpif77 --prefix=/usr/local/fftw-2.1.5 --enable-type-prefix --enable-mpi
# make
# make install
# make clean
# ./configure CC=mpicc LDFLAGS=-L/usr/local/mpich/lib CPPFLAGS=-I/usr/local/mpich/include \
F77=mpif77 --prefix=/usr/local/fftw-2.1.5 --enable-type-prefix --enable-float \
--enable-mpi
# make
# make install
==========================================================================
- 심볼릭 링크를 해줍니다.
==========================================================================
# ln -s /usr/local/fftw-2.1.5 /usr/local/fftw
==========================================================================
3. Tcl 8.4.13 설치
==========================================================================
# tar xzf ./tcl8.4.13-src.tar.gz
# cd ./tcl8.4.13/unix
==========================================================================
- 기존 리눅스배포본의 shared object tcl라이브러리와의 중복을 피하기 위해
"--disable-shared" 옵션을 주어 설정합니다.
==========================================================================
# ./configure --prefix=/usr/local/tcl8.4.13 --disable-shared
# make
# make test
# make install
# ln -s /usr/local/tcl8.4.13 /usr/local/tcl
# ln -s /usr/local/tcl/lib/libtcl8.4.a /usr/local/tcl/lib/libtcl.a

4. namd 소스 압축 해제
==========================================================================
# tar xzf ./NAMD_2.5_Source.tar.tar
==========================================================================
- namd소스 안에는 charm소스가 포함되어 있습니다.

5. charm 5.6 설치
==========================================================================
# cd ./NAMD_2.5_Source
# tar xf ./charm.tar
# cp -r ./charm /usr/local/charm-5.6
# cd /usr/local/charm-5.6
# ./build charm++ mpi-linux
# ln -s /usr/local/charm-5.6 /usr/local/charm
==========================================================================

6. NAMD 2.5 설치
- namd소스를 풀어 놓은 곳으로 이동하여, 소스를 "/usr/local/" 에 복사합니다.
==========================================================================
# cp -r ./NAMD_2.5_Source /usr/local/namd-4.6
# cd /usr/local/namd-4.6
# vi Make.charm
-----------------------------------------------
# Set CHARMBASE to the top level charm directory.
CHARMBASE = /usr/local/charm
#CHARMBASE = C:/cygwin$(HOME)/charm
-----------------------------------------------
# vi arch/Linux-i686.tcl
-----------------------------------------------
TCLDIR=/usr/local/tcl
TCLINCL=-I$(TCLDIR)/include
TCLLIB=-L$(TCLDIR)/lib -ltcl -ldl
TCLFLAGS=-DNAMD_TCL -DUSE_NON_CONST
TCL=$(TCLINCL) $(TCLFLAGS)
-----------------------------------------------
# vi arch/Linux-i686.fftw
-----------------------------------------------
FFTDIR=/usr/local/fftw
FFTINCL=-I$(FFTDIR)/include
FFTLIB=-L$(FFTDIR)/lib -lsrfftw -lsfftw
FFTFLAGS=-DNAMD_FFTW
FFT=$(FFTINCL) $(FFTFLAGS)
-----------------------------------------------
# vi arch/Linux-i686-MPI.arch
-----------------------------------------------
include .rootdir/arch/Linux-i686-pgCC.arch
-----------------------------------------------
# vi arch/Linux-i686-pgCC.arch
-----------------------------------------------
NAMD_ARCH = Linux-i686
CHARMARCH = mpi-linux

CXX = pgCC -DSOCKLEN_T=socklen_t
CXXOPTS = -O2 --no_exceptions -tpp6
CC = pgcc
COPTS = -fast -Mvect=assoc,prefetch -tpp6
-----------------------------------------------
# ./config tcl fftw Linux-i686-MPI
# cd Linux-i686-MPI
# make
# ln -s /usr/local/namd-4.6 /usr/local/namd
==========================================================================

4. 예제 실행
- 먼저 노드를 지정하기 위해, 머신파일을 생성합니다.
==========================================================================
# vi ~/mf
--------------------------------------------
node001
node002
--------------------------------------------
==========================================================================
- 소스에 포함된 alanin예제를 홈디렉토리로 이동합니다.
==========================================================================
# mkdir ~/alanin
# cp /usr/local/namd/src/alanin* ~/alanin/
==========================================================================
- cpu개수 2개, 머신파일 ./mf, 마스터노드에서는 실행하지 않는 옵션으로 mpirun을
실행합니다.
==========================================================================
# cd ~/alanin
# mpirun -np 2 -machinefile ~/mf -nolocal /usr/local/namd/Linux-i686-MPI/namd2 ./alanin


......

WRITING EXTENDED SYSTEM TO OUTPUT FILE AT STEP 9
WRITING COORDINATES TO OUTPUT FILE AT STEP 9
WRITING VELOCITIES TO OUTPUT FILE AT STEP 9
==========================================
WallClock: 2.809392 CPUTime: 2.809404 Memory: 2417 kB
End of program
==========================================================================
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/04/28 10:35 2007/04/28 10:35


Posted on 2007/04/28 10:32
Filed Under Etc/cluster

출처 : http://pc.oopslinux.com/index.php?left=bbs&right=tech
작성자 요청시 자삭 합니다.

pgi compiler 환경에서 mpich 설치하기
1. 시스템 및 소프트웨어 환경
1.1 시스템은 x86기반 리눅스 클러스터로, MPI용 네트웍은 이더넷이며,
운영체제는 CentOS 4.2 (RedHat EL4 update2 호환) 입니다.
1.2 패키지 버전
- PGI 6.0.8 Workstation Version ( http://www.pgroup.com/products/workpgi.htm : 상용 )
- MPICH 1.2.7p1 ( http://www-unix.mcs.anl.gov/mpi/mpich1/download.html : 오픈소스 )

* PGI 컴파일러는 이미 설치 되었다고 가정합니다.
* 이 문서의 작업 예는 root계정에서 실행하는 것입니다.
* vi를 실행하는것은, 그 이후에 나오는 코드를 해당 파일에 추가하거나,
편집하는 것을 뜻합니다.

2. 사전 환경 확인
2.1 PGI 컴파일러가 정상적으로 설치 되었고, 환경변수가 적절히 세팅 되었는지
확인합니다.
==========================================================================
# pgcc -V

pgcc 6.0-8 32-bit target on x86 Linux
Copyright 1989-2000, The Portland Group, Inc. All Rights Reserved.
Copyright 2000-2005, STMicroelectronics, Inc. All Rights Reserved.
# pgf90 -V

pgf90 6.0-8 32-bit target on x86 Linux
Copyright 1989-2000, The Portland Group, Inc. All Rights Reserved.
Copyright 2000-2005, STMicroelectronics, Inc. All Rights Reserved.

==========================================================================

2.2 위와 같이 실행되지 않는경우는, PGI가 설치되었는지 확인하고, 설치가 완료
되면, 다음과 같이 환경변수를 세팅하여 줍니다.
==========================================================================
# vi ~/.bash_profile
-------------------------------------------------------------
......

# for mpich
PATH=$PATH:/usr/local/mpich/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpich/lib

MANPATH=$MANPATH:/usr/local/mpich/man

export PATH MANPATH LD_LIBRARY_PATH

#PGI ENV. Setting
PGI=/usr/pgi
PATH=$PATH:$PGI/linux86/6.0/bin
MANPATH=$MANPATH:$PGI/linux86/6.0/man
LM_LICENSE_FILE=$LM_LICENSE_FILE:$PGI/license.dat
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PGI/linux86/6.0/lib

export PGI PATH MANPATH LM_LICENSE_FILE LD_LIBRARY_PATH

-------------------------------------------------------------
# source ~/.bash_profile
==========================================================================

3. mpich 설치
3.1 다운로드 받은 mpich소스의 압축을 풀고, 해당 소스의 루트로 이동합니다.
==========================================================================
# tar xzf ./mpich.tar.gz
# cd mpich-1.2.7p1
==========================================================================
3.2 configuration및 make
==========================================================================
# ./configure --with-device=ch_p4 -prefix=/usr/local/mpich-1.2.7p1 -c++=pgCC \
-cc=pgcc -fc=pgf77 -clinker=pgcc -flinker=pgf77 -c++linker=pgCC \
-f90=pgf90 -f90inc=/usr/pgi/linux86/6.0/include -f90linker=pgf90 \
-f90libpath=/usr/pgi/linux86/6.0/lib -opt="-fast" -rsh=ssh
# make
# make install
# ln -s /usr/local/mpich-1.2.7p1 /usr/local/mpich
==========================================================================
* 위에서 심볼릭 링크를 사용하는 이유는, 혹 다른 버전의 mpich로 변경하더라도
링크만 변경해주면, 사용자들의 환경변수를 변경할 필요없이 사용하기 위해서 입니다.

3.3 설치 확인
==========================================================================
# mpicc -V

pgcc 6.0-8 32-bit target on x86 Linux
Copyright 1989-2000, The Portland Group, Inc. All Rights Reserved.
Copyright 2000-2005, STMicroelectronics, Inc. All Rights Reserved.
/usr/lib/crt1.o(.text+0x18): In function `_start':
: undefined reference to `main'
# mpif90 -V

pgf90 6.0-8 32-bit target on x86 Linux
Copyright 1989-2000, The Portland Group, Inc. All Rights Reserved.
Copyright 2000-2005, STMicroelectronics, Inc. All Rights Reserved.
/usr/local/pgi/linux86/6.0/lib/f90main.o(.text+0x77): In function `main':
: undefined reference to `MAIN_'
==========================================================================

*** 각 계산 노드에도 같은 위치에 인스톨 하거나, NFS등을 이용하여 같은 위치에
mpich및 PGI가 위치할 수 있도록 해야 합니다.

4. 예제 실행
4.1 mpich에 포함된 예제(cpi : 원주율 계산)를 컴파일 합니다.
==========================================================================
# cd /usr/local/mpich/examples
# make cpi
# ./cpi
Process 0 on master
pi is approximately 3.1416009869231254, Error is 0.0000083333333323
wall clock time = 0.000105
==========================================================================
4.2 mpirun을 통하여 실행합니다.
- 먼저 노드를 지정하기 위해, 머신파일을 생성합니다.
==========================================================================
# vi ./mf
--------------------------------------------
node001
node002
--------------------------------------------
==========================================================================
- cpu개수 2개, 머신파일 ./mf, 마스터노드에서는 실행하지 않는 옵션으로 mpirun을
실행합니다.
==========================================================================
# mpirun -np 2 -machinefile ./mf -nolocal ./cpi
Process 0 on node001
Process 1 on node002
pi is approximately 3.1416009869231241, Error is 0.0000083333333309
wall clock time = 0.000546
==========================================================================
* 만일 노드당 2개의 cpu를 가지고 있으며, 총 4개의 cpu로 실행할 때는 다음과 같이
합니다.
==========================================================================
# vi ./mf
--------------------------------------------
node001
node001
node002
node002
--------------------------------------------
# mpirun -np 4 -machinefile ./mf -nolocal ./cpi
==========================================================================
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/04/28 10:32 2007/04/28 10:32


Posted on 2007/01/24 09:58
Filed Under Etc/cluster

출처 : http://testbed.gridcenter.or.kr/kor/technical_doc/pbs/pbs-tutorial-2002-12-30.html#3.2








PBS(Portable Batch System) 관리자 및 사용자 튜토리얼

작성자: 김상완(sangwan@kisti.re.kr)
최초 작성일: 2002-10-14

수정 날짜: 2002-12-26
수정자: 홍원택(
wthong@hpcnet.ne.kr)
수정 내용: Multiple-Host Job에 관한 실행 예제 추가

이문서는 PBS를 사용하여 배치작업을 수행하려고 하는 사용자가 알아야 할
기본적인 명령어와 사용법에 대해 설명한다. 이문서는 OpenPBS 2.3.16을 기준으로
작성되었다. 사용자는 bash 쉘을 사용한다고 가정한다.

목차
1. 시작하기
1.1. 환경 변수 설정
1.2. PBS 명령어
1.3. Hello World
1.4. 작업 환경 변수
2. 배치 작업을 위한 큐 관리
2.1. Qmgr Command (batch system manager)
1) 도움말 보기
2) 관리자 변경
3) Qmgr 명령어의 기능
4) 새로운 큐 만들기
2.2. 서버, 큐, 작업 속성
1) 서버 속성(server attributes)
2) 큐 속성(queue attributes)
3) 작업 속성(job attributes)
3. 작업 실행 예제
3.1. Single-Host Job
3.2. Multiple-Host Job
참고자료



1. 시작하기
[[목차]]

1.1. 환경 변수 설정
[[목차]]
시작하기 전에 자신의 .bashr 화일에 PBS 관련 환경 변수를 설정하여 둔자.
# vi ~/.bashrc
...
# PBS
export PATH=/usr/pbs/bin:/usr/pbs/sbin:$PATH
export PBS_SERVER_HOME=/usr/spool/PBS
export PBS_HOME=/usr/spool/PBS
export MANPATH=`man --path`:/usr/pbs/man

...
:wq
# source ~/.bashrc

1.2. 배치 작업을 위한 큐 관리
[[목차]]
PBS를 사용하기 전에 먼저 자주 사용되는 명령어를 몇 개 익혀 두도록 하자.

qalter 배치작업(job)의 속성을 변경한다.
qdel 작업을 삭제한다.
qhold 작업이 스케쥴링되어 실행되지 않도록 한다. hold 상태에 있게 된다.
qmove 작업을 다른 큐나 서버로 옮긴다.
qmsg 실행중인 작업의 출력 다음에 메시지가 출력되도록 한다.
qrerun 실행중인 작업을 강제 종료하고, 다시 큐로 돌려보낸다.
qrls Remove a hold from a job.
qselect 특정한 조건을 만족시키는 작업의 리스트를 얻는다.
qsig 실행중인 작업에 특정 시그널을 보낸다.

자세한 것은 아래의 man 페이지를 참조하도록 하자.
qalter, qdel, qhold, qmove, qmsg, qrerun, qrls, qselect, qsig

1.3. Hello World
[[목차]]

간단한 작업을 큐에 넣고 실행결과를 얻는 방법을 알아 보자.
주의>> root 권한으로는 작업을 submit 할 수 없다.

$ vi hello
#!/bin/sh
echo Hello World
:wq
$ qsub hello
1.sdd114.foo.bar.com
$ ls -la
-rw-rw-r-- 1 sangwan sangwan 36 Oct 14 22:05 hello
-rw------- 1 sangwan sangwan 0 Oct 14 22:07 hello.e1
-rw------- 1 sangwan sangwan 32 Oct 14 22:07 hello.o1
$ cat hello.o1
Hello World
$

hello 라는 쉘 스크립트를 qsub 명령으로 큐에 넣어 실행결과를 확인하였다.
표준 출력(standard output)과 표준 에러 출력(standard error)이 각각
.o#, .e# 화일로 출력되었다. 여기서 #은 작업 ID를 의미하여 위의 예에서 1은
첫번째 작업임을 의미한다.

여기서 알수 있는 것은 PBS에서 '작업'은 어떤 쉘 스크립트로써 실제 작업을
조절하는 기능을 한다는 것을 알 수 있다. 또 표준 출력과 에러출력이
실행 호스트로 부터 리다이렉트되어 사용자에게 돌아온다는 것을 알수 있다.

참고>>
스크립트내에 #PBS 명령을 이용하면, 출력화일의 이름을 지정할 수 있다.
예)
$ cat job
#!/bin/sh
#PBS -e job.err
#PBS -o job.out

hostname
date
$ qsub job
95.sdd114.foo.bar.com
$ ls job.*
job.err job.out
#PBS 다음에 qsub 명령의 컴맨드라인 옵션을 써주면 된다.
따라서, 위의 예는 다음과 같이 실행하여도 된다.
$ qsub -e job.err -o job.out job

1.4. 작업 환경 변수
[[목차]]

qsub 명령은 특정한 환경 변수들을 작업에 넘겨준다.
예를 들어 HOME 이라는 환경 변수는 "PBS_O_" 라는 접두어가 붙어
PBS_O_HOME 라는 환경 변수로 작업에서 읽어 들일 수 있다.

그외에 다음과 같은 환경 변수를 추가적으로 제공한다.
PBS_O_HOST qsub 명령이 실행된 호스트의 이름
PBS_O_QUEUE 작업이 처음 제출되었던 큐의 이름
PBS_O_WORKDIR qsub 명령이 실행된 디렉토리의 절대경로
PBS_ENVIRONMENT 배치작업이면 PBS_BATCH로
인터렉티브 작업이면 PBS_INTERACTIVE로 할당된다.
PBS_JOBID 배치시스템에서 할당해준 작업의 아이디
PBS_JOBNAME 사용자가 지정한 작업의 이름
PBS_NODEFILE 작업에 할당된 노드 리스트가 적혀 있는 화일의 이름
PBS_QUEUE 작업이 실행되고 있는 큐의 이름

PBS에서 제공하는 환경 변수를 읽기 위한 작업 스크립트를 작성해 보자.

$ vi env
#!/bin/sh

hostname
pwd
echo HOME=$PBS_O_HOME
echo PATH=$PBS_O_PATH
echo SHELL=$PBS_O_SHELL
echo PID=$$
echo PBS_O_HOST=$PBS_O_HOST
echo PBS_O_QUEUE=$PBS_O_QUEUE
echo PBS_O_WORKDIR=$PBS_O_WORKDIR
echo PBS_ENVIRONMEN=$PBS_ENVIRONMENT
echo PBS_JOBID=$PBS_JOBID
echo PBS_JOBNAME=$PBS_JOBNAME
echo PBS_NODEFILE=$PBS_NODEFILE
echo PBS_QUEUE=$PBS_QUEUE
:wq
$ qsub env
2.sdd114.foo.bar.com
$ ls env*
env env.e2 env.o2
$ cat env.o2
sdd105.foo.bar.com
/home/sangwan
HOME=/home/sangwan
PATH=/usr/pbs/bin:/usr/pbs/sbin:/usr/pbs/bin:/usr/pbs/sbin:/bin:/usr/bin:/usr/lo
cal/bin:/usr/X11R6/bin
SHELL=/bin/bash
PID=9126
PBS_O_HOST=sdd114.foo.bar.com
PBS_O_QUEUE=workq
PBS_O_WORKDIR=/home/sangwan/pbs
PBS_ENVIRONMEN=PBS_BATCH
PBS_JOBID=18.sdd114.foo.bar.com
PBS_JOBNAME=env
PBS_NODEFILE=
PBS_QUEUE=workq

참고> 위의 스크립트는 sh 쉘스크립트로 작성되었지만, 어떤 종류의 쉘 스크립트도
가능하다. env 의 perl 언어 버젼인 env.pl 은 다음과 같다.

$ cat env.pl
#!/usr/bin/perl

print `hostname`;
print `pwd`;
print "HOME=$ENV{'PBS_O_HOME'}\n";
print "PATH=$ENV{'PBS_O_PATH'}\n";
print "SHELL=$ENV{'PBS_O_SHELL'}\n";
print "PID=$$\n";
print "PBS_O_HOST=$ENV{'PBS_O_HOST'}\n";
print "PBS_O_QUEUE=$ENV{'PBS_O_QUEUE'}\n";
print "PBS_O_WORKDIR=$ENV{'PBS_O_WORKDIR'}\n";
print "PBS_ENVIRONMEN=$ENV{'PBS_ENVIRONMENT'}\n";
print "PBS_JOBID=$ENV{'PBS_JOBID'}\n";
print "PBS_JOBNAME=$ENV{'PBS_JOBNAME'}\n";
print "PBS_NODEFILE=$ENV{'PBS_NODEFILE'}\n";
print "PBS_QUEUE=$ENV{'PBS_QUEUE'}\n";

실행결과는 위의 경우와 같다.

2. PBS 명령어
[[목차]]

2.1. Qmgr Command (batch system manager)
[[목차]]

qmgr 명령은 배치 시스템 관리자를 위한 인터페이스 명령이다.
qmgr의 list나 print와 같은 명령은 일반 사용자도 사용이 가능하지만,
create나 delete와 같은 명령은 관리자 권한을 필요로 한다.
자세한 내용은 man qmgr을 참조하기 바란다.

1) 도움말 보기
[[목차]]
qmgr을 실행하고, 온라인 도움말을 보는 방법은 다음과 같다.
$ qmgr
Max open servers: 4
Qmgr: help
General syntax: command [object][@server] [name attribute[.resource] OP value]
To get help on any topic or subtopic, type help
Help is available on all commands and topics.
Available commands: active, create, delete, set, unset, list, print, quit
Other topics are attributes, operators, names, and values .
참고>> Qmgr 전체 도움말

2) 관리자 변경
[[목차]]
배치 시스템 관리자를 지정하기 위해 qmgr 명령을 이용해 보자.
root 권한으로 로그인한 다음 qmgr 명령을 실행한다.

# qmgr
Max open servers: 4
Qmgr: set server managers=sangwan@sdd114.foo.bar.com
Qmgr: quit
#

managers는 pbs_server의 속성(attribute)이며(man pbs_server_attributes 참조),
배치 시스템을 관리할 수 있는 관리자를 나타낸다. 이제 배치 시스템을 관리하기
위해 root로 권한을 가질 필요가 없게 되었다.

3) Qmgr 명령어의 기능
[[목차]]
qmgr 명령의 형식은 다음과 같다.

command server [names] [attr OP value[,attr OP value,...]]
command queue [names] [attr OP value[,attr OP value,...]]
command node [names] [attr OP value[,attr OP value,...]]
(man qmgr 참조)

command는 다음과 같은 종류가 있다.

active(a) 활성화된 객체를 지정한다.
create(c) 새로운 객체를 생성한다.
delete(d) 큐 또는 노드를 제거한다.
set(s) 객체의 속성을 설정한다.
unset(u) 객체의 속성을 제거한다.
list(l) 객체에 설정되어 있는 속성들을 나열한다.
print(p) 큐 또는 서버의 속성을 출력한다.
print문의 출력은 qmgr의 입력으로도 이용될 수 있다.

몇가지 예를 들어 보자.
$ qmgr
Qmgr: print node sdd105
#
# Create nodes and set their properties.
#
# Create and define node sdd105
#
# create node sdd105 # unsuppored operation
set node sdd105 state = free
set node sdd105 ntype = cluster
Qmgr: print queue workq
#
# Create queues and set their attributes.
#
#
# Create and define queue workq
#
create queue workq
set queue workq queue_type = Execution
set queue workq enabled = True
set queue workq started = True
Qmgr: print server
#
# Create queues and set their attributes.
#
#
# Create and define queue workq
#
create queue workq
set queue workq queue_type = Execution
set queue workq enabled = True
set queue workq started = True
#
# Set server attributes.
#
set server scheduling = True
set server managers = sangwan@sdd114.foo.bar.com
set server default_queue = workq
set server log_events = 511
set server mail_from = adm
set server query_other_jobs = True
set server scheduler_iteration = 600
Qmgr: list node sdd105
Node sdd105
state = free
np = 1
ntype = cluster
Qmgr: list queue workq
Queue workq
queue_type = Execution
total_jobs = 0
state_count = Transit:0 Queued:0 Held:0 Waiting:0 Running:0 Exiting:0
enabled = True
started = True
Qmgr: list server
Server sdd114.foo.bar.com
server_state = Active
scheduling = True
total_jobs = 0
state_count = Transit:0 Queued:0 Held:0 Waiting:0 Running:0 Exiting:0
managers = sangwan@sdd114.foo.bar.com
default_queue = workq
log_events = 511
mail_from = adm
query_other_jobs = True
scheduler_iteration = 600
pbs_version = OpenPBS_2.3.16

다음과 같이 'print server'를 'p s'로 줄여서 쓸수 있다.
managers 라는 속성을 출력한다.
Qmgr: p s managers
#
# Set server attributes.
#
set server managers = sangwan@sdd114.foo.bar.com

쉘 프롬프트 상에서는 qmgr 에 -c 옵션을 주어 실행하여도 된다.
Qmgr: quit
$ qmgr -c "p s managers"
#
# Set server attributes.
#
set server managers = sangwan@sdd114.foo.bar.com

4) 새로운 큐 만들기
[[목차]]

qsub 명령에서 큐를 명시하지 않으면 작업이 default_queue에 들어가에 된다.
디폴트 큐를 만들어 보자.
참고>> command는 다음과 같이 줄여쓴다: create(c), set(s), print(p)
object는 다음과 같이 줄여쓴다: queue(q), server(s)
Qmgr: c q dque queue_type=execution
Qmgr: s s default_queue=dque
Qmgr: s q dque enabled=true
Qmgr: s q dque started=true
Qmgr: p s default_queue
#
# Set server attributes.
#
set server default_queue = dque

모든 큐에는 queue_type, enabled, started 속성이 설정되어 있어야 한다.
queue_type은 execution(e) 또는 routing(r)이 있다.
enabled가 true로 설정되어 있을 경우에만 작업을 큐에 넣을 수 있다.
started가 true로 설정되어 있을 경우, 실행 큐에 있는 작업들은 스케쥴링 되며,
라우팅 큐에 있는 작업들은 라우팅된다.
참고>>
라우팅 큐의 경우는 route_destinations 라는 속성도 설정되어 있어야 한다.
자세한 것은 man pbs_queue_attributes 를 참조하도록 하자.

새로 만든 큐가 동작하는지 알아보자.
$ vi sleep
#!/bin/sh
hostname
sleep 30
date
:wq
$ qsub sleep
$ qsub sleep
$ qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
49.sdd114 sleep sangwan 0 R dque
50.sdd114 sleep sangwan 0 R dque

$ qstat -f # -f 옵션을 주면 full status가 출력된다.
Job Id: 49.sdd114.foo.bar.com
Job_Name = sleep
Job_Owner = sangwan@sdd114.foo.bar.com
job_state = R
...
Job Id: 50.sdd114.foo.bar.com
Job_Name = sleep
Job_Owner = sangwan@sdd114.foo.bar.com
job_state = R
$
참고>> 작업의 상태는
E(exiting), H(held), Q(queued), R(running), S(suspend), T(transit), W(waiting)
을 의미한다.

2.2. 서버, 큐, 작업 속성
[[목차]]

1) 서버 속성(server attributes)
[[목차]]

위에서 큐를 만들때 default_queue를 설정해 주었는데,
서버 속성으로 default_queue는 반드시 설정되어 있어야 한다.

그밖에 서버 속성으로 다음과 같은 것들이 있다.
(man pbs_server_attributes를 참조.)

acl_hosts 작업을 submit 할 수 있는 호스트의 리스트
acl_host_enable acl_hosts 설정을 사용하도록 설정한다.
예) 마스터 노드에서만 작업을 submit 할수 있게 설정하면 클라이언트에서
qsub 시 에러가 발생한다.
Qmgr: s s acl_hosts=sdd114.foo.bar.com
Qmgr: s s acl_host_enable=true
# hostname
sdd105
# qsub hello
pbs_iff: error returned: 15008
pbs_iff: Access from host not allowed, or unknown host
No Permission.
qsub: cannot connect to server sdd114 (errno=15007)
참고>> acl_hosts에 *.foo.bar.com 과 같이 와일드카드 문자를 사용할 수 있다.

query_other_jobs true로 설정되면 다른 사용자의 작업을 쿼리할 수 있다.
false이거나 설정되지 않으면 쿼리할 수 없다.
qstat에서 다른 사용자의 작업은 표시되지 않는다.
예)
현재 사용자가 dol 이고, query_other_jobs=false 인 경우
$ qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
56.sdd114 sleep dol 0 R dque

query_other_jobs=true 인 경우
$ qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
56.sdd114 sleep dol 0 R dque
57.sdd114 sleep sangwan 00:00:00 R dque


resources_defaults 작업에 할당된 자원을 제한한다. 이 것은 작업에 대해서
limit이 지정되지 않았고, 큐에 대해서도 limit이 지정되지
않았을 경우에만 적용된다.
형식은 "resources_default.resource_name=value[,...]";
resources_max 작업이 요청할 수 있는 최대의 자원의 양을 지정한다.
형식은 "resources_max.resource_name=value[,...]";
위에서 resource_name은 cput(최대 CPU 시간), file(생성 가능한 최대 화일 크기),
nice(작업이 실행될 수 있는 최대 nice값), pcput(단일 프로세스가 사용할 수 있는
최대 CPU 시간), pmem(단일 프로세스가 사용가능한 최대 물리적 메모리),
pvmem(단일 프로세스가 사용가능한 최대 가상 메모리), vmem(모든 프로세스가
사용할 수 있는 가상메모리의 합계), walltime(작업이 실행 상태에 머무를 수 있는
최대 시간), arch(시스템 아키택쳐), host(작업이 실행 되는 호스트의 이름),
nodes(작업에 단독적으로 할당되는 노드의 개수)등이 있고 이것에 대한 설명은
man pbs_resources를 참고하자.
예)
서버의 resources_max.walltime 을 20초로 제한 하면, 실행중이던 작업이
중단된다.
$ qmgr -c "set server resources_max.walltime=20"
$ echo sleep2
#!/bin/sh
date; sleep 10; date; sleep 10 date; sleep 10
date; sleep 10; date; sleep 10 date; sleep 10
date; sleep 10; date; sleep 10 date; sleep 10
date; sleep 10; date; sleep 10 date; sleep 10
date; sleep 10; date; sleep 10 date; sleep 10
date;
$ qsub sleep2
68.sdd114.foo.bar.com
$ cat sleep2.e68
=>> PBS: job killed: walltime 30 exceeded limit 20
$ cat sleep2.o68
Tue Oct 15 16:28:33 KST 2002
Tue Oct 15 16:28:43 KST 2002
Tue Oct 15 16:28:53 KST 2002
$

resources_defaults와 resources_max 속성은 서버뿐만 아니라 작업과 큐에도
존재한다. 작업의 자원 제한량은 다음 순서로 결정된다:
(1) 사용자가 요청한 작업의 Resource_List
(2) 큐의 resources_default 속성
(3) 서버의 resources_default 속성
(4) 큐의 resources_max 속성
(5) 서버의 resources_max 속성

$ qmgr -c "s s resources_max.walltime=24:00:00"; \
qmgr -c "s q dque resources_max.walltime=1:00:00"; \
qmgr -c "s s resources_default.walltime=2:00:00"; \
qmgr -c "s q dque resources_default.walltime=0:30:00"

위와 같이 설정을 하면 dque 에 대해서 최대 실행시간 30초가 적용된다.
설정된 값을 지우려면 다음과 같이 하면 된다:
$ qmgr -c "u s resources_max.walltime"; \
qmgr -c "u q dque resources_max.walltime"; \
qmgr -c "u s resources_default.walltime"; \
qmgr -c "u q dque resources_default.walltime"

값이 설정되지 않았을 때는 unlimit 가 적용된다.

서버의 속성에는 다음과 같은 것들이 있다: (man pbs_server_attributes 참조)
acl_host_enable, acl_hosts, acl_user_enable, acl_users, acl_roots, comment,
default_node, default_queue, log_events, mail_uid, managers, max_running,
max_user_run, max_group_run, node_pack, operators, query_other_jobs,
resources_available, resources_cost, resources_default, scheduler_iteration,
scheduling, system_cost

2) 큐 속성(queue attributes)
[[목차]]
큐의 속성에는 다음과 같은 것들이 있다: (man pbs_queue_attributes 참조)
acl_group_enable, acl_groups, acl_host_enable, acl_hosts, acl_user_enable,
acl_users, enabled, from_route_only, max_queuable, max_running, Priority,
queue_type, resources_max, resources_min, resources_default, started
다음 속성은 실행 큐에만 적용된다:
checkpoint_min, resources_available, kill_delay, max_user_run, max_group_run
다음 속성은 라우팅 큐에만 적용된다:
route_destination, alt_router, route_held_jobs, route_waiting_jobs,
route_retry_time, route_lifetime

3) 작업 속성(job attributes)
[[목차]]

배치 작업은 다음과 같은 속성을 가진다: (man pbs_job_attributes 참조)
Account_Name, Checkpoint, depend, Error_Path, Execution_Time, group_list,
Hold_Types, Job_Name, Join_Path, Keep_Files, Mail_Points, Mail_Users,
Output_Path, Priority, Rerunable, Resource_List, Shell_Path_List, stagein,
stateout, User_List, Variable_List
다음 변수를 변경하려면 시스템 관리자의 권한이 필요하다:
comment, sched_hint, alt_id, ctime, etime, exec_host, egroup, euser,
hashname, interactive, Job_Owner, job_state, mtime, qtime, queue,
queue_rank, queue_type, resources_used, server, session_id, substate


3. 작업 실행 예제
[[목차]]

3.1. Single-Host Job
[[목차]]

1) 예제
소수(prime number)를 출력하기 위한 다음과 같은 프로그램이 있다고 해보자.
소스코드 : prime.c
$ ./prime 1 100 # 1에서 100사이의 소수를 출력한다.
prime numbers betwen [1, 100]
1: 1 is a prime number
2: 2 is a prime number
3: 3 is a prime number
4: 5 is a prime number
...
24: 83 is a prime number
25: 89 is a prime number
26: 97 is a prime number
$

이것을 PBS 작업으로 실행시키기 위해서는 작업 스크립트를 작성하여야 한다.
$ vi prime.sh
#!/bin/sh
#PBS -l nodes=1 # 실행중인 노드를 execlusive 하게 이용하기 위해 넣어준다.
#PBS -m abe # 작업이 중단(abort), 시작(begin), 종료(end)될때
#PBS -M sangwan@foo.bar.com # 사용자에게 메일을 보낸다
hostname
date # 실행 시작 시간
$PBS_O_WORKDIR/prime 1 1000000
date # 실행 종료 시간
:wq
$ qsub prime.sh
87.sdd114.foo.bar.com
$ ls -la prime.sh.o87
-rw------- 1 sangwan sangwan 5239 Oct 15 18:37 prime.sh.o87
$ cat prime.sh.o87
sdd105.foo.bar.com
Wed Oct 16 18:01:07 KST 2002
prime numbers betwen [1, 1000000]
1: 1 is a prime number
2: 2 is a prime number
...
78498: 999979 is a prime number
78499: 999983 is a prime number
Wed Oct 16 18:01:18 KST 2002

2) 여러개를 한꺼번에 실행하기
$ cat prime.one.sh
#!/bin/sh
#PBS -l nodes=1
hostname
$PBS_O_WORKDIR/prime 1 1000000 # 1 부터 1000000 까지 소수를 출력
$ cat prime.two.sh
#!/bin/sh
#PBS -l nodes=1
hostname
$PBS_O_WORKDIR/prime 1000001 2000000 # 1000001부터 2000000 까지 소수를 출력
$ cat prime.three.sh
#!/bin/sh
#PBS -l nodes=1
hostname
$PBS_O_WORKDIR/prime 2000001 3000000 # 2000001 부터 3000000 까지 소수를 출력

$ qsub prime.one.sh ; qsub prime.two.sh ; qsub prime.three.sh
$ qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
135.sdd114 prime.one.sh sangwan 0 R workq
136.sdd114 prime.two.sh sangwan 0 R workq
137.sdd114 prime.three.sh sangwan 0 R workq

$ pbsnodes -a
sdd105
state = job-exclusive
np = 1
ntype = cluster
jobs = 0/135.sdd114.foo.bar.com

sdd106
state = job-exclusive
np = 1
ntype = cluster
jobs = 0/136.sdd114.foo.bar.com

sdd107
state = job-exclusive
np = 1
ntype = cluster
jobs = 0/137.sdd114.foo.bar.com


3.2. Multiple-Host Job
[[목차]]
1) 예제

원주율을 구하는 다음과 같은 프로그램이 있다고 해보자. 이 프로그램은 mpich로 컴파일된 프로그램이다.
$ ./cpi
Process 0 on sdd114.foo.bar.com
pi is approximately 3.1416009869231254, Error is 0.0000083333333323
wall clock time = 0.000096
$

이것을 PBS 작업으로 실행시키기 위해서는 작업 스크립트를 작성하여야 한다.
$ vi test.sh
#!/bin/sh
#PBS -l nodes=3 # 실행중인 노드를 execlusive 하게 이용하기 위해 넣어준다.
hostname
cat $PBS_NODEFILE
NPROCS=`wc -l < $PBS_NODEFILE` #프로세서의 수를 정의한다.
date # 실행 시작 시간
/usr/local/mpich/bin/mpirun -v -machinefile $PBS_NODEFILE -np $NPROCS $PBS_O_WORKDIR/cpi
sleep 10
date # 실행 종료 시간
$ :wq

$ qsub test.sh
217.sdd114.foo.bar.com
$ qstat -n

sdd114.foo.bar.com:
Req'd Req'd Elap
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
217.sdd114.foo. wthong dque test.sh 23187 3 -- -- -- R --
sdd107/0+sdd106/0+sdd105/0
$ pbsnodes -a
sdd105
state = job-exclusive
np = 1
ntype = cluster
jobs = 0/217.sdd114.foo.bar.com

sdd106
state = job-exclusive
np = 1
ntype = cluster
jobs = 0/217.sdd114.foo.bar.com

sdd107
state = job-exclusive
np = 1
ntype = cluster
jobs = 0/217.sdd114.foo.bar.com
$ ls -la test.sh.o217
-rw------- 1 wthong wthong 292 Dec 26 10:12 test.sh.o217
$ cat test.sh.o217
sdd107.foo.bar.com
sdd107
sdd106
sdd105
Thu Dec 26 09:54:50 KST 2002
running /home/wthong/pbs_test/cpi on 3 LINUX ch_p4 processors
Created /AUTOFS/home/wthong/PI23221
pi is approximately 3.1416009869231249, Error is 0.0000083333333318
wall clock time = 0.000371
Thu Dec 26 09:55:01 KST 2002


참고자료
[[목차]]
1. Portable Batch System Administrator Guide (Release 2.3)
http://www.openpbs.org/docs.html
2. PBS(Portable Batch System) 설치하기
3. PORTABLE BATCH SYSTEM (PBS) MINI-HOWTO
http://www.fysik.dtu.dk/CAMP/pbs.html
4. Archive of pbs-users mail list By Thread
http://www.openpbs.org/UserArea/pbs-users/thread.html
5. MAN 페이지
- qalter, qdel, qhold, qmove, qmsg, qrerun, qrls, qselect, qsub, qsig, qmgr
- pbs_server_attributes, pbs_queue_attributes, pbs_job_attributes
- pbs_resources

-EOF- PBS(Portable Batch System) 관리자 및 사용자 튜토리얼 [[TOP]]
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/01/24 09:58 2007/01/24 09:58


Posted on 2006/10/23 10:12
Filed Under Etc/cluster

http://www.clusterresources.com/pages/resources/documentation.php



페이지 참고...
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
2006/10/23 10:12 2006/10/23 10:12


Posted on 2006/06/21 10:09
Filed Under Etc/cluster

PBS(Portable Batch System) 설치하기



출처 : http://blog.naver.com/vikong/60024492566





PBS(Portable Batch System) 설치하기



작성자: 김상완(sangwan@kisti.re.kr)

최초 작성일: 2002-10-14



이 문서는 PBS(Portable Batch System) 을 설치하고 사용하는 방법을 설명한다.

설치에 사용된 운영체제는 RedHat 7.1이고, 이 문서에서 설치된 OpenPBS 버젼은

2.3.16이다. 소스 코드와 RPM 패키지로 설치하는 방법을 설명한다.



문서 업데이트

2002-10-16: 버그 수정, RPM 제거 방법

2002-10-17: PBS 제시작 스크립트



목차

1. 소스로 설치하기

1.1. 마스터 노드에 설치

0) 다운로드 받기

1) 압축풀기

2) 컴파일하기

3) 설치하기

4) 서버 설정

5) 서버 데몬 시작하기

6) 클라이언트 노드 접속 확인

7) 서버 데몬 제시작 시키기

8) PBS 제거하기

1.2. 클라이언트 노드에 설치

1) 압축풀기

2) 컴파일하기

3) 설치하기

4) 클라이언트 설정

5) 클라이언트 데몬 시작하기

2. RPM으로 설치

2.1. 마스터 노드에 설치

1) RPM 패키지 설치

2) 환경 변수의 추가

3) 서버 설정

4) 서버 데몬 시작하기

2.2. 클라이언트 노드에 설치

1) RPM 패키지 설치

2) 클라이언트 설정

3) 클라이언트 데몬 시작하기

4) PBS 제거하기

3. 기타

3.1. MAN 페이지 참조

3.2. PBS 데몬의 종류

3.3. 네트웍 주소와 포트

3.4. 부팅시 데몬을 자동으로 실행하기

3.5. PBS 제시작 스크립트

참고자료

--------------------------------------------------------------------------------



1. 소스로 설치하기 [[목차]]



1.1. 마스터 노드에 설치 [[목차]]



0) 다운로드 받기

http://www.openpbs.org에서 PBS 최신 버젼을 다운로드 받는다.

또는 KISTI Grid Testbed의 '소프트웨어 다운로드 디렉토리'에서

(http://gridtest.gridcenter.or.kr/software/index.php?dir=/OpenPBS)

OpenPBS_2_3_16.tar.gz을 다운 받는다.



1) 압축풀기

$ tar zxvf OpenPBS_2_3_16.tar.gz

$ cd OpenPBS_2_3_16



2) 컴파일하기

--enable-docs 옵션이 없으면 man 문서가 설치되지 않는다.

$ ./configure --prefix=/usr/pbs --enable-docs --disable-mom

$ make





주의사항



It seems gcc 3.2 cannot compile OpenPBS.



Until it can you will need gcc 2.95 or gcc 2.96.



If you have both (ie 2.9x & 3.2) on your system then make sure that



/usr/bin/gcc refers to version 2.95 or 2.96. http://blue.chem.psu.edu/~rajarshi/misc/qopbs.html







즉 LINUX 최신 버젼에서는 컴파일 불가능 이다. 그러므로 rpm 으로 설치해야 한다.



rpm 설치법은 밑에 있습니다.







주의>>

OpenPBS 2.3.12등의 이전 버젼에서는 컴파일과정에서

"'CLK_TCK' undeclared" 등의 에러가 발생할 수 있으나 헤더화일 include등을

수정하면 컴파일이 가능하다.



3) 설치하기

/usr/pbs에 바이너리가 설치되고,

/usr/spool/PBS에 환경설정 및 로그화일 디렉토리 등이 설치된다.

$ su

# make install



4) 서버 설정

# cd /usr/spool/PBS

서버 이름을 지정하여 준다.

# cat server_name

sdd114.foobar.com

서버에 연결된 노드들을 명시하여 준다.

# vi server_priv/nodes

sdd105

sdd106

sdd107

:wq



참고>> nodes 화일의 형식은 다음과 같다.

node_name[:ts] [property ...] [np=NUMBER]

노드 이름 다음에 ts는 timeshared를 의미한다.

np=NUMBER 는 VP(virtual processor)의 개수를 지정한다.

자세한 것은 참고자료를 참고 할 것.



소스로 설치할 경우 설정 화일이 생성되지 않으므로 만들어 준다.

# vi /usr/spool/PBS/pbs_server.conf

#

# Create queues and set their attributes.

# Create and define queue workq

#

create queue workq

set queue workq queue_type = Execution

set queue workq enabled = True

set queue workq started = True

#

# Set server attributes.

#

set server scheduling = True

set server default_queue = workq

set server log_events = 511

set server mail_from = adm

set server query_other_jobs = True

set server scheduler_iteration = 600

:wq



serverdb 화일 생성, 큐 생성 등의 초기화

# /usr/pbs/sbin/pbs_server -t create

# /usr/pbs/bin/qmgr < /usr/spool/PBS/pbs_server.conf

Max open servers: 4

# /usr/pbs/bin/qterm



5) 서버 데몬 시작하기

# /usr/pbs/sbin/pbs_server

# /usr/pbs/sbin/pbs_sched

# ps -ax | grep pbs

15038 ? S 0:00 /usr/pbs/sbin/pbs_server

15040 ? S 0:00 /usr/pbs/sbin/pbs_sched



6) 클라이언트 노드 접속 확인

# /usr/pbs/bin/pbsnodes -a

sdd105

state = free

np = 1

ntype = cluster



sdd106

state = free

np = 1

ntype = cluster



sdd107

state = free

np = 1

ntype = cluster



7) 서버 데몬 제시작 시키기

# killall pbs_server ; killall pbs_sched ; \

/usr/pbs/sbin/pbs_server ; /usr/pbs/sbin/pbs_sched



8) PBS 제거하기

# killall pbs_sched pbs_server

# killall pbs_mom

# rm -rf /usr/spool/PBS /usr/pbs



1.2. 클라이언트 노드에 설치 [[목차]]



1) 압축풀기

$ tar zxvf OpenPBS_2_3_16.tar.gz

$ cd OpenPBS_2_3_16



2) 컴파일하기

$ ./configure --help

$ ./configure --prefix=/usr/pbs --disable-server --enable-mom \

--set-default-server=sdd114.foobar.com

참고>> --set-default-server 옵션의 값은 server_name 화일에 저장된다.

$ make



3) 설치하기

$ su

# make install

/usr/pbs에 바이너리가 설치되고,

/usr/spool/PBS에 환경설정 및 로그화일 디렉토리 등이 설치된다.



4) 클라이언트 설정

# cd /usr/spool/PBS

# cat server_name

sdd114.foo.bar.com

# vi mom_priv/config

$clienthost sdd114.foo.bar.com

:wq



5) 클라이언트 데몬 시작하기

# /usr/pbs/sbin/pbs_mom

# ps -ax | grep pbs

17812 ? S 0:00 /usr/pbs/sbin/pbs_mom





2. RPM으로 설치 [[목차]]



www.openpbs.org에서 PBS 최신 버젼을 다운로드 받는다.

또는 KISTI Grid Testbed의 '소프트웨어 다운로드 디렉토리'에서

(http://gridtest.hpcnet.ne.kr/software/index.php?dir=/OpenPBS)

openpbs-2.3pl2-1.i386.rpm (마스터 노드용)

openpbs-exechost-2.3pl2-1.i386.rpm (계산 노드용)

위의 두 화일을 다운 받는다.



2.1. 마스터 노드에 설치 [[목차]]



1) RPM 패키지 설치

tcl, tk 패키지등의 의존성 문제가 있으므로 --nodeps 옵션을 주어 설치한다.

# rpm -ivh --nodeps openpbs-2.3pl2-1.i386.rpm

Preparing... ########################################### [100%]

1:openpbs ########################################### [100%]



2) 환경 변수의 추가

# vi ~/.bashrc

...

# PBS

export PATH=/usr/pbs/bin:/usr/pbs/sbin:$PATH

export PBS_SERVER_HOME=/usr/spool/PBS

export PBS_HOME=/usr/spool/PBS

...

:wq

# source ~/.bashrc



3) 서버 설정

# cd /usr/spool/PBS

# vi server_priv/nodes

sdd105

sdd106

sdd107

:wq

# vi server_name

sdd114.foo.bar.com

:wq



4) 서버 데몬 시작하기

# /usr/pbs/sbin/pbs_server

# /usr/pbs/sbin/pbs_sched

# ps -ax | grep pbs

15270 ? S 0:00 /usr/pbs/sbin/pbs_server

15274 ? S 0:00 /usr/pbs/sbin/pbs_sched



2.2. 클라이언트 노드에 설치 [[목차]]



1) RPM 패키지 설치



# rpm -qpl openpbs-exechost-2.3pl2-1.i386.rpm

/etc/rc.d/init.d/pbs

/usr/doc/openpbs-exechost-2.3pl2

...

/usr/spool/PBS

/usr/spool/PBS/aux

/usr/spool/PBS/checkpoint

/usr/spool/PBS/mom_logs

/usr/spool/PBS/mom_priv

/usr/spool/PBS/mom_priv/jobs

/usr/spool/PBS/pbs_environment

/usr/spool/PBS/server_name

/usr/spool/PBS/spool

/usr/spool/PBS/undelivered



tcl, tk 패키지등의 의존성 문제가 있으므로 --nodeps 옵션을 주어 설치한다.

# rpm -ivh --nodeps openpbs-exechost-2.3pl2-1.i386.rpm

Preparing... ########################################### [100%]

1:openpbs-exechost ########################################### [100%]



2) 클라이언트 설정

# cd /usr/spool/PBS

# vi server_name

sdd114.foo.bar.com

:wq

# vi mom_priv/config

$clienthost sdd114.foo.bar.com

:wq



3) 클라이언트 데몬 시작하기

# /usr/pbs/sbin/pbs_mom

# ps -ax | grep pbs

4178 ? S 0:00 /usr/pbs/sbin/pbs_mom



4) PBS 제거하기

RPM으로 PBS를 설치하였을 경우 PBS를 제거하려면 실행중인 프로세스를 죽이고,

패키지를 제거하면 된다.

# killall pbs_server ; killall pbs_sched ; killall pbs_mom

# ps -ax | grep pbs

# rpm -qa | grep pbs

openpbs-2.3pl2-1

openpbs-exechost-2.3pl2-1

# rpm -e openpbs

...

error: cannot remove /usr/spool/PBS - directory not empty

# rpm -e openpbs-exechost

...

error: cannot remove /usr/spool/PBS - directory not empty

# rpm -qa | grep pbs

# rm -rf /usr/spool/PBS





3. 기타 [[목차]]



3.1. MAN 페이지 참조 [[목차]]

--enable-docs 옵션을 주어 컴파일 하면 /usr/pbs/man 에 메뉴얼 페이지가 설치된다.

이것을 MANPATH에 추가 하여 두려면 다음 행을 .bashrc 에 추가해 두자.

# export MANPATH=`man --path`:/usr/pbs/man



3.2. PBS 데몬의 종류 [[목차]]

Job Server (pbs_server)

사용자로 부터 배치 작업을 받거나 생성한는 역할을 한다. 작업을 수정하거나,

시스템 정지로 인한 작업의 손실을 방지하는 역할도 한다.

Job Executor (pbs_mom)

실제로 작업을 실행시키는 역할을 한다. 모든 실행중인 작업의 mother 라는 뜻으로

mom 이라고 부른다. 작업의 출력을 서버로 전달하는 역할을 한다.

Job Scheduler (pbs_sched)

어떤 작업을 어디에서 언제 실행시킬지를 결정하는 역할을 한다. Mom 들로 부터

시스템의 자원상태를 모니터링 하기 위한 정보를 수집하며, Server로 부터 수행해야

될 작업에 대한 정보를 수집한다.



3.3. 네트웍 주소와 포트 [[목차]]

PBS의 데몬들과 명령어들은 사용할 포트 번호를 알아내기 위해서 /etc/services를

검색한다. 포트 번호는 모든 서버와 클라이언트에 동일하게 지정되어 있어야 한다.

만약 /etc/services에 포트 번호를 지정해 주지 않았을 경우에는 다음의 포트들이

사용된다.



pbs 15001/tcp # pbs server (pbs_server)

pbs_mom 15002/tcp # mom to/from server

pbs_resmom 15003/tcp # mom resource management requests

pbs_resmom 15003/udp # mom resource management requests

pbs_sched 15004/tcp # scheduler



참고>>pbs_resmom 은 이전 버전의 PBS에서 사용되던 포트번호이다. 지금은

pbs_mom 데몬으로 그 기능이 합쳐졌다.



3.4. 부팅시 데몬을 자동으로 실행하기 [[목차]]

데몬을 자동으로 실행하려면 /etc/rc.d/rc.local 화일에 데몬 실행 명령을 추가해 준다.



마스터 노드

# vi /etc/rc.d/rc.local

...

# PBS daemons (master node)

/usr/pbs/sbin/pbs_server

/usr/pbs/sbin/pbs_sched

:wq



클라이언트 노드

# vi /etc/rc.d/rc.local

# PBS daemons (client nodes)

/usr/pbs/sbin/pbs_mom

:wq



3.5. PBS 제시작 스크립트 [[목차]]

전체 클러스터의 PBS 시스템을 중지시키고, 설정화일을 복사한 후 다시 제시작

시키는 스크립트이다. rsh과 rcp가 동작하여야 한다.

$ cat pbsrestart.sh

#!/bin/sh



# stop server

killall pbs_server

killall pbs_sched

ps -ax | grep pbs_

sleep 1



# stop moms

rsh sdd105 "killall pbs_mom"

rsh sdd106 "killall pbs_mom"

rsh sdd107 "killall pbs_mom"

rsh sdd105 "ps -ax | grep pbs_"

rsh sdd106 "ps -ax | grep pbs_"

rsh sdd107 "ps -ax | grep pbs_"

sleep 1



# copy mom.conf to client nodes

# mom.conf should be under the current directory

rcp mom.conf sdd105:/usr/spool/PBS/mom_priv/config

rcp mom.conf sdd106:/usr/spool/PBS/mom_priv/config

rcp mom.conf sdd107:/usr/spool/PBS/mom_priv/config

sleep 1



# start moms

rsh sdd105 /usr/pbs/sbin/pbs_mom

rsh sdd106 /usr/pbs/sbin/pbs_mom

rsh sdd107 /usr/pbs/sbin/pbs_mom

rsh sdd105 "ps -ax | grep pbs_"

rsh sdd106 "ps -ax | grep pbs_"

rsh sdd107 "ps -ax | grep pbs_"

sleep 1



# start server

/usr/pbs/sbin/pbs_server

/usr/pbs/sbin/pbs_sched

ps -ax | grep pbs_

sleep 1



# set server attributes

# e.g.

# qmgr -c "s q workq max_running=10"



# show nodes status

pbsnodes -a | more

$





참고자료 [[목차]]

1. Portable Batch System Administrator Guide (Release 2.3)

http://www.openpbs.org/docs.html

2. PBS man pages



-EOF- PBS 설치하기 [[TOP]]
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2006/06/21 10:09 2006/06/21 10:09


About

by 삐꾸강아쥐

Counter

· Total
: 138036
· Today
: 12
· Yesterday
: 155
블로그코리아에 블UP하기