如何正确实例化包含本地和远程机器的IPython集群
我在为IPython创建集群时遇到了很大的问题。我觉得文档写得有点复杂。
我的系统由以下几个部分组成:
- 本地电脑,使用Ubuntu 12.04 x86_64,IPython 2.1,8核处理器
- 远程电脑,使用Ubuntu 12.04 x86_64,IPython 2.1,16核处理器,可以通过无密码SSH从本地电脑访问。
我可以通过ssh linello@myserveripaddress
无需密码访问远程服务器。我觉得这种情况对很多进行科学计算的人来说是比较常见的。
我想创建一个IPython笔记本,使用8个本地引擎和16个远程引擎(总共24个引擎),来进行一些非常适合并行计算的任务。
如果我用 ipcluster start
启动我的IPython集群,然后再启动一个IPython实例,在那里我实例化 Client
类,我只会得到8个本地客户端。
In[1]: from IPython import parallel
In[2]: clients = parallel.Client()
In[3]: print clients.ids
Out[3]: [0,1,2,3,4,5,6,7]
这意味着只启动了本地引擎。所以我修改了我的 ipcluster_config.py
脚本,改成了如下内容:
c = get_config()
c.IPClusterEngines.engine_launcher_class = 'SSH'
c.LocalControllerLauncher.controller_args = ["--ip='myserverip'"]
c.SSHEngineSetLauncher.engines = {
'localhost': 4,
'tyler': 4,
'par': 4,
}
c.SSHEngineSetLauncher.engine_cmd = ['/ipengine']
其中 myserverip
实际上是我的服务器IP 192.168.xxx.yyy
我真的不知道该如何正确配置我的IPython配置文件,以便在我的IPython内核中拥有24个引擎。
1 个回答
0
我一开始也觉得这个很 confusing,至今还有点不太明白,但我觉得我现在有一个跟你类似的案例可以参考。
看起来唯一缺少的就是告诉引擎控制器在哪里。ipcluster 配置里有一个选项,看起来像这样:
c.SSHEngineLauncher.engine_args = ['--location=xxx.xxx.xxx.xxx']
这里的 xxx.xxx.xxx.xxx 是运行控制器的机器的 IP 地址。我觉得这可能就是你配置的问题所在。
我通常会通过命令行运行 ipcluster 来测试这种情况,通常会很明确地指出问题所在。希望这能帮到你。
另外,我通常不需要指定:
c.SSHEngineSetLauncher.engine_cmd = ['/ipengine']