与引擎在同一 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
更复杂的是在网络之外启动控制器(例如在您的笔记本电脑上),同时在集群上启动引擎。原因之一是 SGELauncher 需要qsub
是本地命令,它可能不在您的笔记本电脑上。为此,您需要使用两组配置 - 一组用于告诉ipcluster
集群 ssh 并启动引擎,另一组在集群上告诉它使用 SGE。
对于这一点,我将假设控制器机器可以通过引擎进行 ssh。
控制器
在控制器上,您需要将引擎 SSH 服务器设置为ipcontroller_config.py
:
c.IPControllerApp.engine_ssh_server = 'mylocalmachineserver'
并告诉本地调用通过 ssh inipcluster
实际调用集群: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
- 希望一切正常!
注意事项
在集群上,通常有大量的网络接口,有时只有其中一个实际上可以用于引擎连接。如果是这种情况,指定一个特定的 IP 通常比指定 IP 更容易'*'
,这会迫使 IPython 在尝试建立连接时进行一些猜测。例如,如果您知道这eth1
是您的节点可以看到彼此的网络接口,那么使用 IPeth1
可能是最好的。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 的引擎,你可以这样做:
ipcluster engines -n 1
我想我还需要指定一个带有密码的密钥文件才能连接到我的本地机器。
如果你需要指定 ssh 配置,你可以在你的~/.ssh/config
. IPython 使用命令行 ssh 来设置隧道,因此任何 ssh 别名等都可以使用。
如果您的控制器机器与引擎在同一个网络上,您可能根本不需要使用 SSH。通常,一组c.HubFactory.ip = '*'
或一组使用 ssh 隧道。唯一同时使用这两种方法的情况是集线器与引擎根本不在同一网络上,并且引擎必须通过 ssh 连接到与控制器在同一网络上的机器,然后 ssh 服务器连接到控制器在局域网 IP 上。