Использование экземпляров распределенных вычислений с параллельным плагином Icthon Starcluster

Я использую звездный кластер с плагином Ipython. Когда я запускаю кластеризацию Kmeans из ноутбука Ipython с режимом балансировки нагрузки. Это всегда мастер со 100% использованием процессора постоянно. И другие экземпляры EC2 никогда не принимают нагрузку.

Я пытался с большими наборами данных и 20 узлов. Результат такой же, как все нагрузки на мастер. Я пробовал прямой просмотр с node001, но даже тогда мастер имеет всю нагрузку.

Я настраиваю что-то неправильно? Нужно ли в конфигурации отключить "Отключить очередь"? Как я могу распределить нагрузку на все экземпляры.

Я не могу опубликовать изображение, потому что я начинающий в stackru. Вот htop для мастера и node001

Ссылка на изображение: https://drive.google.com/file/d/0BzfdmaY9JuagT0lmX29xY1RiUmM/view?usp=sharing

Любая помощь будет высоко оценен.

С уважением, Tej.

Файл моего шаблона:

[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

Код:

from IPython import parallel
clients = parallel.Client()
rc = clients.load_balanced_view()

def clustering(X_digits):
from sklearn.cluster import KMeans
kmeans = KMeans(20)
mu_digits = kmeans.fit(X_digits).cluster_centers_
return mu_digits

rc.block = True
rc.apply(clustering, X_digits)

1 ответ

Я только что узнал о starcluster/ipython, но этот гист, похоже, сочетается с комментарием @thomas-k, а именно вам нужно структурировать свой код, чтобы его можно было передавать на карту с балансировкой нагрузки:

https://gist.github.com/pprett/3989337

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)
Другие вопросы по тегам