본문 바로가기
컴퓨터 & IT (Computer & IT)/Beowulf Cluster (Diskless Cluster)

[Diskless Cluster] 3.2 클러스터 운영과 관련된 필수 유틸리티들 - Torque/Slurm

by Physics 2020. 6. 2.
728x90

우분투 16.04 LTS의 경우, Ubuntu repository에서 TORQUE/PBS를 설치할 수 있었다. 하지만, 18.04 이상의 버전부턴, 해당 버전에 대응되는 repository에서는 TORQUE가 없다. 물론, 이전 버전에 대응되는 repository에서 TORQUE를 설치할 수 있겠지만, 서로 다른 버전의 OS 간의 패키지 의존성등의 문제들을 감수해야한다. 다행이도 ubuntu에서 다른 무료 오픈 소스 PBS인 slurm을 사용할 수 있다. 여기서는 주로 slurm에 대해서 설명하며, torque 관련 정보가 필요한 사람을 위해서 이전에 정리한 내용들을 뒷부분에 정리했다. 


0. Slurm이란? 

slurm은 TORQUE와 같은 PBS, 즉, Cluster에서 작업을 할당해주는 프로그램이다. slurm은 Torque와 다르게 오픈소스로 현재 버전이 20.11까지 나왔다. 공식 홈페이지에서 소개하는, 작업 매니저로써의 slurm의 세 가지 기능은 아래와 같다. 

 

   a. allocating exclusive and/or non-exclusive access to resources (compute nodes) to users for some duration of time 
   b. providing a framework for starting, executing, and monitoring work (normally a parallel job) on the set of allocated nodes
   c. arbitrating contention for resources by managing a queue of pending work

 - Slurm의 구조 

 

slurm은 크게 세 개의 데몬으로 구성되어있다: slurmctld, slurmd, slurmdbd. 이들의 역활은 아래와 같다. 

Daemon 기능
slurmctld - 마스터 노드 혹은 관리 노드 (management node)에서 실행되는 데몬 
- Controller라 부름 
- 노드들의 상태 관리, 자원에 대한 할당 관리, 작업들의 큐 들을 관리 
slurmd - 각각의 계산 노드에서 실행되는 데몬 
- fault-tolerant hierarchical communication*을 제공 
 * 시스템을 구성하는 부품의 일부에서 결함 또는 고장이 발생하여도 정상적 혹은 부분적으로 기능을 수행할 수 있는 시스템  
slurmdbd - database의 형태로 기존의 작업들을 기록해두기 위한 데몬 
- 해당 데몬을 사용할지 여부는 선택사항 
- slurmdbd에 대한 추가적인 설명은 아래의 웹페이지를 참조 바람
 : https://slurm.schedmd.com/archive/slurm-19.05.5/accounting.html

따라서, 마스터 서버에는 slurmctld, slurmd, (선택사항으로) slurmdbd가 실행이 되어야 하며, 계산 노드에서는 slurmd가 실행이 되어야 한다. 추가적으로 slurm configuration이 변경될 때마다, slurmctld와 slurmd는 반드시 초기화가 되어야 한다. 


1. Slurm 설치 

SLURM을 설치하는 방법은 크게 아래와 같이 두 가지 방법이 있다.
     a. 공식 홈페이지에서 .deb 파일을 받은 후 설치
     b. 우분투 repository에서 apt-get install 명령어를 이용한 방법
여기에선 b 방법을 이용해서 설치하는 방법을 다룰 것이다. 설치 방법은 다음 웹 페이지들을 참조하였다 [1-2].

 

  [1] Kisti 슈퍼컴퓨터 Slurm 관리자 메뉴얼   
  [2] https://ai4nlp.tistory.com/25    
  [3] https://wonwooddo.tistory.com/35

 

※ NOTE 1 
  - SLURM 공식 홈페이지 주소: https://www.schedmd.com/    
