集群上的Ipyparallel模块负载非常慢

时间:2016-08-25 14:10:46

标签: python amazon-ec2 theano keras ipython-parallel

我创建了一个由host0host47组成的48节点群集(所有节点都是g2.2xlarge具有 NFS的Amazon EC2实例。 根据{{​​3}},我在host0创建了一个控制器,在host1host47创建了47个引擎。我已经从https://ipyparallel.readthedocs.io/en/latest/process.html项目复制了ssh ipyparallel集群的大部分配置(但是,正如我所说,没有NFS)。 群集工作并且似乎产生正确的结果,但加载模块有时需要很长时间。 例如,

import ipyparallel as ipp
client = ipp.Client('/path/to/ipcontroller-client.json',sshkey='mykey')
view = client[:]
view.block=True

with view.sync_imports():
    import time
    import numpy
    from keras.models import Sequential
    from keras.layers import Dense, Dropout
    from keras.regularizers import l1
    from keras.optimizers import SGD
    from subprocess import check_output

需要超过30分钟才能完成。如果我更改为block=Falseview.wait(),则不会更改。使用view.execute("import time; import numpy; import keras.models ...")也无济于事。我知道加载keras模块有点慢,但在我的本地机器上它通常在不到1分钟内完成。我尝试了picklejson(联合国)打包。 我应该提一下,当我使用相同的集群进行另一次计算时,模块的加载工作正常。我想加载的模块是在缓存的某个地方。但是当我终止实例,创建新实例并配置新的ipyparallel集群时,我在模块加载方面遇到了同样的问题。

查看ipcontroller日志,我发现大多数请求都对应sync_imports

2016-08-25 12:12:02.310 [IPControllerApp] queue::client '\x00"_\x0b\x0b'
submitted request '46244cf0-ad0a-4748-a84c-8d3d69d8252c' to 0

在几分钟内完成。但是,其中一些需要大约30分钟。请参阅以下从complete_time - submit_time日志派生的ipcontroller直方图。

StarCluster

我刚刚开始使用python,我不知道这里可能出现什么问题。似乎完成时间和提交时间之间的最大时间差异随着簇大小而增加。 任何可能出现问题的指示都非常受欢迎。

顺便说一句:我使用的是Python 2.7.6和Ipyparallel 5.1.1

1 个答案:

答案 0 :(得分:0)

我现在最好的猜测是问题是由EBS卷的初始化引起的 - 有时可能会有点慢。 集群实例始终从映像启动,并在计算完成后立即终止。从快照创建的EBS卷必须从S3获取其数据。请参阅AWS EBS documentation

  

新的EBS卷在他们的时刻获得最大的性能   是可用的,不需要初始化(以前称为   预变暖)。但是,已还原的卷上的存储块   必须初始化来自快照的内容(从Amazon S3和   写入卷之前,您可以访问该块。这个   初步行动需要时间,并可能导致显着增加   第一次访问每个块时I / O操作的延迟。   对于大多数应用程序,在该生命周期内摊销此成本   音量可以接受。数据后,性能将恢复   访问过一次。