프로그래밍:클러스터_사용법

This is an old revision of the document!


기본절차

프로그램을 실행하는 코드의 계산이 많은 경우 서버의 클러스터를 이용하면 수월하다. 서버 클러스터를 이용하기 위해서는 먼저 클러스터의 master에 대한 계정이 필요하다. 클러스터 계정 생성을 하려면 연구실 구성원에게 문의하여 생성하도록 하자. 계정 생성이 완료되었으면 자신의 계정으로, 클러스터에 SSH 접속을 한다.

ssh your_account@clusterip

your_account에 자신의 계정, clusterip에 클러스터 IP를 입력한다. 패스워드를 입력하면 클러스터의 bash로 접속이 될 것이다. 아래와 같이 변경되면 성공적으로 로그인이 된 것이다.

[your_account@master ~]$
  • ※ 클러스터 IP는 보안적인 문제로 공개하지 않습니다.
  • ※ 클러스터는 외부 접속을 차단하므로 연구실에서만 이용할 수 있습니다.

클러스터 스크립트 작성

클러스터는 기본적으로 쉘 스크립트를 작성하고 이것을 실행하는 명령을 내림으로 시작된다. 기본적인 형태의 예제 스크립트는 아래와 같이 작성할 수 있다.

[your_account@master ~]$ vi test.sh
test.sh
#!/bin/sh
#PBS -N my-python-code
#PBS -l nodes=1:ppn=4
#PBS -q g4
cd #PBS_O_WORKDIR

python3 code.py

위의 코드는,

  1. 'my-python-code' 라고 job의 이름을 설정
  2. '하나의 노드 (nodes), 프로세서 (ppn) 4개에 할당'
  3. 'G4 GN에 할당'
  4. 그리고 스크립트가 실핼항 디렉토리로 이동
  5. code.py를 python3로 실행

으로 해석된다. 이 때 주의할 점은 '#PBS'의 #은 주석이 아니기 때문에 반드시 '#PBS'로 입력하고 명령어를 입력해야 한다. 또한 'cd #PBS_O_WORKDIR'역시 입력되지 않으면, 자신이 실행하고 싶은 파일이 작동하지 않으므로, 다양한 클러스터 스크립트 작성시 꼭 넣어둬야한다.

작업 실행

원하는대로 스크립트를 작성했으면, 클러스터에 작업을 실행시켜보자. test.sh 를 작업하는 명령은 아래와 같이 입력한다.

[your_account@master ~]$ qsub test.sh

입력하고 나면 'xxxxxx.master.hpc' (x는 할당된 작업번호) 로 echo 된다. 이는 xxxxxx 라는 번호로 할당이 되었다는 것이다.

작업 보기

클러스터가 실행하고 있는 작업을 보는 명령어는

  1. 현재 클러스터에서 실행중인 작업 보기
  2. 클러스터의 모든 노드의 상태 보기
  3. 현재 실행중인 작업과 클러스터의 자원상태 보기

가 있다. 첫 번째로 현재 클러스터에서 실행중인 작업을 보는 명령어는 qstat 이다. 명령어를 입력하면 아래와 같이 나타난다.

[your_account@master ~]$ qstat
Job ID                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
xxxxxx.master              my-python-code   your_account   00:00:00 R g4

Job ID는 qsub 명령어를 입력했을 때 나타난 작업의 번호, Name에 스크립트에 입력했던 이름, User에 계정 이름, Time Use에 실행한 시간, S에는 상태, Queue 에는 할당한 GN이다. 이 때 S가 상태에 따라 나타나는 이니셜이 다르며 보통 아래와 같이 나타난다.

  • R: Run. 작업 진행중.
  • C: Completed. 작업 종료됨. (정상적으로 작업을 끝낸 경우)
  • E: Exit. 작업 나감. (일반적으로 모든 작업 강제 종료시 나타나는 상태)
  • Q: Queue. 대기. (모든 노드에서 작업이 실행중이여서 대기하는 중)
  • W: Wait. 시간 대기. (qsub 명령어에서 -A 옵션으로 작업 실행 대기중)
  • H: Hold. (작업 중간에 잠시 일시정지 하는 경우)