※ NOTE 2 
  - Ubuntu 20.04 기준으로 현재 (2021-07-07) Ubuntu repository로 설치되는 버전은 19.05.5이다. 만일 최신 버전을 설치하고자 한다면, 공식 홈페이지에서 deb 파일을 다운받아 설치하기 바란다. 

 

  1.1 Munge 설치 

slurm 간의 작업 관리를 위한 통신 과정 중 보안을 위해서, slurm에서는 munge라는 프로그램을 사용한다. 이를 위해, 아래와 같이 마스터 서버 및 모든 계산 서버에 munge를 설치하자.  

$ apt-get install munge -y

 

그리고 아래와 같이 munge를 위한 계정 및 그룹을 마스터 서버 및 모든 계산 서버에 만든다. 

$ export MUNGEUSER=991
$ groupadd -g $MUNGEUSER munge
$ useradd  -m -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g munge  -s /sbin/nologin munge

 

   1.2 마스터 서버 - Munge 설정 

아래와 같이 보안 통신을 위한 munge key를 만든 후, munge key 파일의 권한 수정한다. 그리고 munge key 파일의 소유자를 munge로 변경한다. 

$ dd if=/dev/urandom of=/etc/munge/munge.key bs=1c count=4M
$ ls -l /etc/munge/munge.key
$ chmod a-r /etc/munge/munge.key
$ chmod u-w /etc/munge/munge.key 
$ chmod u+r /etc/munge/munge.key
$ chown munge:munge /etc/munge/munge.key

 

이후 아래의 명령을 통해서 key가 암호화가 되어있음을 확인할 수 있다. unmunge 명령어를 통해서 자세한 설정을 확인할 수 있다. 

$ munge –n
$ munge –n | unmunge

 

이렇게 만들어진 munge key들을 우리의 계산 노드들의 munge 폴더에 옮겨놓는다. 

$ cp /etc/munge/munge.key /computation_node/etc/munge/munge.key

 

그 후, 아래의 명령어를 통해서 마스터 서버에서 munge를 재시작한다. 

$ systemctl enable munge
$ /etc/init.d/munge restart

 

  1.3 계산 노드 - Munge 설정 

계산 노드에서는 마스터 서버에서 받은 munge key의 소유권을 다시 아래의 명령어들을 이용하여 변경 후, munge 데몬을 재시작한다. 

$ ls -l /etc/munge/munge.key
$ chmod a-r /etc/munge/munge.key
$ chmod u-w /etc/munge/munge.key 
$ chmod u+r /etc/munge/munge.key
$ chown munge:munge /etc/munge/munge.key
$ systemctl enable munge
$ /etc/init.d/munge restart

 

이후, 아래의 명령어를 통해서 status가 success가 나오면 성공이다. 

$ munge –n | ssh node1 unmunge

 

  1.4 Slurm 설치 

아래의 명령어를 이용해서 마스터 서버 및 모든 계산 노드에 slurm을 설치한다. 

$ apt install slurm-wlm slurm-wlm-doc

 

  1.5 마스터 서버 - slurm.conf 파일 생성 및 수정

slurm을 설치를 한 후, 마스터 서버에서, slurm.conf 파일을 생성하자. 생성하는 방법은 아래의 공식 홈페이지를 통해서 자동으로 만들 수 있다. 

 

  (1) slurm.conf 파일 생성해주는 웹페이지 (version: 19.05.5)
     -
https://slurm.schedmd.com/archive/slurm-19.05.5/configurator.html
     - 세부적인 설명은 해당 웹페이지에서 확인바람 
     - slurm.conf 파일의 각 세부 옵션에 대한 설명은 아래 웹페이지에서 참조 바람 
      : http://manpages.ubuntu.com/manpages/trusty/man5/slurm.conf.5.html   

  (2) slurm.conf 파일의 예시 [2]

