問題タブ [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: 動的データ処理
のような株式ティッカーを含むベクターがtickers = ['AAPL','XOM','GOOG']
あり、「従来の」python プログラムでは、このtickers
ベクターをループし、 のようなティッカー文字列を 1 つ選択し、株式リターンAAPL
を含む csv ファイルをインポートAAPL
し、共通関数への入力としてリターンを使用します。最後に、csv ファイルを出力として生成します。4000 を超えるティッカーがあり、各ティッカーに適用する関数の処理に時間がかかります。mpi4py
ジョブごとに約 100 個のプロセッサにアクセスできるパッケージを使用して、コンピューター クラスターにアクセスできます。私はPythonでこのmpi
例をよく理解しています(そして実装できました) :
したがって、この例では、サイズ 8 のデータ ベクトルがあり、各プロセッサ (合計 3 つ) に同じ数のデータ要素を割り当てます。上記の同様の例を使用して、各プロセッサに 1 つの株式ティッカーを割り当て、ティッカーごとに実行する必要がある関数を適用するにはどうすればよいですか? tickers
プロセッサが解放されたら、ベクトルに戻っticker
てまだ処理されていないa を処理するように python に伝えるにはどうすればよいですか?
python - マルチプロセッシング プールを mpi4py に適合させる
マルチプロセッシング プールを使用して Python で並列化されたシミュレーションを実行していますが、複数のコアを備えたコンピューターでうまく機能します。ここで、複数のノードを使用してクラスターでプログラムを実行したいと考えています。マルチプロセッシングは分散メモリには適用できないと思います。しかし、mpi4py は良い選択肢のようです。したがって、これらのコードに相当する最も単純な mpi4py は次のとおりです。
python - シリアル python スクリプトから mpi4py アプリケーションを使用する方法
mpi4pyをベースにライブラリを作ってみたのですが、シリアルのpythonコードで使いたいです。
ただし、serial_source.py内には、 parallel_barという関数が存在します。
この質問の動機は、mpi4py を使用して Python でプログラムを最適化する正しい方法を見つけることです。これらのプログラムは必ずしも完全に並列で実行されるようには設計されていません。
fedora - FedoraScientific での MPI4PY の使用
最近、含まれているソフトウェアのリストに感銘を受けたので、Fedora Scientific 20 をダウンロードしてインストールしました。私がこのソフトウェアに興味を持ったのは、MPI フレームワークが含まれているためです。mpicc と mpiexec を使用して、単純な C プログラムをコンパイルして実行することができました。ただし、Python コードを使用して MPI4PY を使用して OpenMPI を呼び出すには、いくつかの助けが必要です。
ターミナルプロンプトで、試してみると:
$ /lib64/openmpi/bin/mpiexec -n 2 python3 helloworld.py
トレースバックは、
ImportError: 'mpi4py' という名前のモジュールがありません
引き上げられました。helloworld.py プログラムはオンラインで見つかった例で、6 行目がfrom mpi4py import MPI
.
Apper は、Fedora Scientific のインストールの一部として OpenMPI 用の Python2 と Python3 の両方に mpi4py がインストールされていることを示しているため、何が問題なのかわかりません。誰かがこのパッケージの使い方についてアドバイスしてもらえますか?
parallel-processing - mpi4py: 内部エラー: 無効なエラー コード 409e0e (リング ID が一致しません)
私はPythonでコーディングしており、mpi4pyを使用していくつかの最適化を並行して行っています。通常の最小二乗法を使用していますが、データが大きすぎて 1 つのプロセッサに収まらないため、他のプロセスを生成するマスター プロセスがあります。これらの子プロセスはそれぞれ、最適化プロセス全体でそれぞれが使用するデータのセクションをインポートします。
最適化に scipy.optimize.minimize を使用しているため、子プロセスは親プロセスから係数の推測を受け取り、二乗誤差 (SSE) の合計を親プロセスに報告し、scipy.optimize.minimize を実行します。繰り返し、SSE の最小値を見つけようとします。最小化関数を反復するたびに、親は新しい係数の推測を子プロセスにブロードキャストし、子プロセスは SSE を再度計算します。子プロセスでは、このアルゴリズムは while ループで設定されます。親プロセスでは、scipy.optimize.minimize を呼び出すだけです。
私に問題を与えている部分では、ネストされた最適化、または最適化内の最適化を行っています。内部最適化は前述の OLS 回帰であり、外部最適化は内部最適化の係数を使用する別の関数を最小化します (OLS 回帰)。
したがって、私の親プロセスには、最小化する 2 つの関数があり、2 番目の関数は最初の関数を呼び出し、2 番目の関数の最適化の反復ごとに新しい最適化を行います。子プロセスには、これら 2 つの最適化のためにネストされた while ループがあります。
うまくいけば、それはすべて理にかなっています。さらに情報が必要な場合は、お知らせください。
親プロセスに関連するコードは次のとおりです。
子プロセスに関連するコードは次のとおりです。
私の問題は、外側の最小化を 1 回繰り返した後、次のエラーが吐き出されることです。
この「リング ID」エラーまたはその修正方法に関する情報を見つけることができませんでした。助けていただければ幸いです。ありがとう!