Scikit learn starcluster Ipython并行插件的分布式计算实例使用

Scikit learn starcluster Ipython并行插件的分布式计算实例使用,scikit-learn,jupyter-notebook,ipython,ipython-parallel,starcluster,Scikit Learn,Jupyter Notebook,Ipython,Ipython Parallel,Starcluster,我正在使用带有Ipython插件的starcluster。当我使用负载平衡模式从Ipython笔记本运行Kmeans群集时。它始终是100%CPU使用率的主机。而其他EC2实例从不承担此负载 我尝试使用大型数据集和20个节点。所有负载都在主机上时,结果相同。我试着用node001直接查看,但即使这样,主控器还是有所有的负载 我配置有什么问题吗。我是否需要在配置中使禁用队列为true?如何在所有实例上分配负载 模板文件 代码 从IPython并行导入 clients=parallel.Clien

我正在使用带有Ipython插件的starcluster。当我使用负载平衡模式从Ipython笔记本运行Kmeans群集时。它始终是100%CPU使用率的主机。而其他EC2实例从不承担此负载

我尝试使用大型数据集和20个节点。所有负载都在主机上时,结果相同。我试着用node001直接查看,但即使这样,主控器还是有所有的负载

我配置有什么问题吗。我是否需要在配置中使禁用队列为true?如何在所有实例上分配负载

模板文件

代码

从IPython并行导入
clients=parallel.Client()
rc=客户端。加载\平衡\视图()
def群集(X_位数):
从sklearn.cluster导入KMeans
kmeans=kmeans(20)
mu_位数=kmeans.fit(X_位数)。群集中心_
返回mu_位
rc.block=True
rc.apply(聚类,X_数字)

我自己刚刚了解了starcluster/ipython,但这一要点似乎与@thomas-k的评论相矛盾,即您需要构建代码,以便能够传递到负载平衡映射:


如果我的理解是正确的,那么对
apply()
的单个调用只会创建一个作业,因此它只能在一个引擎上运行。您通常使用
map()
将作业提交给多个引擎,但您需要设计代码,以便有多个作业要做。
[cluster iptemplate]
KEYNAME = ********
CLUSTER_SIZE = 2
CLUSTER_USER = ipuser
CLUSTER_SHELL = bash
REGION = us-west-2

NODE_IMAGE_ID = ami-04bedf34
NODE_INSTANCE_TYPE = m3.medium
#DISABLE_QUEUE = True
PLUGINS = pypackages,ipcluster

[plugin ipcluster]
SETUP_CLASS = starcluster.plugins.ipcluster.IPCluster
ENABLE_NOTEBOOK = True
NOTEBOOK_PASSWD = *****

[plugin ipclusterstop]
SETUP_CLASS = starcluster.plugins.ipcluster.IPClusterStop

[plugin ipclusterrestart]
SETUP_CLASS = starcluster.plugins.ipcluster.IPClusterRestartEngines

[plugin pypackages]
setup_class = starcluster.plugins.pypkginstaller.PyPkgInstaller
packages = scikit-learn, psutil, scikit-image, numpy, pyzmq

[plugin opencvinstaller]
setup_class = ubuntu.PackageInstaller
pkg_to_install = cmake

[plugin pkginstaller]
SETUP_CLASS = starcluster.plugins.pkginstaller.PackageInstaller
# list of apt-get installable packages
PACKAGES =  python-mysqldb
cv = KFold(X.shape[0], K, shuffle=True, random_state=0)

# instantiate the tasks - K times the number of grid cells
# FIXME use generator to limit memory consumption or do fancy
# indexing in _parallel_grid_search.
tasks = [(i, k, estimator, params, X[train], y[train], X[test], y[test])
         for i, params in enumerate(grid) for k, (train, test)
         in enumerate(cv)]

# distribute tasks on ipcluster
rc = parallel.Client()
lview = rc.load_balanced_view()
results = lview.map(_parallel_grid_search, tasks)