# slurm.conf file generated by configurator easy.html.
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
#
ControlMachine=master          # Master server's hostname 
ControlAddr=192.168.0.1        # Master server's local IP address 
#
#MailProg=/bin/mail
MpiDefault=none
#MpiParams=ports=#-#
ProctrackType=proctrack/pgid
ReturnToService=1
#SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPidFile=/var/run/slurm-llnl/slurmctld.pid
#SlurmctldPort=6817
# SlurmdPidFile=/var/run/slurmd.pid
#SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
SlurmUser=slurm
#SlurmdUser=root
StateSaveLocation=/var/spool/slurmctld
SwitchType=switch/none
TaskPlugin=task/none
#
#
# TIMERS
#KillWait=30
#MinJobAge=300
#SlurmctldTimeout=120
#SlurmdTimeout=300
#
#
# SCHEDULING
FastSchedule=1
SchedulerType=sched/backfill
#SchedulerPort=7321
#SelectType=select/linear
SelectType=select/cons_res
SelectTypeParameters=CR_Core
#SelectTypeParameters=CR_Core_Memory
#
#
# LOGGING AND ACCOUNTING
AccountingStorageType=accounting_storage/none
ClusterName=cluster              # Cluster name 
#JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/none
#SlurmctldDebug=3
SlurmctldLogFile=/var/log/slurmctld.log
#SlurmdDebug=3
SlurmdLogFile=/var/log/slurmd.log
#
#
# COMPUTE NODES
GresTypes=gpu
NodeName=node01 NodeAddr=192.168.0.2 CPUs=64 State=Unknown
NodeName=node02 NodeAddr=192.168.0.3 CPUs=64 State=Unknown
NodeName=node03 NodeAddr=192.168.0.4 CPUs=64 State=Unknown
NodeName=node04 NodeAddr=192.168.0.5 CPUs=64 State=Unknown
NodeName=node05 NodeAddr=192.168.0.6 CPUs=64 State=Unknown
PartitionName=batch Nodes=node0[1-5] Default=YES MaxTime=INFINITE State=UP OverSubscribe=FORCE

- 위 파일을 각 계산 노드의 폴더에도 복사하여 넣어준다. 
- 위의 설정 파일에서 주로 변경을 하는 항목들은 아래와 같다: 
 •ControlMachine, ControlAddr, ClusterName 
 •Compute Node의 아래 부분: 계산 노드에 대한 정보 기입. NodeName부분에 기입할 수 있는 정보들은 아래와 같다. 
    a. CPUs: 해당 노드가 가지고 있는 CPU 코어의 갯수 
    b. Sockets: 물리 CPU
    c. CoresPerSocket
    d. ThreadsPerCore

 

 

 

   1.6 마스터 서버 - Slurm 설정 

    아래와 같이 slurmctd 용 폴더 및 필요한 파일들을 생성 후, 권한 및 소유자를 변경한다. 

$ mkdir /var/spool/slurmctld
$ chown slurm: /var/spool/slurmctld
$ chmod 755 /var/spool/slurmctld
$ touch /var/log/slurmctld.log
$ chown slurm: /var/log/slurmctld.log
$ touch /var/log/slurm_jobacct.log /var/log/slurm_jobcomp.log
$ chown slurm: /var/log/slurm_jobacct.log /var/log/slurm_jobcomp.log
$ systemctl enable slurmctld
$ /etc/init.d/slurmctld restart

 

   1.7 계산 서버 - Slurm 설정 

   마스터 서버와 마찬가지로 아래와 같이 slurmd 용 폴더 및 필요한 파일들을 생성 후, 권한 및 소유자를 변경한다. 

$ mkdir /var/spool/slurmd
$ chown slurm: /var/spool/slurmd
$ chmod 755 /var/spool/slurmd
$ touch /var/log/slurmd.log
$ chown slurm: /var/log/slurmd.log
$ systemctl enable slurmd
$ /etc/init.d/slurmd restart
$ scontrol show nodes
$ sinfo –a

 

2. Slurm 명령어

