5

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

ただし、次の問題があります。

  1. 多くの場合、エンジンが正常に起動したという上記のメッセージが表示された後でも、多くのエンジンがコントローラーへの登録に失敗します。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.106:63615
    ... [IPEngineApp] Using existing profile dir: .../.ipython/profile_sge'
    ... [IPEngineApp] Completed registration with id 0
    

    他の人にはこれが見えます:

    ... [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
    

    なぜこれが起こるのか分かりますか?

  2. 時々、エンジンは正常に起動して登録されますが、次のような非常に単純なものを実行するとエンジンが停止し始めview.execute('%pylab')ます。返される唯一の例外は次のとおりです。

    [エンジン例外] トレースバック (最新の呼び出しが最後): ファイル "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/IPython/parallel/client/client.py"、708 行目、_handle_stranded_msgs で error.EngineError("タスク %r の実行中にエンジン %r が停止しました"%(eid, msg_id)) EngineError: タスク 'b9601e8a-cff5-4037-b9d9-a0b93ca2f256' の実行中にエンジン 1 が停止しました

  3. このようにエンジンを起動すると、エンジンが実行されている限り、たとえ何も実行していなくても、ノードとキューが占有されます。エンジンを起動して、スクリプトを実行したいときにのみ生成され、計算結果が返されるとエンジンが閉じられるようにする簡単な方法はありますか?

  4. Grid Engine は毎回異なるノードでコントローラを起動するように見えるため、IPCLUSTER 構成ファイルの --ruse フラグは役に立ちません。IPCLUSTER を使用するたびに JSON ファイルをコピーする必要があります。これを回避する方法はありますか?

IPython 並列を使用して、SSH 接続を介して明らかに並列ジョブを SGE クラスターに送信するという、この一般的なシナリオの簡単なワークフローを誰かが提供できれば、非常に役に立ちます。エンジン クラッシュの再送信を処理する何らかの方法が必要です。また、シミュレーション中にのみクラスター リソースを使用する方法があると便利です。

4

1 に答える 1

1

これは少し遅れており、実際には特定の質問に答えているわけではありません. ただし、pythongridで試しましたか?

于 2013-08-25T20:59:45.723 に答える