2016-12-02 1 views
0

이제 대용량 데이터 집합을 처리하고 있으며 병렬 처리를 사용하여 처리 속도를 높이고 싶습니다. WestGird는 클러스터가 상호 연결되어있는 캐나다 컴퓨팅 시스템입니다.WestGrid (pbs 파일)에서 R로 표시된 MPI 클러스터 기반 병렬 계산

병렬 작업을 수행하는 데 두 개의 패키지 doSNOWparallel을 사용합니다. 제 질문은 pbs 파일을 작성하는 방법입니다. qsub을 사용하여 작업을 제출하면 오류가 발생합니다 : mpirun noticed that the job aborted, but has no info as to the process that caused that situation.

install.packages("fume_1.0.tar.gz") 
library(fume) 
library(foreach) 
library(doSNOW) 
load("spei03_df.rdata",.GlobalEnv) 

cl <- makeCluster(mpi.universe.size(), type='MPI') 
registerDoSNOW(cl) 
MK_grid <- 
    foreach(i=1:6000, .packages="fume",.combine='rbind') %dopar% { 
    abc <- mkTrend(as.matrix(spei03_data)[i,]) 
    data.frame(P_value=abc$`Corrected p.value`, Slope=abc$`Sen's Slope`*10,Zc=abc$Zc) 
    } 
    stopCluster(cl) 
    save(MK_grid,file="MK_grid.rdata") 
    mpi.exit() 

은 "연기"패키지 https://cran.r-project.org/src/contrib/Archive/fume/에서 다운로드 할 수 있습니다 : 여기

는 R 스크립트 코드입니다.

#!/bin/bash 
#PBS -l nodes=2:ppn=12 
#PBS -l walltime=2:00:00 
module load application/R/3.3.1 
cd $PBS_O_WORKDIR 

export OMP_NUM_THREADS=1 
mpirun -np 1 -hostfile $PBS_NODEFILE R CMD BATCH Trend.R 

누군가가 도와 드릴까요 : 여기

는 PBS 파일입니다? 고마워.

답변

1

각 클러스터의 설정이 다르기 때문에 사용한 적이없는 컴퓨팅 클러스터 사용 방법에 대한 조언은 어렵지만 도움이 될만한 몇 가지 일반적인 조언을드립니다.

당신의 직업 스크립트는 나에게 합리적인 것처럼 보입니다. 이는 Torque/Moab 클러스터 중 하나에서 사용하는 것과 매우 유사합니다. 때로는 추가 모듈 파일을로드해야 할 수도 있기 때문에 필요한 모든 R 패키지를 대화식으로로드 할 수 있는지 확인하는 것이 좋습니다. 패키지를 직접 설치해야하는 경우 "~/R/x86_64-pc-linux-gnu-library/3.3"과 같은 표준 "개인 라이브러리"에 설치해야합니다. 이는 종종 병렬로 실행될 때 R 스크립트에서 패키지를로드하는 오류를 피합니다.

나는 당신의 R 스크립트에 대해 할 말이 더있다 : 당신은 library(Rmpi)를 사용하여 R 스크립트에서 Rmpi ​​패키지를로드 할 필요

  • . doSNOW를로드 할 때 자동으로로드되지 않으므로 mpi.universe.size()을 호출 할 때 오류가 발생합니다.

  • R 스크립트 자체에 R 패키지를 설치하지 않는 것이 좋습니다. install.script이 mpirun을 통해 실행되는 R 스크립트에서 대화식 기능을 실행할 수 없기 때문에 CRAN 저장소에 대한 프롬프트를 표시해야하는 경우 실패합니다.

  • makeCluster을 호출 할 때 클러스터 근로자 mpi.universe.size() - 1을 시작하는 것이 좋습니다. mpirun이 한 명의 작업자를 시작하기 때문에 makeClustermpi.universe.size() 명의 추가 작업자를 생성하는 것이 안전하지 않을 수 있습니다. 그 결과 합계가 mpi.universize.size() + 1 MPI 프로세스가됩니다. 이는 일부 클러스터에서 작동하지만 적어도 하나의 클러스터에서는 실패합니다.

  • 디버깅 중에는 makeCluster outfile='' 옵션을 사용해보십시오. MPI 설치에 따라 숨겨진 오류 메시지를 볼 수 있습니다.