2016-12-02 12 views
0

私は現在大規模なデータセットを扱っており、プロセスを高速化するために並列計算を使用したいと考えています。 WestGirdは、相互接続を持つクラスタを持つカナダのコンピューティングシステムです。ウェストグリッド上のRのMPIクラスタベースの並列計算(pbsファイル)

私は、並列ジョブを実行するために二つのパッケージdoSNOWparallelを使用しています。私の質問は、どのようにpbsファイルを書く必要があります。 qsubを使用してジョブをサブミットすると、エラーが発生します:mpirun noticed that the job aborted, but has no info as to the process that caused that situation。ここで

はRのスクリプトコードです:

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/からダウンロードです。ここで

をPBSファイルです:

#!/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 

誰でも助けることができますか?どうもありがとう。

答えて

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がCRANリポジトリの入力を促す必要がある場合は失敗します。これは、mpirunを介して実行されるRスクリプトから対話型関数を実行できないためです。

  • makeClusterを呼び出すときは、クラスタワーカーmpi.universe.size() - 1を開始することをお勧めします。 mpirunは1人の作業者を開始するので、makeClustermpi.universe.size()人の追加作業者を召喚するのは安全ではない可能性があります。その結果、合計でmpi.universize.size() + 1のMPIプロセスが発生します。これは一部のクラスタでは機能しますが、少なくとも1つのクラスタでは失敗します。

  • デバッグ中に、makeCluster outfile=''オプションを使用してみてください。 MPIのインストールによっては、そうでなければ隠されるエラーメッセージが表示されることがあります。