4

IPython の並列ドキュメントには次のように記載されています。

c = Client(profile='myprofile')

また

c = Client('/path/to/my/ipcontroller-client.json')

ローカル ipengine (IIUC) および

c = Client('/path/to/my/ipcontroller-client.json', sshserver='me@myhub.example.com')

私のipengineが別のサーバーにある場合。

しかし、SSH 経由で接続されたローカル ノードから 8 つの ipengine を管理し、リモート ノードから 8 つの ipengine を管理するために、IPython パラレル コントローラーを使用するにはどうすればよいでしょうか。

それとも、本格的な HDFS、Hadoop などに移行しないと、それは不可能ですか?

私の目標は、負荷分散された方法で一連の計算を送信できる 1 つのクライアント (またはコントローラー?) インターフェイスを持つことです。そこでは、いつどこで何が実行されるかは気にしません。

4

1 に答える 1

3

Client への sshserver arg は、Controller が Client から直接アクセスできない場合にのみ使用します (例: ラップトップの Client、リモート ネットワークのファイアウォールの背後にある Controller)。クライアントは、エンジンがどこにあるかを知る必要も気にする必要もありません。さらに、ssh トンネルは、マシンが相互にアクセスできない場合にのみ必要です。簡単にするために、実際には ssh トンネリングは必要ないと仮定します。

最も単純なケース:

  • host1コントローラー、クライアント、および 5 つのエンジンを実行する場所です。
  • host28 つのエンジンを開始する同じ LAN 上の別の計算マシンです。

設定なし

  1. コントローラを起動し、すべてのインターフェイスをリッスンします (LAN 上の別の場所にあるエンジンが接続できるようにするため)

    [host1] ipcontroller --ip=*
    
  2. (共有ファイルシステムの場合はスキップ) 接続ファイルを host2 に送信します

    [host1] rsync -av $HOME/.ipython/profile_default/security/ host2:.ipython/profile_default/security/
    
  3. host1 でエンジンを始動する

    [host1] ipengine
    # or start multiple engines at once:
    [host1] ipcluster engines -n 5
    
  4. host2 でエンジンを始動する

    [host2] ipengine
    # or start multiple engines at once:
    [host2] ipcluster engines -n 8
    
  5. host1 でクライアントを開きます。

    [host1] ipython
    In[1]: from IPython import parallel
    In[2]: rc = parallel.Client()
    

これで、両方のマシンでエンジンにアクセスできるはずです。

設定あり

これらすべてを構成で表現することもできます。構成ファイルを初期化するには:

[host1] ipython profile create --parallel

内のすべてのインターフェイスでリッスンするように ipcontroller に指示しますipcontroller_config.py

c.HubFactory.ip = '*'

の host1 と host2 の両方で、ssh を使用してエンジンを起動するように ipcluster に指示しますipcluster_config.py

c.IPClusterEngines.engine_launcher_class = 'SSH'
c.SSHEngineSetLauncher.engines = {
    'host1': 5,
    'host2': 8,
}

ipclusterすべてを次のように開始します。

[host1] ipcluster start

SSH ランチャーは、リモート エンジンへの接続ファイルのコピーを処理します。

ssh トンネリングが必要な場合は、指定できます

c.IPControllerApp.ssh_server = u'host1'

ipcontroller_config.py。IPython は、エンジンまたはクライアントが で実行されているかどうかを判断しhost1、不要な場合はトンネリングをスキップできる必要があります。それがわからない場合は、sshサーバーを使用する場所を手動で指定して構成から除外するか、構成に入れ、sshサーバーを使用しないように手動で指定することができます。 .

于 2015-01-15T21:19:27.590 に答える