我创建了一个由host0
到host47
组成的48节点群集(所有节点都是g2.2xlarge
具有无 NFS的Amazon EC2实例。
根据{{3}},我在host0
创建了一个控制器,在host1
到host47
创建了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=False
和view.wait()
,则不会更改。使用view.execute("import time; import numpy; import keras.models ...")
也无济于事。我知道加载keras
模块有点慢,但在我的本地机器上它通常在不到1分钟内完成。我尝试了pickle
和json
(联合国)打包。
我应该提一下,当我使用相同的集群进行另一次计算时,模块的加载工作正常。我想加载的模块是在缓存的某个地方。但是当我终止实例,创建新实例并配置新的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
直方图。
我刚刚开始使用python,我不知道这里可能出现什么问题。似乎完成时间和提交时间之间的最大时间差异随着簇大小而增加。 任何可能出现问题的指示都非常受欢迎。
顺便说一句:我使用的是Python 2.7.6和Ipyparallel 5.1.1
答案 0 :(得分:0)
我现在最好的猜测是问题是由EBS卷的初始化引起的 - 有时可能会有点慢。 集群实例始终从映像启动,并在计算完成后立即终止。从快照创建的EBS卷必须从S3获取其数据。请参阅AWS EBS documentation
新的EBS卷在他们的时刻获得最大的性能 是可用的,不需要初始化(以前称为 预变暖)。但是,已还原的卷上的存储块 必须初始化来自快照的内容(从Amazon S3和 写入卷之前,您可以访问该块。这个 初步行动需要时间,并可能导致显着增加 第一次访问每个块时I / O操作的延迟。 对于大多数应用程序,在该生命周期内摊销此成本 音量可以接受。数据后,性能将恢复 访问过一次。