根据 this 回答,在使用ipycluster运行的集群上使用scikit-learn并行特性非常简单。
但是,我的示例仅在起始节点上运行。我使用anaconda分发的ipython,skit-learn和ipyparallel,更新到最新版本。
from sklearn.externals.joblib import Parallel, parallel_backend, register_parallel_backend
from ipyparallel import Client
from ipyparallel.joblib import IPythonParallelBackend
from sklearn.cluster import MeanShift
c = Client(profile='mpi')
print(c.ids)
bview = c.load_balanced_view()
register_parallel_backend('ipyparallel', lambda : IPythonParallelBackend(view=bview))
xyz=loaddata()
ms = MeanShift()
with parallel_backend('ipyparallel'):
ms.fit(X)
我用这个命令运行一个集群:
ipcluster start --profile=mpi -n 17 --log-level DEBUG --delay 5
此示例并行运行 ,但仅在启动它的节点上运行(htop表示完整处理器利用率)。 Ipycluster日志表示存在客户端连接,但没有任何任务被提交给任何节点。 对此群集的基本测试表明它正常运行,并且ipyparallel本身按预期工作。
任何想法,为什么这个例子不会分布在所有节点上?