コンピュータークラスターを使用してPythonプログラムを実行することに興味があります。私は過去にPython MPIインターフェースを使用していましたが、これらのコンパイル/インストールの難しさのために、Pythonのような組み込みモジュールを使用するソリューションを好みます マルチプロセッシング モジュール。
私が本当にやりたいのは、コンピュータクラスタ全体にまたがる_multiprocessing.Pool
_インスタンスをセットアップし、Pool.map(...)
を実行するだけです。これは可能/簡単なことですか?
これが不可能な場合は、少なくともノードごとに異なるパラメーターを使用して、中央スクリプトから任意のノードでProcess
インスタンスを開始できるようにします。
クラスターコンピューティングが分散メモリシステム(SMPではなく複数ノード)を意味する場合、Pythonのマルチプロセッシングは適切な選択肢ではない可能性があります。複数のプロセスを生成できますが、それらは単一のノード内にバインドされます。
必要なのは、複数のノードにわたるプロセスのスポーイングを処理し、プロセッサー間の通信のメカニズムを提供するフレームワークです。 (ほとんどMPIが行うこと)。
クラスタコンピューティングに役立つフレームワークのリストについては、 Python wiki の並列処理のページを参照してください。
リストから、 pp 、 jug 、 pyro および celery は賢明なオプションのように見えますが、それらのいずれかの経験(私は主にMPIを使用します)。
インストール/使用の容易さが重要な場合、jug
を調べることから始めます。 簡単にインストールできます 、 一般的なバッチクラスタシステムをサポートします 、そして 文書化されている 。
過去に私は Pyro を使用してこれを非常にうまく行ってきました。モバイルコードを有効にすると、ノードにまだないモジュールを必要なモジュールに自動的に送信します。かなり気の利いた。
私は [〜#〜] scoop [〜#〜] を使用して、単一または複数のコンピューターで使用するためのマルチプロセッシングの代わりに幸運があり、クラスターおよび他の多くの機能のジョブ送信の利点を得ることができますmap()を使用するためのネストされたマップと最小限のコード変更。
オープンソースパッケージをpipインストールする場合は、 Ray を検討する必要があります。これは、Pythonクラスターフレームワークのうち、おそらくシングルに最も近いオプションですthreaded Python Experience。両方の機能(タスクとして)およびステートフルクラス(アクターとして)を並列化でき、すべてのデータシッピングおよびシリアル化と例外メッセージの伝播を自動的に行います。また、通常のPython(アクターを渡すことができ、タスクは他のタスクを呼び出すことができ、任意のデータ依存関係がある、など)と同様の柔軟性を実現します。) ドキュメント 。
例として、これはRayでマルチプロセッシングマップの例を実行する方法です。
import ray
ray.init()
@ray.remote
def mapping_function(input):
return input + 1
results = ray.get([mapping_function.remote(i) for i in range(100)])
このAPIは、PythonのマルチプロセッシングAPIとは少し異なりますが、使いやすいはずです。ウォークスルー チュートリアル があり、データの依存関係やアクターなどの処理方法を説明しています。
「pip install ray」でRayをインストールしてから、単一ノードで上記のコードを実行できます。または、クラスターのセットアップも簡単です。 クラウドサポート および クラスターサポート を参照してください=
免責事項:私はRay開発者の一人です。