1

Я использую starcluster с плагином Ipython. Когда я запускаю кластер Kmeans из ноутбука Ipython с режимом баланса нагрузки. Его всегда Мастер с 100% -ным использованием ЦП постоянно. И другие экземпляры EC2 никогда не принимают нагрузку.Использование распределенного вычислительного экземпляра с помощью плагина Starcluster Ipython parallel

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

Я устанавливаю любую вещь неправильно. Нужно ли отключать Queue true в config ?. Как я могу распределить нагрузку на все экземпляры.

Я не могу опубликовать изображение, потому что я стартер в stackoverflow. Вот 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) 
+0

Если мое понимание верное, один вызов 'apply()' создает только одно задание, поэтому он может работать только на одном движке. Обычно вы используете 'map()' для отправки заданий нескольким движкам, но вам нужно создать свой код, чтобы было более одного задания. –

ответ

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)