서버 재구축하면서 OS를 SGE에서 PBS로 변경했고 전달받은 사용방법을 문서화하는 의미로 여기에 정리한다.
자주쓰는 command
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # status 확인용
pbsnodes -aSj
## qlogin
qsub -I -l nodes=AMD01:ppn=32 -q AMD
# in rocks2
qlogin -q anode64.q@anode64-1 -pe pe_slots 64
# job 넣기
qusb -v -l nodes=AMD01:ppn=32 -q AMD xx.pbs
# 필요한 memory 양 알아보기
qstat -explain C -j #job_num
> mem_max xxxG
|
:eyes:사용법 간단요약
:star: -q
를 반드시 지정해 줘야함
:star: -v
포함 모든 옵션 .pbs앞에 써줘야 먹음
:star: $1 이런건 .sh 파일일때 적용가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| #PBS -N Project12_preprocessing
#PBS -r n
#PBS -e /st05/subin/Project12_LLC/02_Preprocessing/log
#PBS -o /st05/subin/Project12_LLC/02_Preprocessing/log
#PBS -M subin.cho@i.ewha.ac.kr
source ~/.bash_profile
main_dir=/st05/subin/Project12_LLC/02_Preprocessing
input_dir=/st05/subin/Project12_LLC/01_RawData
reference_dir=/home/subin/source/CellRanger_reference/refdata-gex-mm10-2020-A
cd $main_dir
cellranger count --id=$id \
--transcriptome=$reference_dir \
--fastqs=$input_dir \
--sample=$fastq \
--nosecondary
|
이렇게 작성하고 cellranger.pbs
1
| qsub -v id=D15_ig,fastq=LLC_D15_ig_total -l nodes=AMD02:ppn=32 -q AMD cellranger.pbs
|
PBS는 배치 환경 표준을 따르며,
배치 작업을 수용, 작업의 특성을 컨트롤, 작업을 준 노드에 결과물을 줄(? 뭔소리지) 수 있는 시스템이다.
Job 실행 컨트롤 기능
- 가장 기본적인 기능
- job을 실행 및 정지, 우선순위 설정 가능
병렬 작업처리 기능
- 리눅스를 포함한 다양한 플랫폼에서 병렬화를 위한 패키지를 지원한다.
- 기존에 쓰던 SGE와 차별화되는 점인듯. 원래 SGE에서는 노후화도 문제가 됐을 수 있지만, 병렬로 job을 넣었을때, 쪼개져 들어간 계산들이 하나로 제대로 모이지 않고 IOerror가 많이 났었음.
PBS 환경 변수
variables | summary |
---|
PBS_O_HOST | Qsub 명령이 실행되고 있는 호스트 |
PBS_O_QUEUE | 작업이 제출된 원래 큐의 이름 |
PBS_O_WORKDIR | Qsub 명령의 현재 작업 디렉토리의 절대 경로 |
PBS_JOBID | 배치 시스템에 의해 지정된 작업ID |
PBS_JOBNAME | 사용자가 제공한 작업이름 |
PBS_NODEFILE | 작업에 지정된 노드 목록 |
PBS_QUEUE | 작업이 실행되는 큐의 이름 |
Submit script
Parallel Job (MPI)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| #!/bin/bash
### 연산에 사용할 자원 설정, 해석은 아래에
#PBS -l select=1:ncpus=8:mpiprocs=8
### Job name 설정
#PBS -N Jobname
### 연산에 사용할 queue 지정 (반드시! INT, AMD etc.)
#PBS -q workq
### 작업을 다시 시작할지 여부
#PBS -r n
### 표준 입출력 파일을 하나로 출력, error 및 log 를 한파일로 제공
#PBS -j oe
### 따로도 가능하다
#PBS -e /home/log
#PBS -o /home/log
################이 아래에 코드작성
cd $PBS_O_WORKDIR
MPI_EXEC="/opt/mpi/intel-14.0/openmpi-4.0.3/bin/mpirun"
### which mpi하면 path알 수 있음
NPROC='wc -l < $PBS_NODEFILE'
$MPI_EXEC -machinefile $PBS_NODEFILE -n $NPROC ./exec > output.txt
|
PBS에 등록된 node순서대로 작업 제출시 #PBS -l select=1:ncpus=8:mpiprocs=8
node 1개 8core MPI 계산 = 총 8core 사용
특정 node 지정해 작업 제출시 #PBS -l nodes=AMD01:ppn=8+nodes=AMD03:ppn=8
AMD01에서 8core, AMD03에서 8core 써서 총 16core사용
Serial Job
1
2
3
4
5
6
7
8
9
| #!/bin/bash
#PBS -l select=1:ncpus=1
#PBS -N jobname
#PBS -1 workq
#PBS -r n
#PBS -j oe
아래 코드 작성
|
Job submission
Delete the job
이미 실행/대기 상태인 큐를 지우는 명령어 qdel
. 큐를 지우기 위해서는 job id가 필요하다. job id는 qstat
으로 확인가능
HOST 상태 확인하기
pbsnodes
options | summary |
---|
-a | 모든 호스트 및 모든 속성 표시 |
-H | 지정된 호스트 및 지정된 호스트의 모든 vnode에 대한 모든 속성 표시 |
-I | Down되거나 offline으로 표시된 모든 호스트 표시 |
-aSj | 모든 호스트의 정보를 헤더별로 표시 |
qstat
options | summary |
---|
-n | 작업별 간략한 내용 표시 |
-f | 작업별 상세한 내용표시 |
-Q | Queue별 진행중인 작업 표시 |
-f -J job_id | 특정작업에 대한 상세한 내용 표시 |
State 별 상태 설명
options | summary |
---|
B | 적어도 하나 이상의 subjob이 돌아가는중 |
E | job이 돌아가다 빠져나옴 |
F | job이 끝남 |
H | job 대기중 |
M | job이 다른 서버로 이동함 |
Q | job이 queue에 들어감 |
R | job 돌아가는중 |
S | job 정지먹음 |
T | job이 새로운 위치로 이동 |
U | 키보드입력 때문에 cycle-harvesting job이 정지먹음 |
W | job넣은 사람이 입력한 시작시간이 될때까지 기다리는중 |
X | subjob다 돌아감 또는 삭제됨 |