작업 제출 중에 PBS 대기열을 동적으로 선택하는 방법

작업 제출 중에 PBS 대기열을 동적으로 선택하는 방법

저는 작업 제출이 PBS로 관리되는 원격 클러스터에서 여러 개의 소규모 컴퓨팅 작업을 실행하고 있습니다. 일반적으로 PBS(bash) 스크립트에서는 다음 명령을 통해 작업을 제출할 대기열을 지정합니다.

#PBS -q <queue_name>

선택해야 하는 작업 대기열은 해당 특정 대기열의 로드에 따라 다릅니다. 작업을 제출하기 전에 매번 터미널의 명령을 통해 분석합니다.

qstat -q

그것은 나에게 아래와 같이 출력을 제공합니다

Queue            Memory CPU Time Walltime Node  Run Que Lm  State
---------------- ------ -------- -------- ----  --- --- --  -----
queue1           --      --    03:00:00   --    0   2 --   E R
queue2           --      --    06:00:00   --    8   6 --   E R

두 가지 제약 조건에 따라 작업 스크립트를 통해 대기열 선택을 자동화하고 싶습니다.

  1. 선택한 대기열의 일시 중지 시간은 지정된 작업 시간보다 커야 합니다. 작업 시간은 명령을 통해 지정됩니다 #PBS -l walltime=02:30:00.
  2. 대기열에는 최소 개수가 있어야 합니다. Que의 작업 수는 위 출력에 표시됩니다.

대기열 선택을 자동화하는 데 도움이 되도록 터미널에서 어떤 도구를 사용해야 하는지 알 수 없습니다.

답변1

당신이 설명하는 도구가 깨진 PBS 설정처럼 들릴지 의심스럽습니다.

대기열은 의도된 용도/사용자별로 구분되어야 합니다. 두 개의 대기열이 동일한 요구 사항을 가진 동일한 사용자에게 서비스를 제공하는 경우 요청한 문제를 제거하기 위해 특별히 병합해야 합니다. 배치 스케줄러의 전체 목적은 사용자/작업 간의 리소스 균형을 맞추는 것입니다. 사용자가 수동으로 방정식에 입력을 추가해야 하는 경우 프로세스에 문제가 있는 것 같습니다.
이는 좋은 해결책은 아니지만 대기열을 가져오는 스크립트를 직접 작성할 수 있습니다. 예를 들면 다음과 같습니다.

#!/bin/bash
case $# in
  2) ;;
  *) echo "Usage: $(basename $0) 'WALLTIME' 'JOBNAME'"
  echo "WALLTIME should be in format HH:MM:SS"
  echo "JOBNAME should be filename of PBS script (full path if not in local directory)"
  exit 0
  ;;
esac

MYWALL="$1"
MYJOB="$2"
cnt=0
i=0
qstat -q|
while read q
do
   if (( cnt < 2 ))
   then
      ((cnt++))
      continue
   else
      ((i++))
      WALL[$i]=$(echo $q|awk '{print $4}')
      Q[$i]=$(echo $q|awk '{print $7}')
      NAME[$i]=$(echo $q|awk '{print $1}')
   fi
done
MINQ=${Q[1]}
for ((q=1; q <= i; q++)) 
do
   if [[ "${MYWALL}" > "${WALL[$q]}" ]]
   then
      continue
   else
      if [[ ${Q[$q]} -le $MINQ ]]
      then
         MINQ=${Q[$q]}
         NAMEQ="${NAME[$q]}"
      fi
   fi
done

if [[ ! "$NAMEQ" ]]
then
   echo "WALLTIME $MYWALL greater than walltime of any queue"
fi
echo "qsub -q $NAMEQ $MYJOB"
qsub -q "$NAMEQ" "$MYJOB"

관련 정보