두 번째로 모든 노드의 상태를 보는 명령어는 pestat 이다. 명령어를 입력하면 아래와 같이 나타난다.

[your_account@master ~]$ pestat
Node      GN     state   load  pmem  ncpu  mem    resi usrs tasks NetMbit jobids/users
x001.hpc  g1   free     0   15984   4  15984    319  0/0    0      0
x002.hpc  g1   free     0   15984   4  15984    286  0/0    0      0
...
x012.hpc  g1   free     0   15984   4  15984    301  0/0    0      0
x013.hpc  g1   free     0   15984   4  15984    317  0/0    0      0
x014.hpc  g2   free     0   15733   4  15733    299  0/0    0      0
x015.hpc  g2   free     0   15733   4  15733    295  0/0    0      0
...
x021.hpc  g2   free     0   15733   4  15733    297  0/0    0      0
x022.hpc  g2   free     0   15733   4  15733    332  0/0    0      0
x023.hpc  g3   free     0   15637   4  15637    222  0/0    0      0
x024.hpc  g3   free     0   15637   4  15637    221  0/0    0      0
x025.hpc  g4   excl     1   15953   4  15953    225  1/1    1      0    xxxxxx your_account
x026.hpc  g4   free     0   15953   4  15953    221  0/0    0      0
...
x039.hpc  g4   free     0   15953   4  15953    221  0/0    0      0
x040.hpc  g4   free     0   15953   4  15953    221  0/0    0      0

GN을 g4로 선택하였기 때문에, g4로 시작하는 x025.hpc 노드에 작업이 할당된 것을 볼 수 있다. 또한 test.sh에서 4개의 cpu로 계산을 실행했기 때문에, 다른 작업을 g4에 할당하는 경우, x026.hpc로 작업이 할당된다. 만약에 스크립트 파일에서 1개의 cpu로 계산을 실행하게 되면, x025.hpc에 다른 작업명으로 또 할당되게 된다.

세 번째로 현재 실행중인 작업과 클러스터의 자원상태를 보는 명령어는 showq 이다.

[your_account@master ~]$ showq
ACTIVE JOBS--------------------
JOBNAME            USERNAME      STATE  PROC   REMAINING            STARTTIME
 
xxxxxx         your_account    Running     4 99:22:52:31  Mon Jun  7 18:00:00
 
     1 Active Jobs       4 of   96 Processors Active (4.17%)
                         1 of   24 Nodes Active      (4.17%)
 
IDLE JOBS----------------------
JOBNAME            USERNAME      STATE  PROC     WCLIMIT            QUEUETIME
 
 
BLOCKED JOBS----------------
JOBNAME            USERNAME      STATE  PROC     WCLIMIT            QUEUETIME
 
 
Total Jobs: 1   Active Jobs: 1   Idle Jobs: 0   Blocked Jobs: 0

앞의 명령어들과의 차이점은, 자신이 작업을 언제 실행시켰는지, 컴퓨터의 남은 자원은 얼마나 있는지 알 수 있다는 것이다.

작업 종료

코드가 제대로 실행되지 않거나 또는 중간에 작업을 중단해야 할 경우가 있다. 이 경우에는 qdel '작업번호' 를 입력하면 작업이 중단된다. 예를들어 작업번호 xxxxxx의 작업을 중단하려면

[your_account@master ~]$ qdel xxxxxx

를 입력해주면 된다. 그리고 자신이 할당한 모든 작업을 중단하는 경우,

[your_account@master ~]$ qselect -u your_account | xargs qdel

을 입력하면 된다.

  • 프로그래밍/클러스터_사용법.1623066562.txt.gz
  • Last modified: 2023/09/05 15:46
  • (external edit)