아래 테이블은 slurm에서 자주 사용되는 명령어들을 정리한 것이다. 자세한 설명들은 아래의 웹페이지를 참조하기 바란다. 
  [4] https://wiki.gacrc.uga.edu/wiki/Migrating_from_Torque_to_Slurm  
  [5] https://docs-research-it.berkeley.edu/services/high-performance-computing/user-guide/running-your-jobs/migrating-from-pbs/  
  [6] https://grid.fe.up.pt/dokuwiki/doku.php?id=documentation:slurm#torque_wrappers    
  [7] https://dandyrilla.github.io/2017-04-11/jobsched-slurm/
  [8] https://www.hpc.kaust.edu.sa/sites/default/files/files/public/Cluster_training/17_01_2019/Slurm_cheat_sheet.pdf

 

Slurm command Torque/PBS command description
sbatch [option] <script_file> qsub <script_file> • syntax: sbatch 
scancel <job_ID> qdel <job_ID> • 제출된 작업 취소 
squeue qstat • 작업 현황 표시 
sinfo qstat -q • queue 정보 확인 

 

3. Slurm과 Torque

위에서 설명한 것처럼, Ubuntu 18.04 이상 버전의 repository에서는 무료 버전의 Torque를 설치할 수 없다. 물론, repository를 16.04 버전용으로 변경한 다음 설치할 수는 있지만, 패키지 의존성 등 서로 다른 버전의 OS간 충돌 문제를 고려한다면 이 방법은 추천하지 않는다. 다행스럽게도 기존의 torque PBS 명령어를 그래도 slurm에서 사용할 수 있다.  

 

기존의 Torque 명령어를 Slurm에서 사용하기 위해서 아래의 패키지를 설치하자. 이후부터 qsub, pbsnode, qdel 등과 같은 torque 명령어들을 사용하여 작업을 제출할 수 있다. 

$ sudo apt update
$ sudo apt install slurm-wlm-torque

 


 

3.2.1 TORQUE

    - 기본적으로 TORQUE는 많이 쓰이는 오픈소스 PBS (Portable Batch system)이다. PBS를 통해서 마스터 서버에서 각각의 계산 노드들에게 작업들을 할당할 수 있다는 점에서, 클러스터를 관리를 용이하게 해준다.

 

3.2.2 TORQUE의 기본적인 단계: 1) Batch system의 기본적인 4단계

 

서버 설명
Master server   - pbs_server daemon이 실행되는 서버
  - pbs_scheduler daemon이 실행되는 서버
  ※pbs_scheduler란, pbs_server와의 상호작용을 통해 제출된 작업들을 각 계산노드들에게
    할당해주는 역할을 함
  - Mother superior라고도 불린다.  
Submit/
interactive node
  - 유저가 자신의 작업량들을 관리할 수 있도록 해주는 서버
  - 유저들은 해당 서버에서 작업을 제출하거나 제출한 자신의 작업들을 추적하는 것이
  가능하다.
  - client command를 가진다 (qsub, qhold,…)
  - 우리의 클러스터에서는 마스터 서버가 해당 서버의 역할도 같이 한다.
Compute node   - 해당 서버에서는 제출된 작업들을 실행시킨다.
  - 각각의 계산노드들은 pbs_mom을 통해 제출된 작업을 시작, 제거 또는 관리등을 한다.
  - pbs_mom을 통해 계산노드들은 마스터 서버의 pbs_server와 통신한다.
  - sister mom이라고도 불린다.
Resources   Ex) High-speed networks, storage systems, licence managers, etc,…

 

2) 기본적인 작업 흐름
  : TORQUE에서는 기본적인 4가지의 작업흐름이 존재한다: (a) creation, (b) submission, (c) execution, (d) finalization

 

단계 설명
작업만들기
(Creation)
  - 작업 중 유지되는 파라미터들을 작성한다. 이러한 파라미터에는 얼마나 작업들이 지속될지, 작업을 실행할 때 필요한 자원들을 할당하거나 어떤 프로그램을 실행시킬지 등을 결정한다
