2016-07-21 1 views
0

В настоящее время я пытаюсь настроить удаленный кластер на группе серверов, которыми я владею, используя библиотеку ipyparallel. Я подумал, что если я поделюсь $ IPYTHONDIR между всеми ipcontrollers, ipengines и ноутбуком, что все будет просто подключаться и работать, но это не относится к моей текущей настройке.IPython Notebook с удаленным ipyparallel контроллером

Что я пытаюсь сделать так, что ipcontroller и ipengines сидят на моем кластере, ожидая, когда ноутбук jupyter подключится к контроллеру и будет использовать его для своих кластерных вычислительных ресурсов.

В настоящее время я не могу подключить свой ноутбук к контроллеру, хотя все порты открыты, серверы доступны напрямую, а IPYTHONDIR является общим.

Когда я открываю свой ноутбук и перехожу на вкладку кластеров, я вижу свой параллельный профиль, но он не запускается. Что странно, потому что ipcontroller и ipengines уже запущены и ждут подключения от ноутбука.

Это сводится к:

  • Можно ли работать ноутбук на другом сервере, чем ipcontroller?
  • Если это возможно, почему я не могу подключить ноутбук к кластеру, и вместо этого, когда я нажимаю кнопку «Пуск» в профиле, он просто создает локальный кластер.

Спасибо!

ответ

0

Да, это возможно, если ядро ​​для ноутбука работает на том же сервере, что и ipcontroller. Сам ноутбук можно отобразить из любого браузера. Я регулярно использую эту функцию.

То, как я это сделал, это иметь профиль ipython, доступный на сервере. В моем случае это сервер Windows, а профили настроены под c:\users\<user>\.ipython\. В этом случае папка профиля называется profile_my32bitcluster и когда я создаю клиент, я указать профиль для использования:

from ipyparallel import Client 

rc = Client(profile='my32bitcluster') 
dview = rc[:] 

# Test it by pushing out a dataframe across some engines, modifying it 
# and returning the modified dataframes... 
df = pd.DataFrame(data={'x':[1,2,3,4,5], 'y':[1,4,9,16,25]}) 

dview.push({'df':df}) 

def myfunc(x): 
    import sys 
    import os 
    import pandas as pd 
    global df 
    df['z'] = df['x'] * x 
    return df 

results = dview.map_sync(myfunc, [2,3,4]) 

Я надеюсь, что помогает.