2013-06-25 2 views
0

나는 작업 제출 LSF를 사용하려면 각 노드가 하나의 MPI 프로세스를 가지고 4 개 노드에서lsf에서 다중 스레드 mpi 프로세스를 시작하는 방법은 무엇입니까?

  • 실행, 병렬
  • 의를
  • 각 프로세스는 12 개 스레드

있다 LSF가 없으면 다음과 같이 4 노드에서 mpi로 간단히 시작합니다.

mpirun -hosts host1, host2, host3, host4 -np 4 ./myprocess --numthreads = 12

그러나 LSF가있는 상태에서이 작업을 수행하는 방법을 알 수 없습니까? 아마도 표준 방법이있을 것 같지만 LSF를 처음 접했을 것입니다. 나는 주위에 googled했다. 그러나 대답은 나에게 즉시 명백하지 않았다. 내가 Hybrid MPI/OpenMP in LSF을 찾았지만, 꽤 똑같지는 않습니다. 한 번에 하나의 호스트 만 필요합니다.

답변

5

링크 된 다른 질문은 당신이 필요로하는 것을 정확히 제공하지만, 스레드 수가 OMP_NUM_THREADS 환경 변수로 제어되는 OpenMP 응용 프로그램 용으로 작성되었으므로 약간 수정해야합니다. 여기

는 작업 스크립트의 가장 중요한 부분입니다 :

  • #BSUB -n 4-4 슬롯
  • 요청
  • #BSUB -R "span[ptile=1]" - 슬롯은 노드 당 하나를 분산 요청; 이전과 함께이 옵션은 4 개 가지 노드에 걸쳐 작업을 걸쳐 생성 된 호스트 파일에서 호스트 당 하나 개의 슬롯을 넣어 LSF 지시
  • #BSUB -x - 노드

위의 세 가지 옵션에 단독으로 액세스 요청 LSF에게 4 개의 노드를 할당하도록 지시하고 각 노드에 하나의 슬롯을 예약합니다. 독점 액세스가 요청되기 때문에 다른 작업이 동일한 노드를 작업과 공유하지 않으므로 노드 당 원하는만큼의 스레드를 시작할 수 있습니다. 그렇다면 Open MPI의 mpiexec을 호출하고 Open MPI 설정에서 LSF 통합이 컴파일 된 경우 LSF에서 호스트 목록을 자동으로 가져 와서 노드 당 하나의 프로세스를 시작하면됩니다.

샘플 LSF 작업 파일은 다음과 같습니다

#BSUB -n 4 
#BSUB -R "span[ptile=1]" 
#BSUB -x 

mpiexec -np 4 ./myprocess --numthreads=12 

당신은 또한 -W 옵션과 -M 옵션을 충분한 양의 메모리와 충분한 동작 시간을 요청해야합니다. LSF (대부분의 다른 분산 리소스 관리자와 마찬가지로)의 메모리는 슬롯 당 으로 요청되므로 ./myprocess 인스턴스가 소비하는 최대 메모리 양을 지정해야합니다.

LSF 통합이 Open MPI 배포에서 컴파일되지 않으면 LSF 호스트 파일을 구문 분석하고 이전 MPF 호스트 파일을 작성해야하므로 프로세스가 다소 복잡합니다.

+0

감사합니다! 질문 : 어떻게 청구됩니까? 즉, 호스트의 모든 코어에 대해 비용이 청구됩니다 (이는 더 바람직 할 것입니다). 또는 각 호스트의 단일 코어에 대해서만 청구됩니다 ('-x'옵션이 싫은 경우 발생할 수 있음). –

+0

그 설정에 따라 달라집니다. 시스템 관리자에게 문의하십시오. –

+0

왜'-n 48'과'-R "span [ptile = 12]"'? 그게 더 간단하지 않고'-x'를 필요로하지 않을까요? –

0

Hristo의 대답을 올바른 것으로 받아 들였지만, 여기에 '-x', -W 및 -M을 사용하여 문제가 발생하지 않도록하고 결국 시스템 관리자가 나에게 말한 것과 일치합니다. :

당신이 스크립트처럼 사용
#!/bin/bash 

machinefile="$(mktemp)" 
n=0 
cmdstring="mpirun -machinefile ${machinefile} " 
for host in $LSB_MCPU_HOSTS; do { 
    if [[ $host != 12 ]]; then { 
     echo $host>>$machinefile 
     n=$(($n+1)) 
    } fi 
} done 

echo $n 
echo [email protected] 

mpirun -machinefile ${machinefile} -np $n [email protected] 

,의 그것이 'lsfrun.sh'라고 가정 해 봅시다 :

bsub -n 48 -R "span[ptile=12]" ./lsfrun.sh ./myprocess --threads 12 
관련 문제