저는 작업 제출이 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
두 가지 제약 조건에 따라 작업 스크립트를 통해 대기열 선택을 자동화하고 싶습니다.
- 선택한 대기열의 일시 중지 시간은 지정된 작업 시간보다 커야 합니다. 작업 시간은 명령을 통해 지정됩니다
#PBS -l walltime=02:30:00
. - 대기열에는 최소 개수가 있어야 합니다. 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"