작업제출
(Submission)
  - 작업 제출은 “qsub”이란 명령어로 이루어진다.
  - 즉, qsub 명령어를 통해 마스터 서버에서 작성한 작업 스크립트들이 pbs_server로 넘어간 뒤,
  scheduler에 의해서 각 계산노드들에게 작업들이 할당된다.
작업 실행
(Execution)
  - 실행된 작업들의 상태는 “qstat” 명령어를 통해 알 수 있다.
작업 완료
(Finalization)
  - 작업이 완료되면, 작업 중 stdout과 stderr파일들이 작업이 제출된 디렉토리로 복사된다.

※      TORQUE_HOME: 환경설정 디렉토리는 기본값으로 /var/spool/torque로 설정이 되어있다.  

 

    3.3.3 TORQUE의 설치 및 환경설정

1. 마스터 서버 – TORQUE 설치

$ apt-get install torque-server torque-mom torque-client -y

2. 계산노드 – TORQUE 설치, 환경설정, 및 작동
      1) 계산노드에 TORQUE설치

$ apt-get install torque-mom torque-client -y

      2) pbs_mom의 config 파일 생성

$ vim /var/spool/torque/mom_priv/config 
$pbsserver	master
$logevent	255

    ※ $까지 모두 작성해야한다.
    ※ 모든 계산노드들의 config 파일들이 동일해야 한다.
      3) pbs_mom 재시작

$ systemctl restart pbs_mom

    ※ 우분투(Ubuntu 16.04)에서 해당 명령어를 통해 설치되는 TORQUE의 버전은 2.4.16이다.
    ※ 계산서버에 TORQUE를 설치하기 이전에 5.3장을 참조하여 각 노드마다 ssh를 비밀번호 없이 접속가능하게 하자.

 

 

3. 마스터 서버 – 계산 서버들 정보 입력****(중요)
   TORQUE가 정상적을 작동하기 위해선, 마스터 서버와 계산노드들이 서로를 인식하고 있어야 한다. 네트워크적으로 인식하기 위해선 크게 아래의 3가지의 방법이 있다.
  1) /etc/hosts
  2) DNS (Domain name server) 사용
  3) NIS (Network Interface Service) 사용
가장 간단한 방법으로써, 우리는 /etc/hosts를 사용할 것이다. 이때, 마스터 서버와 계산 노드들의 /etc/hosts 파일 내에 내부망 정보들이 서로 동일해야한다.

 

추가적으로 할 일은 마스터 서버에게 계산노드들의 정보들을 알려줘야한다. 이러한 정보들에는 각 계산노드들의 가상 프로세서 수, GPU 개수, 하드웨어 특성들이 있다. 해당 정보들은 /var/spool/torque/server_priv/nodes 파일을 만들어서 아래와 같이 입력하자.

 

$ vim /var/spool/torque/server_priv/nodes 
//syntax 
//<node-name> [:ts] [np=] [gpus=] [properties]
node01	np=64	
node02	np=64
node03	np=48 
…

      - [:ts]와 [properties]는 크게 중요하지 않다. 만일 해당 정보를 알고 싶으면, TORQUE 공식 관리자문서를 참고하길 바람

      - [np=] : 주어진 노드가 가지고 있는 가상 프로세서의 개수
      - [gpus=] : 주어진 노드가 가지고 있는 GPU의 개수

 

4. 마스터 서버 – pbs_server 환경설정 초기화****(중요)
  마스터 서버에 정상적으로 TORQUE가 작동하기 위해선, 마스터 서버에서 작동하는 TORQUE데몬인 pbs_server의 환경설정을 해주어야한다. pbs_server의 환경설정과 TORQUE의 queue에 대한 정보들은 serverdb라는 파일에 저장되어있다. 일단, serverdb에 대한 간략한 정보는 아래와 같다.
  1) serverdb
     - 파일의 위치: /var/spool/torque/server_priv/
     - pbs_server의 환경설정 및 TORQUE의 queue에 대한 정보들을 담고있다.
     - serverdb는 “pbs_server -t create” 명령어를 통해서 초기화할 수 있다.
     - serverdb를 초기화시킨 후에는, pbs_server를 재시작해야한다.
 “pbs_server -t create”를 통해서 만들어진 serverdb는 pbs_server가 작동하기 위한 최소한의 설정들만 들어있다. 이때 만들어진 환경설정은 “qmgr -c ‘p s’”를 통해서 아래와 같이 확인할 수 있다

