0

最近、部門クラスタを利用して で並列計算をしようとしていますR。クラスタ システムは によって管理されSGEます。OpenMPIインストールされ、インストールテストに合格しました。

コマンドを使用してクエリをクラスターに送信しますqsub。スクリプトでは、次のコマンドを使用して、使用するノードの数を指定します。
#PBS -l nodes=2:ppn=24 (two nodes with 24 threads each)
それから、mpirun -np 1 R --slave -f test.R
私は後でチェック$PBS_NODEFILEしました。私が望むように2つのノードが割り当てられます。2 つのノードの名前を見つけることができnode1, node2、それぞれが 24 回表示されます。

test.R の内容を以下に列挙します。

library(Rmpi)
library(snow)

cl <- makeCluster(41,type="MPI")
clusterCall(cl, function() Sys.info()[c("nodename","machine")])
stopCluster(cl)
mpi.quit()

の出力clusterCall()は非常に残念です。node141 回出現するノード名は 1 つだけです。には 24 個のスレッドしかないため、これは明らかに間違っていnode1ます。私のRスクリプトは 1 つのノードまたは 1 つのスレッドしか見つけられないようです。MPIクラスターを構築する正しい方法は何ですか?

4

2 に答える 2

2

まず第一に、SGE がインストールされている場合でも、クラスターは確実に SGE によって管理されません。SGE は#PBSジョブ ファイル内のセンチネルを認識せず、PBS_NODEFILE環境変数をエクスポートしません (SGE がエクスポートするほとんどの環境変数は で始まりますSGE_)。nodes=2:ppn=24また、割り当てられたノード間のスロットの配分は、指定された並列環境によって制御されるため、リソース要求も受け入れません。あなたが持っているのは、PBS Pro または Torque のいずれかです。しかし、SGE はコマンド ライン ユーティリティに同じ名前を付け、qsub多かれ少なかれ同じ引数を取ります。

あなたが説明した問題は通常、Open MPI が環境からノード リストを適切に取得できない場合に発生します。たとえば、PBS Pro/Torque をサポートするようにコンパイルされていない場合などです。その場合、mpirun実行されたノードですべての MPI プロセスが開始されます。次のコマンドを実行して、適切な RAS モジュールがコンパイルされたことを確認します。

ompi_info | grep ras

さまざまな RAS モジュールが一覧表示され、その中に次のような名前が含まれている必要がありますtm

...
MCA ras: tm (MCA v2.0, API v2.0, Component v1.6.5)
...

モジュールがリストされていない場合、tmOpen MPI はノード リストを自動的に取得せず、ホスト ファイルを明示的に指定する必要があります。

mpiexec ... -machinefile $PBS_NODEFILE ...

PBS Pro/Torque では、Open MPI にもtmPLM モジュールが必要です。このモジュールがないと、Open MPI は TM API を使用して 2 番目のノードでプロセスをリモートで起動できなくなり、SSH の使用にフォールバックします。このような場合、パスワードなしの SSH ログイン (公開鍵認証を使用するログインなど) が、各クラスター ノードから他の各ノードに可能であることを確認する必要があります。

問題を解決するための最初のステップは、上記のように正しいモジュールが存在するかどうかを確認することです。モジュールが存在する場合は、次のように起動hostnamempiexecて動作するかどうかを確認する必要があります。

#PBS -l nodes=2:ppn=24

echo "Allocated nodes:"
cat $PBS_NODEFILE
echo "MPI nodes:"
mpiexec --mca ras_base_display_alloc 1 hostname

次に、2 つのリストを比較し、ブロックも調べALLOCATED NODESます。リストはほぼ同じである必要があり、ノードごとに 24 スロットの割り当てられたノード テーブルに両方のノードが表示される必要があります ( を参照Num slots)。2 番目のリストにホスト名が 1 つしか含まれていない場合、Open MPI はホストファイルを適切に取得できません。これは、モジュールが存在しているにもかかわらず、何かがtmモジュールの初期化または選択を妨げているためです。これは、システム全体の Open MPI 構成か、優先度の高い他の RAS モジュールのいずれかです。に渡すと、そうであるかどうかを判断するの--mca ras_base_verbose 10mpiexec役立ちます。

于 2015-05-27T11:22:49.980 に答える
0

呼び出しの-np 1一部は、mpirunMPI に 1 つのコアのみを使用するように指示します。OpenMPI が SGE で設定された環境からコア数を取得するように、その部分を削除してみてください。

于 2015-05-26T23:41:27.133 に答える