エンジンと同じ LAN 上のコントローラ
単純なケースは、コントローラがエンジンと同じネットワーク (ログイン ノードやその他の作業ノードなど) にあり、エンジンがそれに接続できる場合です。この場合、次の構成が必要になります。
ipcontroller_config.py で、コントローラにすべての IP をリッスンするように指示します (これに対する例外については警告を参照してください)。
c.HubFactory.ip = '*' # see caveat for cases where '*' may not work
ipcluster_config.py で、ipcluster
SGE を使用してエンジンを起動するように指示します。
c.IPClusterEngines.engine_launcher_class = 'SGE'
それはあなたが必要とするすべてです。次に、次のように起動できます。
ipcluster start
またはコントローラーを手動で実行します
ipcontroller
事後にエンジンを起動し、
ipcluster engines -n 32
ssh を使用したクラスター外のコントローラー
より複雑なのは、ネットワークの外部 (ラップトップなど) でコントローラーを起動すると同時に、クラスターでエンジンを起動することです。この理由の 1 つは、SGELauncher がqsub
ローカル コマンドである必要があるためです。これはおそらくラップトップにはありません。このためには、2 セットの構成を使用する必要があります。1 つipcluster
はクラスターに ssh してエンジンを開始するように指示するためのもので、もう 1 つはクラスターに SGE を使用するように指示するためのものです。
ここでは、コントローラー マシンがエンジンから ssh 可能であると仮定します。
コントローラ
コントローラーでは、エンジン SSH サーバーを次のように設定しますipcontroller_config.py
。
c.IPControllerApp.engine_ssh_server = 'mylocalmachineserver'
そして、ssh 経由でローカル呼び出しをクラスターでipcluster
実際に呼び出すように指示します。ipcluster
ipcluster_config.py
c.IPClusterEngines.engine_launcher_class = 'SSHProxy'
c.SSHProxyEngineSetLauncher.hostname = 'cluster-login-host'
集まる
クラスターでは、以下を使用してプロファイルを作成する必要がありますipcluster_config.py
。
c.IPClusterEngines.engine_launcher_class = 'SGE'
そして、それはそれであるべきです。
クラスターの開始
ipcluster start
onでクラスターを起動するとどうなるかmylocalmachineserver
:
- ローカル ipcontroller を開始し、localhost をリッスンし、エンジン接続ファイルに ssh ホストを書き込みます
- に接続ファイルを送信します
cluster-login-host
- にsshし
cluster-login-host
て実行ipcluster engines
- その上
cluster-login-host
でローカル構成を取得し、SGE でエンジンを生成します
- クラスタ上のエンジンは、エンジンの ssh サーバーを認識し、localhost を localhost にトンネリングします。
mylocalmachineserver
- うまくいけば、すべてがうまくいきます!
注意事項
クラスターでは、多数のネットワーク インターフェイスが存在するのが一般的であり、エンジンが接続するために実際に機能するのはそのうちの 1 つだけである場合があります。このような場合は、多くの場合、特定の IP を指定する方が簡単です'*'
。これにより、IPython は接続を試行する際に何らかの推測を行う必要があります。たとえば、それがeth1
ノードが相互に認識できるネットワーク インターフェイスであることがわかっている場合は、IP を使用するのeth1
が最適な場合があります。netifacesは、この種の情報を取得するための便利なライブラリです。
import netifaces
eth0 = netifaces.ifaddresses('eth0')
c.HubFactory.ip = eth0[netifaces.AF_INET][0]['addr']
以下のサブ質問への回答:
c.EngineFactory.ip = '*'
この構成が必要になることはめったになく、決して必要ではありません*
。これは、接続ファイルが正しい情報を提供しない場合に、コントローラーへの接続方法を ipengine に指示するために使用されます。通常、最適な解決策は、エンジン構成で値を設定するのではなく、最初に接続ファイル (ipcontroller config) を正しく取得することです。
新しいエンジン [ipengine で開始] は、キュー システムではなく、現在のノードに作成されます。
IPClusterEngines
config は、でエンジンを起動した場合にのみ影響しますipcluster
。この構成で SGE を使用して 1 つのエンジンを起動する場合は、次のようにします。
ipcluster engines -n 1
ローカルマシンに接続するには、パスワードを含むキーファイルを指定する必要があると思います。
ssh 構成を指定する必要がある場合は、~/.ssh/config
. IPython はコマンドライン ssh を使用してトンネルをセットアップするため、任意の ssh エイリアスなどが機能します。
コントローラー マシンがエンジンと同じネットワーク上にある場合、おそらく SSH を使用する必要はまったくありません。通常、1 つのセットc.HubFactory.ip = '*'
または1 つが ssh トンネルを使用します。これらの両方を使用する唯一の場合は、ハブがエンジンと同じネットワーク上にまったくなく、エンジンがコントローラーと同じネットワーク上のマシンに ssh する必要があり、その後 ssh サーバーがコントローラーに接続する場合です。 LAN IP上。