한 번에 여러 R 작업을 제출하는 방법은 무엇입니까?

한 번에 여러 R 작업을 제출하는 방법은 무엇입니까?

file=1 ~ 50과 같이 여러 파일을 실행하는 R 스크립트가 있습니다. 나는 일반적으로 R 스크립트의 숫자를 변경하여 반복 작업을 제출합니다(예: 10개의 파일을 매번 5번). 그렇다면 과제를 5번 제출하지 않고 한번에 5개의 과제를 제출하려면 어떻게 해야 할까요? 또한 업데이트하고 싶습니다.기본 출력그리고오류 파일모든 직업에 대해.

Bash 코드 예:

#!/bin/bash

#PBS -l nodes=1:ppn=20,walltime=05:00:00

#PBS -m e
#PBS -o default.out
#PBS -e errorfile

module load R/4.0

Rscript ~/r_script1.R

답변1

스크립트의 주석이 qsub아닌 명령줄에서 이러한 옵션 중 일부 또는 전부를 지정할 수 있습니다 .#PBS ...

예를 들어 배치 스크립트를 다음과 같이 다시 작성할 수 있습니다.

qsub -l nodes=1:ppn=20,walltime=05:00:00 -m e -o default.out -e errorfile script.sh

qsub 명령줄에서 모든 옵션을 사용하고 script.sh다음을 포함하십시오.

#!/bin/bash

module load R/4.0
Rscript ~/r_script1.R

이 두 가지 방법을 혼합하여 qsub에 옵션을 제공할 수 있습니다. 예를 들어 명령줄에 -o및 옵션을 제공 -e하고 스크립트의 나머지 부분을 #PBS주석으로 제공할 수 있습니다.

$ qsub -o default.out -e errorfile script2.sh

Script2.sh:

#!/bin/bash
#PBS -l nodes=1:ppn=20,walltime=05:00:00
#PBS -m e

module load R/4.0

Rscript ~/r_script1.R

for그런 다음 이를 bash 루프와 결합 할 수 있습니다 .

for i in {1..5} ; do
  qsub -o "default.$i.out" -e "errorfile.$i" script2.sh
done

루프 변수의 값을 스크립트에 전달해야 하는 경우 $i가능합니다. 하지만 사용하는 클러스터 관리 소프트웨어(예: slurm, Torque 등)에 따라 몇 가지 다른 방법이 있습니다. qsub사용 중인 버전에 관계없이 작동할 수 있는 가장 간단한 방법 중 하나는 -vqsub 옵션을 사용하는 것입니다.

예를 들어 각 작업(r_script1.R, r_script2.R 등)에서 서로 다른 R 스크립트를 실행해야 하는 경우 환경에서 사용 가능한 스크립트를 사용할 수 있습니다 -v i.$i

for i in {1..5} ; do
  qsub -o "default.$i.out" -e "errorfile.$i" -v i script3.sh
done

Script3.sh:

#!/bin/bash
#PBS -l nodes=1:ppn=20,walltime=05:00:00
#PBS -m e

module load R/4.0

Rscript ~/r_script"$i".R

qsub의 일부 구현에서는 명령줄에서 인수를 스크립트에 직접 전달할 수 있으며, 이를 스크립트에서 일반 위치 인수($1, $2, $3 등)로 사용할 수 있습니다.

대부분의 (모두?) 구현은 작업 배열을 지정하는 옵션 qsub도 지원합니다 . -tPBS_ARRAYID 환경 변수를 사용하여 작업 스크립트에서 액세스할 수 있습니다. 예를 들어

qsub script4.sh

-oscript4.sh(qsub 및 옵션 대신 출력 및 오류 파일에 대한 쉘 리디렉션을 사용함 -e):

#!/bin/bash
#PBS -l nodes=1:ppn=20,walltime=05:00:00
#PBS -m e
#PBS -t 1-5

module load R/4.0

Rscript ~/r_script"$PBS_ARRAYID".R > "default.$PBS_ARRAYID.out" 2> "errorfile.$PBS_ARRAYID"

Sys.getenv("PBS_ARRAYID")그런데 PBS_ARRAYID는 내보낸 환경 변수이므로 필요한 경우 R 스크립트에서 액세스할 수 있습니다. 예를 들어 이를 사용하여 입력 및 출력 파일 이름을 구성하고 R 스크립트의 작업을 제어하기 위한 if/then/else 결정을 내릴 수 있습니다. 이는 동일한 R 스크립트의 약간 다른 버전을 여러 개 갖는 것보다 낫습니다.

참고: Torque와 slurm을 모두 실행하는 HPC 클러스터를 관리했지만 관리한 지 약 8년이 되었습니다. 위의 모든 예제는 메모리에서 작성되었으며( qsub인터넷에서 매뉴얼 페이지 검색) 실제 클러스터에서 테스트되지 않았습니다. (아마도) 작동하려면 몇 가지 변경이 필요할 수 있습니다. 특히 $PBS_ARRAYID를 사용한 마지막 예는 원하는 작업을 수행하는 방법에 대한 대략적인 예로 제공됩니다.

관련 정보