2017-03-27 27 views
1

어제 밤에 동일한 실행 파일이지만 입력 매개 변수가 다른 많은 작업을 qsub과 함께 보냈습니다. 일자리의 대부분은 다른 사람들이 끝내기를 기다리는 대기열에있었습니다. 오늘 아침, 대기열에 있던 모든 작업이 입력 파일의 마지막 인스턴스를 사용함을 알게되었습니다.다른 런타임 매개 변수로 여러 qsub 작업 보내기

이 문제를 해결하기위한 표준 방법은 무엇입니까? 작업마다 하나의 입력 파일을 가지고 코드를 컴파일하여 올바른 코드를 읽어야합니까? 아니면 더 나은 /보다 강력한 솔루션이 있습니까?

+0

는 각'qsub' 사이에'pbs' 스크립트를 수정 했습니까? – gauteh

+0

@gauteh 아니오 나는하지 않았다. 내 (어리석은) 실수는 내가 일을 보낼 때 입력 파일이 읽혀질 것이라는 것을 전제로했기 때문에 이해가되지 않는다. 그러나 N 시뮬레이션을 위해 N 개의 다른 입력 파일을 가지고 있으므로 N 재 컴파일이 필요하지 않은 것으로 나타났습니다. 그래서 더 좋은 방법이 있어야한다고 생각하고있다. – solalito

+0

컴파일시에 정의되는 것이 아니라 명령 행에서 입력 인자를 취하도록 실행 파일을 수정한다면, 아래에 설명 된 접근법을 사용할 수있다. 또한 실행 파일을 스크립트로 래핑하여 PBS 스크립트에서 다루기 쉬운 간단한 숫자보다 복잡한 입력 매개 변수를 제공 할 수 있습니다. – gauteh

답변

1

당신은 병렬 또는 순차적 중 하나를 실행, 다른 입력 paramters을 통해 루프 마스터 PBS 스크립트를 만들 수 있습니다이 단순히 각 작업 (IN)에 대해 서로 다른 입력 번호를 executable 제공

,이를 변경해야 필요에 따라 하나 이상의 입력 매개 변수를 루프 할 수 있습니다.

# PBS -l mppwidth=2048 

NIN=10 # number of input parameters 

for IN in `seq -w 1 $NIN`; do 
    cd "sub_job_${IN}" 
    executable $IN # runs jobs sequentially (you might have to prefix this with aprun) 
done 

또는 병렬로

는 :

# PBS -l mppwidth=2048 
# ^^ these should now be shared among the jobs. 

NIN=10 # number of input parameters 

for IN in `seq -w 1 $NIN`; do 
    cd "sub_job_${IN}" 
    executable $IN & # runs the job in the background, you might 
        # have to prefix this with `aprun -n .. -N ..` or something 
        # so that each job only uses a portion of the total 
        # requested CPUs. 
done 
wait # wait for all jobs to finish 
+0

TBH, 나는 이미 이와 비슷한 것을 생각해 봤지만 더 나은/깨끗한 방법이 있어야한다고 생각했습니다. 솔루션을 가져 주셔서 감사합니다! 가장 좋은 해결책은 python 스크립트가 내 입력 파일을 편집하고 시뮬레이션을 시작하는 것일 수 있습니다. – solalito

+0

예, 저는 자주 파이썬을 마스터 스크립트로 사용하여 ThreadPoolExecutor를 사용하는 스레드로 각 작업을 시작합니다 (각 프로세스에서 aprun 실행). 이 방법으로 간단한 파이썬 인터페이스를 활용하여 작업을 추적 할 수 있습니다. – gauteh