$ pbs_server -t create
$ qmgr -c ‘p s’
# Set server attributes.
set server acl_hosts = master
set server log_events = 511
set server mail_from = adm
set server scheduler_iteration = 600
set server node_check_rate = 150 
set server tcp_timeout = 6

2) default queue 만들기
다음으로 할 일은 기본적인 queue를 작성하는 것이다. 이러한 queue를 정의할 때, 해당 queue에는 제출하는 작업에 대한 여러가지 정보들이 포함되어있다. 가령, 최소 또는 최대로 가용할 수 있는 계산노드의 개수나 작업이 최대로 진행할 수 있는 시간 등을 지정할 수 있다. 다양한 queue들을 설정함으로써, 사용자 그룹 간 계산자원들을 효율적으로 배분할 수 있다. 따라서 학교 단위 혹은 KISTI같은 규모가 큰 슈퍼컴퓨터 센터에서는 다양한 queue들을 설정하는 것이 필수적이다. 하지만, 우리같이 소규모 연구실의 경우 기본적인 queue만을 이용해도 크게 문제가 없다. 따라서, 이 문서에서는 기본적인 queue를 어떻게 만드는 지에 대해서만 다룰 것이다. 다양한 queue를 설정하고 싶다면, TORQUE 공식 관리자 매뉴얼을 참조하길 바란다. 우리가 default queue로 지정할 queue의 이름은 batch이다. batch queue를 아래와 같이 qmgr 명령어를 통해서 정의하자

 

$ qmgr -c "set server scheduling=true"		
$ qmgr -c "create queue batch queue_type=execution"	  //name of queue: batch
$ qmgr -c "set queue batch started=true"			  // Acceptance of job submission
$ qmgr -c "set queue batch enabled=true"			  // lanching queued jobs
$ qmgr -c "set queue batch resources_default.nodes=1"	  // default node # = 1
$ qmgr -c "set queue batch resources_default.walltime=3600" // default walltime = 1h
$ qmgr -c "set server default_queue=batch"                   	  // setting default queue

 

3) pbs_server 재시작
pbs_server를 정지시킨 후, 바뀐 설정들을 적용시키기 위해서 pbs_server를 재시작하자.

$ qterm 
$ pbs_server

 

 여기까지 완료가 되었다면 “pbsnodes -a” 명령어를 쳐서 연결이 제대로 되었는지 확인하여야 한다.

 

$ pbsnodes -a 
node01
     state = free
     np = 64
     ntype = cluster
…

위의 그림과 같이, 모든 계산 노드들의 상태가 state=free로 나왔다면, 이제 TORQUE를 통해서 작업을 계산노드들에게 제출할 준비가 되었다.

 

3.3.5 TORQUE로 전달할 쉘스크립트 작성법

아래 스크립트는 CMT Cluster에서 TORQUE에 제출할 때 사용할 기본적인 쉘 스크립트이다. (파일이름은 example.sh)

 

$ vim example.sh 
#!/bin/sh 
## essential PBS parts 
#PBS -V
#PBS -N <Job_name> 
#PBS -l nodes=<node_name>:ppn=<# of using processors>
#PBS -l walltime=
#PBS -s /bin/sh
#PBS -q batch
## optional PBS parts
##PBS -o <STDOUT file names> 
##PBS -e <error massage file name>
##PBS -a DDHHMM    // declare the time after which job is eligible for execution

<job scripts>

 

각각의 PBS 옵션에 대한 설명들은 아래와 같다;

