問題タブ [mpi4py]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - MPI4PY オーバーフロー エラー: 整数 2333441511 が 'int' に収まりません
ネストされた dict のリストを 200000 より大きな数なしで分散させます。そのサイズはすべて約 500M です。
ipython - machinefile を使用した MPI クラスタリングによる ipython
mpi4py デモ ディレクトリの hellowworld.py スクリプトのテストに従って、3 つのノードで mpi4py サポートを使用して mpi を正常に構成しました。
gms@host:~/development/mpi$ mpiexec -f machinefile -n 10 python ~/development/mpi4py/demo/helloworld.py
私は現在、これを ipython で機能させようとしており、次のように、私のマシンファイルを $IPYTHON_DIR/profile_mpi/ipcluster_config.py ファイルに追加しました。
次に、次のコマンドを使用して、ヘッド ノードで iPython ノートブックを起動します。ipython notebook --profile=mpi --ip=* --port=9999 --no-browser &
ほら、ローカル ネットワーク上の別のデバイスから問題なくアクセスできます。ただし、iPython ノートブックから helloworld.py を実行すると、ヘッド ノードからのみ応答が返されます。Hello, World! I am process 0 of 10 on host.
10個のエンジンでiPythonからmpiを始めたのですが...
念のため、これらのパラメーターをさらに構成しました
$IPYTHON_DIR/profile_mpi/ipcluster_config.py 内
$IPYTHON_DIR/profile_mpi/ipengine_config.py で
$IPYTHON_DIR/profile_mpi/ipcontroller_config.py で
ただし、これらも役に立ちませんでした。
これを正しく機能させるために何が欠けていますか?
アップデート 1 を編集
現在、ワーカー ノードに NFS マウントされたディレクトリがあり、「現在、ipcluster では、IPYTHONDIR/profile_/security ディレクトリがコントローラとエンジンの両方から見える共有ファイル システム上にあることが必要です」という要件を満たしています。ipcluster
コマンドを使用して、コントローラーとエンジンを起動できるようにしますipcluster start --profile=mpi -n 6 &
。
したがって、これをヘッド ノードで発行すると、次のようになります。
2016-03-04 20:31:26.280 [IPClusterStart] Starting ipcluster with [daemon=False]
2016-03-04 20:31:26.283 [IPClusterStart] Creating pid file: /home/gms/.config/ipython/profile_mpi/pid/ipcluster.pid
2016-03-04 20:31:26.284 [IPClusterStart] Starting Controller with LocalControllerLauncher
2016-03-04 20:31:27.282 [IPClusterStart] Starting 6 Engines with MPIEngineSetLauncher
2016-03-04 20:31:57.301 [IPClusterStart] Engines appear to have started successfully
次に、同じコマンドを発行して他のノードでエンジンを起動しますが、次のようになります。
2016-03-04 20:31:33.092 [IPClusterStart] Removing pid file: /home/gms/.config/ipython/profile_mpi/pid/ipcluster.pid
2016-03-04 20:31:33.095 [IPClusterStart] Starting ipcluster with [daemon=False]
2016-03-04 20:31:33.100 [IPClusterStart] Creating pid file: /home/gms/.config/ipython/profile_mpi/pid/ipcluster.pid
2016-03-04 20:31:33.111 [IPClusterStart] Starting Controller with LocalControllerLauncher
2016-03-04 20:31:34.098 [IPClusterStart] Starting 6 Engines with MPIEngineSetLauncher
[1]+ Stopped ipcluster start --profile=mpi -n 6
確認なしでEngines appear to have started successfully
...
さらに紛らわしいことps au
に、ワーカー ノードで a を実行すると、次のようになります。
プロセス 3376 および 3378 の IP アドレスは、クラスター内の他のホストのものです。しかし...
ipython を使用して同様のテストを直接実行すると、ローカルホストからの応答しか得られません (ただし、元の投稿に記載されているように、これは mpi と mpi4py で直接動作します)。
構成が正しいと確信していますが、まだ明らかな何かが欠けているようです。ipcluster
ワーカー ノードで起動すると、次のように表示されます。2016-03-04 20:31:33.092 [IPClusterStart] Removing pid file: /home/gms/.config/ipython/profile_mpi/pid/ipcluster.pid
アップデート 2 を編集
これは、何が起こっているかを文書化するためのものであり、うまくいけば、最終的にこれが機能する理由は次のとおりです。
ログファイルを消去して再発行しましたipcluster start --profile=mpi -n 6 &
そして、エンジン用の 6 つのログ ファイルと、コントローラー用の 1 つのログ ファイルが表示されます。
ipcontroller のログを見ると、登録されているエンジンは 1 つだけのようです。
6 つのエンジンのそれぞれを登録する必要はありませんか?
エンジンのログのうち 2 つは、正常に登録されているように見えます。
もう一方が登録している間id 0
しかし、他の 4 つのエンジンではタイムアウト エラーが発生しました。
うーん...明日、ipythonの再インストールを試みるかもしれません。
アップデート 3 を編集
競合するバージョンの ipython がインストールされました (apt-get と pip のように見えます)。を使用してアンインストールおよび再インストールしてpip install ipython[all]
います...
アップデート 4 を編集
誰かがこれが役に立つと思ってくれることを願っています.
とにかく、自分の環境を分離するためにvirtualenvをインストールしましたが、ある程度成功したようです。各ノードで「ipcluster start -n 4 --profile=mpi」を起動し、ヘッド ノードに ssh で戻り、テスト スクリプトを実行しました。最初にipcluster
. 次の出力:つまり、いくつかの並列計算を実行しています。
ただし、すべてのノードを照会するテスト スクリプトを実行すると、ヘッド ノードのみが取得されます。
しかし、繰り返しになりますが、まっすぐにmpiexec
コマンドを実行すると、すべてがうまくいきません。
さらに混乱を招くことに、ノード上のプロセスを見ると、それらが連携していることを示すあらゆる種類の動作が見られます。
そして、私のログには何も異常はありません。2 番目のテスト スクリプトでノードが返されないのはなぜですか (ここに含まれるコード:):
python - Python (mpi4py) を使用した Google Cloud Engine での分散プログラミング
mpi4py パッケージを使って python で分散プログラミングをしたいです。テストの目的で、Google コンテナー エンジンを介して 5 ノード クラスターをセットアップし、それに応じてコードを変更しました。しかし、今、私の次のステップは何ですか?5 つの VM すべてでコードを実行して動作させるにはどうすればよいですか?
クラスターから 1 つの VM に ssh 接続してコードを実行しようとしましたが、コードが配布されていないことは明らかでしたが、代わりに同じマシンにとどまりました :( [以下の例を参照]
.
コード:
.
出力:
mpiexec -n 5 python 5_test.py
こんにちは世界!私は gke-cluster-1-000000cd-node-mgff でプロセス/ランク 0/5 です。
こんにちは世界!私は gke-cluster-1-000000cd-node-mgff でプロセス/ランク 1/5 です。
こんにちは世界!私は gke-cluster-1-000000cd-node-mgff でプロセス/ランク 2/5 です。
こんにちは世界!私は gke-cluster-1-000000cd-node-mgff でプロセス/ランク 3/5 です。
こんにちは世界!私は gke-cluster-1-000000cd-node-mgff でプロセス/ランク 4/5 です。
python - Python ループの並列化
複数のプロセッサで実行するために並列化したい時間のかかるコードがあります。これは可能ですか?
python - mpi4py は、大規模な numpy 配列で分散および収集します
mpi4py を使用して、大きな numpy 配列でいくつかの操作を並列化しようとしています。私は現在numpy.array_split
、配列をチャンクに分割し、続いcom.scatter
て配列を異なるコアに送信しcomm.gather
、結果の配列を収集するために使用しています。最小限の(そうではない)動作例を以下に示します。
これを実行すると、次のエラーが表示されます。
このエラーは、gather によって収集される numpy 配列のサイズが大きいことが原因のようです。スキャッターとギャザーは配列を配列のリストとして送信するため、リストのサイズを簡単に超えるように見えます。私が遭遇した 1 つの提案は、comm.Scatter と comm.Gather を使用することです。ただし、これらの関数の明確なドキュメントを見つけるのに苦労しており、これまでのところそれらを正常に実装できていません。例えば:
交換する
outputData = comm.gather(output_chunk,root=0)
線で
outputData=comm.Gather(sendbuf[test_chunks,MPI.DOUBLE],recvbuf=output_chunk,MPI.DOUBLE],root=0)
エラーが発生します:
または次の行で:
エラーが発生します:
さらに、入力行列test
もサイズが大きくなり、 に対して同様の問題が発生する可能性がありますcomm.scatter
。は、 の出力であるのサイズに基づいて定義されているため、のcomm.Gather
設定方法がわかりません。そのため、内で指定することはできません。comm.Scatter
recvbuf
test_chunk
comm.scatter
recvbuf
comm.Scatter
python - mpi4py Scatterv関数は、numpy配列をどの軸に沿って分割しますか?
次の MWE を使用comm.Scatterv
しcomm.Gatherv
て、特定の数のコアに 4D 配列を分散させます ( size
)
これにより、乱数の 4D 配列が作成され、原則として、size
再結合する前にコア間で分割する必要があります。ベクトルとScatterv
の開始整数と変位に従って、軸 0 (長さ 411) に沿って分割することを期待していました。ただし、( ) で再結合するとエラーが発生し、各コアの output_chunk のプロットは、入力データのほとんどが失われていることを示しているため、最初の軸に沿って分割が発生していないように見えます。split_sizes
displacements
Gatherv
mpi4py.MPI.Exception: MPI_ERR_TRUNCATE: message truncated
私の質問は次のとおりです:分割が最初の軸に沿って発生しないのはなぜですか?どの軸に沿って分割が発生するかをどのように知ることができますか?また、これがどの軸に沿って発生するかを変更/指定することは可能ですか?