如何正确实例化包含本地和远程机器的IPython集群

3 投票
1 回答
838 浏览
提问于 2025-04-18 10:04

我在为IPython创建集群时遇到了很大的问题。我觉得文档写得有点复杂。

我的系统由以下几个部分组成:

  1. 本地电脑,使用Ubuntu 12.04 x86_64,IPython 2.1,8核处理器
  2. 远程电脑,使用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']

撰写回答