명령어 옵션
#PBS -V 현재의 환경변수 유지
#PBS -N - 제출할 작업의 이름 (이름에 빈칸이 있으면 안된다)
- 만일 해당 옵션을 적지 않을 경우, 제출된 작업의 이름은 작성된 쉘 스크립트의 이름으로 설정됨
ex) 위의 예제에서 “#PBS -N”을 적지 않을 경우에는, 제출된 작업의 이름이 example.sh이 된다.
#PBS -l node=:ppn= - 제출된 작업을 계산할 노드와 해당 노드에서 사용할 가상 프로세서 개수를 지정한다.
ex-1) #PBS -l nodes=node01:ppn=64
: 제출된 작업은 node01 계산노드에서 64개의 가상 프로세서를 사용하여 실시한다.
ex-2) #PBS -l nodes=node02:ppn=8+node03:ppn=4
: 제출된 작업은 node02와 node03를 동시에 사용(병렬)하며, 작업 중 각각 8개와 4개의
  가상 프로세서들을 이용한다.  
ex-3) #PBS -l nodes=14
 : 임의의 14개의 계산 노드들을 사용하여 작업을 실시한다.
#PBS -l walltime= - 제출된 작업이 얼마동안 계산을 하는지 지정함.
- 제출된 작업이 walltime으로 지정한 시간 이내로 종료할 경우, walltime을 모두 채우지   
  않고 그대로 작업 종료.
- 제출된 작업의 작업시간이 walltime을 초과할 경우, 그대로 종료
- batch queue의 경우 default walltime이 1시간으로 설정되어 있음
- hhh:mm:ss의 형태로 지정
ex) #PBS -l walltime=100:00:00 : 총 100시간동안 작업을 수행함
#PBS -q batch - 제출할 때 사용할 큐: batch
- CMT Cluster의 경우, default queue가 batch로 지정이 되어있으므로, 해당 부분은 적지
  않아도 무방하다.
#PBS -o <filename> - 작업을 종료한 후, 작업 중에 발생한 STDOUT 스트림들을 지정한 파일이름으로 저장함.
- 해당 PBS 옵션을 지정하지 않았을 경우, STDOUT 스트림은
  <Jobname>.o<Job ID>의 형태로 저장이 된다.
  ex) #PBS -N으로 지정한 작업의 이름이 abc이고 제출될 때의 Job ID가 44일 경우,
   STDOUT 스트림은 abc.o44 로 저장된다.
#PBS -e <filename> - 작업을 종료한 후, 작업 중에 발생한 에러 메세지들을 지정한 파일이름으로 저장함.
- 해당 PBS 옵션을 지정하지 않았을 경우, 에러 메세지들은
  <Jobname>.e<Job ID>의 형태로 저장이 된다.
  ex) #PBS -N으로 지정한 작업의 이름이 abc이고 제출될 때의 Job ID가 44일 경우,
   에러 메시지들은 abc.e44 로 저장된다.
#PBS -a DDHHMM - 제출된 작업이 실행되는 시간을 지정한다

 ※ job script에 사용되는 디렉토리는 작업을 제출하는 디렉토리의 상대적인 디렉토리로 정의된다. 예를들어, 위의 example.sh를 /home/cmt323/abc라는 디렉토리에서 qsub을 통해 작업을 제출했다면, job script의 기본 디렉토리는 /home/cmt323/abc가 된다. 따라서 혼동이 없게 사용을 하기 위해선, 절대경로를 쓰는 것을 추천한다.
 (물론, 환경 변수들을 사용할 수 있다. 해당 부분은 TORQUE 매뉴얼을 참조하길 바란다. )

 

예시) c.out이라는 파일을 example_file이란 이름으로 계산노드 node01의 프로세서 64개를 사용하여 10시간 계산할 작업을 제출할 경우

 

$ vim example.sh 
#!/bin/sh 
## essential PBS parts 
#PBS -V
#PBS -N example_file 
#PBS -l nodes=node01:ppn=64
#PBS -l walltime=10:00:00
#PBS -s /bin/sh
#PBS -q batch

c.out

 

 

728x90

댓글