私は、Sun Grid Engineを実行しているクラスタでシミュレーションを実行する、非常に一般的なシナリオでIPython Parallelを使用しようとしています。この。Sun Grid EngineでIPython Parallelを使用する
は、ここで私が何をしようとしていますものです:
が、私はいくつかの異なるパラメータ値を持つ(numpyのアレイを使用して)数値シミュレーションを実行したい - タスクが/「あきれる」パラレル明らかにされています。 Grid Engineを実行するクラスタのヘッドノードに(sshを介して)アクセスできます。これまではQSUBコマンドを使ってシェルスクリプトを実行していましたが、これは非常にやっかいです(ノードクラッシュの処理など)、私はPythonでこれをすべて行う方法を探していました。
このシナリオでは、IPythonが理想的に適しているようですが、設定がスムーズに行われるのは面倒です。ヘッドノードでIPCLUSTERを使用してn台(たとえば20台)のエンジンを起動し、IPython.parallel.Clientを使用して接続するローカルマシンに.jsonファイルをコピーします。
私はIPClusterStart.controller_launcher_class = 'SGEControllerLauncher'
とIPClusterEngines.engine_launcher_class = 'SGEEngineSetLauncher'
IPCLUSTERは罰金実行しているように見えるが設定されています。私は、SSH端末にヘッドノードからこの出力を得る:エンジンの多くは、コントローラも、後に登録に失敗します、非常に多くの
:
-- [IPClusterStart] Starting Controller with SGEControllerLauncher -- [IPClusterStart] Job submitted with job id: '143396' -- [IPClusterStart] Starting 4 Engines with SGEEngineSetLauncher -- [IPClusterStart] Job submitted with job id: '143397' -- [IPClusterStart] Engines appear to have started successfully
しかし、私はこれらの問題を持っていますエンジンが正常に始動したという上記のメッセージが表示されます。 20台のエンジンでIPCLUSTERを起動すると、10〜15台のエンジンがGrid Engineのキューに表示されます。私は他のエンジンに何が起こるか分かりません。出力ファイルはありません。その一部のみを開始これら10-15のエンジンのうちコントローラに登録して、私は彼らの出力ファイルでこれを参照してください。
... [IPEngineApp] Using existing profile dir: .../.ipython/profile_sge' ... [IPEngineApp] Loading url_file .../.ipython/profile_sge/security/ipcontroller-engine.json' ... [IPEngineApp] Registering with controller at tcp://192.168.87.115:64909 ... [IPEngineApp] Registration timed out after 2.0 seconds
任意のアイデアなぜこの:他人に
... [IPEngineApp] Using existing profile dir: .../.ipython/profile_sge' ... [IPEngineApp] Loading url_file ... .ipython/profile_sge/security/ipcontroller-engine.json' ... [IPEngineApp] Registering with controller at tcp://192.168.87.106:63615 ... [IPEngineApp] Using existing profile dir: .../.ipython/profile_sge' ... [IPEngineApp] Completed registration with id 0
が、私はこれを見ます起こる? [エンジンの例外] トレースバック(最新
:
は時々、エンジンが起動し、正常に登録が、私は彼らが
view.execute('%pylab')
のような非常にシンプルなものを実行させるとき、彼らは死んで開始し、私は戻って取得唯一の例外は、このです最後の呼び出し): ファイル "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/IPython/parallel/client/client.py"、708行目、_handle_stranded_msgs エラーが発生しました。 EngineError:エンジン%rがタスク%r実行中に死亡しました "%(eid、msg_id)) EngineError:エンジン1がタスク 'b9601e8a-cff5-4037-b9d9-a0b93ca2f256'を実行中に停止しましたこのようにエンジンを起動すると、何も実行していなくてもエンジンが動作している限り、ノードとキューを占有することになります。いくつかのスクリプトを実行したいときにのみ生成されるようにエンジンを起動する簡単な方法はありますか?そして、計算結果を返したら閉じますか?
グリッドエンジンは毎回異なるノードでコントローラを起動しているようです。そのため、IPCLUSTER設定ファイルの--ruseフラグは有用ではありません。 IPCLUSTERを使用するたびにJSONファイルをコピーする必要があります。これを避ける方法はありますか?
誰かが、この一般的なシナリオのための簡単な作業の流れを与えることができれば、それは本当に参考になる:SSH接続経由でSGEクラスタに明らかに並列ジョブを送信するためにIPythonのパラレルを使用。エンジンのクラッシュに対する再送信を処理する方法がいくつかあります。また、シミュレーションの間だけクラスタリソースを使用する方法があればいいでしょう。