Client への sshserver arg は、Controller が Client から直接アクセスできない場合にのみ使用します (例: ラップトップの Client、リモート ネットワークのファイアウォールの背後にある Controller)。クライアントは、エンジンがどこにあるかを知る必要も気にする必要もありません。さらに、ssh トンネルは、マシンが相互にアクセスできない場合にのみ必要です。簡単にするために、実際には ssh トンネリングは必要ないと仮定します。
最も単純なケース:
host1
コントローラー、クライアント、および 5 つのエンジンを実行する場所です。
host2
8 つのエンジンを開始する同じ LAN 上の別の計算マシンです。
設定なし
コントローラを起動し、すべてのインターフェイスをリッスンします (LAN 上の別の場所にあるエンジンが接続できるようにするため)
[host1] ipcontroller --ip=*
(共有ファイルシステムの場合はスキップ) 接続ファイルを host2 に送信します
[host1] rsync -av $HOME/.ipython/profile_default/security/ host2:.ipython/profile_default/security/
host1 でエンジンを始動する
[host1] ipengine
# or start multiple engines at once:
[host1] ipcluster engines -n 5
host2 でエンジンを始動する
[host2] ipengine
# or start multiple engines at once:
[host2] ipcluster engines -n 8
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サーバーを使用しないように手動で指定することができます。 .