SGE 작업 스케쥴러

여러 대의 컴퓨터를 이용하여 계산을 빠르게 하고 싶은 경우에 좀 더 편한 환경을 제공하는 작업 스케쥴러라는 것이 있습니다. 이번에는 그 중 하나인 SGE의 사용법에 대해 알아보겠습니다.

작업 제출 기본

작업을 제출하려면 어떤 작업을 할 지 적어줘야겠죠? 그 내용이 담긴 파일을 작업 스크립트라 합니다. 작업을 제출하기에 앞서 다음과 같이 간단한 작업 스크립트를 만들어 봅니다. 이름은 jobscript.sh로 하였습니다.

$ vi jobscript.sh

단순히 10초 동안 멈춰 있는 작업을 입력해 주었습니다.

#!/bin/bash

sleep 10

그리고 다음과 같이 qsub 명령어를 이용해 작업을 제출하면 됩니다. qsub의 첫 번째 인자에는 작업 스크립트의 파일명을 입력해 주면 됩니다.

$ qsub jobscript.sh
Your job 12345 ("STDIN") has been submitted

작업의 기본 이름은 STDIN으로 잡히는 것을 보실 수 있습니다. (아래에 작업의 이름을 바꾸는 방법을 소개합니다.)

작업 스크립트 없이 작업 제출하기

또한 qsub은 작업 스크립트를 담고 있는 파일 없이 표준 입력(STDIN)을 통해 작업 스크립트를 입력받기도 합니다. 다음과 같이 사용할 수 있습니다.

$ echo "sleep 10" | qsub

작업이 끝난 후 만들어지는 출력 파일들의 이름 및 경로 바꿔주기

작업을 제출한 뒤 끝나면 출력 파일들이 생성되는데요. 기본값으로 현재 사용자의 홈 디렉토리에 표준 출력 파일은 STDIN.o12345로, 표준 에러 파일은 STDIN.e12345로 생성됩니다. 무슨 작업을 돌렸는지 알 수가 없으므로 한번 이름을 바꿔 볼까요?

$ echo "" | qsub 

qconf

작업 스케쥴러 SGE의 환경 설정을 하는 명령어입니다. 주로 작업 큐(queue) 설정을 하는 데 이용하고 있습니다. -mq 옵션을 붙여 이용합니다.

$ qconf -mq optiplex

작업 데이터들은 실제로 어디에 저장되나?

마스터 노드의 아래 경로에 다음과 같이 저장된다.

몇 개의 작업을 던지고 구조를 살펴보면, 다음과 같이 작업 번호가 생성되어 있는 것을 볼 수 있다. 작업에 부여된 번호가 827472 라면, jobs/00/0082/7472 의 경로에 저장되어 있다.

jobs
`-- 00
    `-- 0082
        |-- 7472
        |-- 7473
        ...
        |-- 7491
        |-- 7492
        `-- 7493
job_scripts
|-- 827472
|-- 827473
...
|-- 827491
|-- 827492
`-- 827493

상태가 ‘dr’인 작업들 지우기

잘 돌던 작업들이 제대로 끝나지 못해 상태가 ‘dr’로 바뀐 작업들이 있다. 이 때에는 qdel 명령어로 지워도 지워지지 않는다. 이 때에는 어떻게 해야 할까?

$ qdel -f "Sukjun.*"
rule "default rule (spool dir)" in spooling context "flatfile spooling" failed writing an object
rule "default rule (spool dir)" in spooling context "flatfile spooling" failed writing an object
rule "default rule (spool dir)" in spooling context "flatfile spooling" failed writing an object
rule "default rule (spool dir)" in spooling context "flatfile spooling" failed writing an object