2016-02-27 3 views
0

Я успешно настроил МПИ с mpi4py поддержки через три узла, согласно тестированию сценария hellowworld.py в mpi4py демонстрационном каталоге:IPython с MPI кластеризация с использованием machinefile

[email protected]:~/development/mpi$ mpiexec -f machinefile -n 10 python ~/development/mpi4py/demo/helloworld.py

Hello, World! I am process 3 of 10 on host. 
Hello, World! I am process 1 of 10 on worker1. 
Hello, World! I am process 6 of 10 on host. 
Hello, World! I am process 2 of 10 on worker2. 
Hello, World! I am process 4 of 10 on worker1. 
Hello, World! I am process 9 of 10 on host. 
Hello, World! I am process 5 of 10 on worker2. 
Hello, World! I am process 7 of 10 on worker1. 
Hello, World! I am process 8 of 10 on worker2. 
Hello, World! I am process 0 of 10 on host. 

Я сейчас пытается получить эту работу в IPython и добавил мой machinefile к моему $ IPYTHON_DIR/profile_mpi/ipcluster_config.py файл следующим образом:

c.MPILauncher.mpi_args = ["-machinefile", "/home/gms/development/mpi/machinefile"] 

Затем я запустил iPython ноутбук на своем головном узле, используя команду: ipython notebook --profile=mpi --ip=* --port=9999 --no-browser &

и, voila, я могу получить к нему доступ только с другого устройства в своей локальной сети. Однако, когда я бег helloworld.py от IPython ноутбука, я только получить ответ от головного узла: Hello, World! I am process 0 of 10 on host.

Я начал МПИ от IPython с 10 двигателей, но ...

Я также настрою эти параметры, только в случае, если

в $ IPYTHON_DIR/profile_mpi/ipcluster_config.py

c.IPClusterEngines.engine_launcher_class = 'MPIEngineSetLauncher' 

в $ IPYTHON_DIR/profile_mpi/ipengine_config.py

c.MPI.use = 'mpi4py' 

в $ IPYTHON_DIR/profile_mpi/ipcontroller_config.py

c.HubFactory.ip = '*' 

Однако это не помогло, либо.

Что мне недостает, чтобы нормально работать?

EDIT UPDATE 1

теперь у меня есть NFS установлены каталоги на своих рабочих узлов, и, таким образом, я выполняя требование «В настоящее время ipcluster требует, чтобы каталог/profile_/безопасность IPYTHONDIR живут на общей файловой системе, которая видимых как контроллером, так и двигателями ». чтобы использовать ipcluster, чтобы запустить мой контроллер и двигатели, используя команду ipcluster start --profile=mpi -n 6 &.

Итак, я выполняю это на моей голове узел, а затем получить:

2016-03-04 20:31:26.280 [IPClusterStart] Starting ipcluster with [daemon=False] 2016-03-04 20:31:26.283 [IPClusterStart] Creating pid file: /home/gms/.config/ipython/profile_mpi/pid/ipcluster.pid 2016-03-04 20:31:26.284 [IPClusterStart] Starting Controller with LocalControllerLauncher 2016-03-04 20:31:27.282 [IPClusterStart] Starting 6 Engines with MPIEngineSetLauncher 2016-03-04 20:31:57.301 [IPClusterStart] Engines appear to have started successfully

Затем перейдите выдать ту же команду для запуска двигателей на других узлах, но я получаю:

2016-03-04 20:31:33.092 [IPClusterStart] Removing pid file: /home/gms/.config/ipython/profile_mpi/pid/ipcluster.pid 2016-03-04 20:31:33.095 [IPClusterStart] Starting ipcluster with [daemon=False] 2016-03-04 20:31:33.100 [IPClusterStart] Creating pid file: /home/gms/.config/ipython/profile_mpi/pid/ipcluster.pid 2016-03-04 20:31:33.111 [IPClusterStart] Starting Controller with LocalControllerLauncher 2016-03-04 20:31:34.098 [IPClusterStart] Starting 6 Engines with MPIEngineSetLauncher [1]+ Stopped ipcluster start --profile=mpi -n 6

без подтверждения, что Engines appear to have started successfully ...

еще гр onfusing, когда я делаю ps au на рабочих узлах, я получаю:

gms  3862 0.1 2.5 38684 23740 pts/0 T 20:31 0:01 /usr/bin/python /usr/bin/ipcluster start --profile=mpi -n 6 
gms  3874 0.1 1.7 21428 16772 pts/0 T 20:31 0:01 /usr/bin/python -c from IPython.parallel.apps.ipcontrollerapp import launch_new_instance; launch_new_instance() --profile-dir /home/gms/.co 
gms  3875 0.0 0.2 4768 2288 pts/0 T 20:31 0:00 mpiexec -n 6 -machinefile /home/gms/development/mpi/machinefile /usr/bin/python -c from IPython.parallel.apps.ipengineapp import launch_new 
gms  3876 0.0 0.4 5732 4132 pts/0 T 20:31 0:00 /usr/bin/ssh -x 192.168.1.1 "/usr/bin/hydra_pmi_proxy" --control-port 192.168.1.200:36753 --rmk user --launcher ssh --demux poll --pgid 0 - 
gms  3877 0.0 0.1 4816 1204 pts/0 T 20:31 0:00 /usr/bin/hydra_pmi_proxy --control-port 192.168.1.200:36753 --rmk user --launcher ssh --demux poll --pgid 0 --retries 10 --proxy-id 1 
gms  3878 0.0 0.4 5732 4028 pts/0 T 20:31 0:00 /usr/bin/ssh -x 192.168.1.201 "/usr/bin/hydra_pmi_proxy" --control-port 192.168.1.200:36753 --rmk user --launcher ssh --demux poll --pgid 0 
gms  3879 0.0 0.6 8944 6008 pts/0 T 20:31 0:00 /usr/bin/python -c from IPython.parallel.apps.ipengineapp import launch_new_instance; launch_new_instance() --profile-dir /home/gms/.config 
gms  3880 0.0 0.6 8944 6108 pts/0 T 20:31 0:00 /usr/bin/python -c from IPython.parallel.apps.ipengineapp import launch_new_instance; launch_new_instance() --profile-dir /home/gms/.config 

Где IP-адреса в процессах 3376 и 3378 являются от других хостов в кластере. Но...

Когда я бегу подобное испытание непосредственно с помощью IPython, все это я получаю ответ от локального сервера (даже если, минус, IPython, это работает непосредственно с MPI и mpi4py, как указано в моей должности):

[email protected]:~/development/mpi$ ipython test.py 
head[3834]: 0/1 

[email protected]:~/development/mpi$ mpiexec -f machinefile -n 10 ipython test.py 
worker1[3961]: 4/10 
worker1[3962]: 7/10 
head[3946]: 6/10 
head[3944]: 0/10 
worker2[4054]: 5/10 
worker2[4055]: 8/10 
head[3947]: 9/10 
worker1[3960]: 1/10 
worker2[4053]: 2/10 
head[3945]: 3/10 

Кажется, что мне все еще не хватает чего-то очевидного, хотя я убежден, что моя конфигурация теперь правильная. Одна вещь, которая выскакивает, когда я начинаю ipcluster на моих рабочих узлов, я получаю это:

EDIT UPDATE 2

Это больше документировать то, что происходит, и, надеюсь, в конце концов, что получает это работая:

Я очистил мои файлы журналов и переиздан ipcluster start --profile=mpi -n 6 &

и теперь видим 6-лог-файлы для своих двигателей, и 1 для моего контроллера:

drwxr-xr-x 2 gms gms 12288 Mar 6 03:28 . 
drwxr-xr-x 7 gms gms 4096 Mar 6 03:31 .. 
-rw-r--r-- 1 gms gms 1313 Mar 6 03:28 ipcontroller-15664.log 
-rw-r--r-- 1 gms gms 598 Mar 6 03:28 ipengine-15669.log 
-rw-r--r-- 1 gms gms 598 Mar 6 03:28 ipengine-15670.log 
-rw-r--r-- 1 gms gms 499 Mar 6 03:28 ipengine-4405.log 
-rw-r--r-- 1 gms gms 499 Mar 6 03:28 ipengine-4406.log 
-rw-r--r-- 1 gms gms 499 Mar 6 03:28 ipengine-4628.log 
-rw-r--r-- 1 gms gms 499 Mar 6 03:28 ipengine-4629.log 

Глядя в журнале для ipcontroller он выглядит как зарегистрирован только один двигатель:

2016-03-06 03:28:12.469 [IPControllerApp] Hub listening on tcp://*:34540 for registration. 
2016-03-06 03:28:12.480 [IPControllerApp] Hub using DB backend: 'NoDB' 
2016-03-06 03:28:12.749 [IPControllerApp] hub::created hub 
2016-03-06 03:28:12.751 [IPControllerApp] writing connection info to /home/gms/.config/ipython/profile_mpi/security/ipcontroller-client.json 
2016-03-06 03:28:12.754 [IPControllerApp] writing connection info to /home/gms/.config/ipython/profile_mpi/security/ipcontroller-engine.json 
2016-03-06 03:28:12.758 [IPControllerApp] task::using Python leastload Task scheduler 
2016-03-06 03:28:12.760 [IPControllerApp] Heartmonitor started 
2016-03-06 03:28:12.808 [IPControllerApp] Creating pid file: /home/gms/.config/ipython/profile_mpi/pid/ipcontroller.pid 
2016-03-06 03:28:14.792 [IPControllerApp] client::client 'a8441250-d3d7-4a0b-8210-dae327665450' requested 'registration_request' 
2016-03-06 03:28:14.800 [IPControllerApp] client::client '12fd0bcc-24e9-4ad0-8154-fcf1c7a0e295' requested 'registration_request' 
2016-03-06 03:28:18.764 [IPControllerApp] registration::finished registering engine 1:'12fd0bcc-24e9-4ad0-8154-fcf1c7a0e295' 
2016-03-06 03:28:18.768 [IPControllerApp] engine::Engine Connected: 1 
2016-03-06 03:28:20.800 [IPControllerApp] registration::purging stalled registration: 0 

не должен каждый из 6 двигателей регистрироваться?

2 бревен двигателя выглядят как они зарегистрированы в порядке:

2016-03-06 03:28:13.746 [IPEngineApp] Initializing MPI: 
2016-03-06 03:28:13.746 [IPEngineApp] from mpi4py import MPI as mpi 
mpi.size = mpi.COMM_WORLD.Get_size() 
mpi.rank = mpi.COMM_WORLD.Get_rank() 

2016-03-06 03:28:14.735 [IPEngineApp] Loading url_file  u'/home/gms/.config/ipython/profile_mpi/security/ipcontroller-engine.json' 
2016-03-06 03:28:14.780 [IPEngineApp] Registering with controller at tcp://127.0.0.1:34540 
2016-03-06 03:28:15.282 [IPEngineApp] Using existing profile dir:  
u'/home/gms/.config/ipython/profile_mpi' 
2016-03-06 03:28:15.286 [IPEngineApp] Completed registration with id 1 

в то время как другой зарегистрирован id 0

Но, остальные 4 двигателя дали тайм-аут ошибки:

2016-03-06 03:28:14.676 [IPEngineApp] Initializing MPI: 
2016-03-06 03:28:14.689 [IPEngineApp] from mpi4py import MPI as mpi 
mpi.size = mpi.COMM_WORLD.Get_size() 
mpi.rank = mpi.COMM_WORLD.Get_rank() 

2016-03-06 03:28:14.733 [IPEngineApp] Loading url_file u'/home/gms/.config/ipython/profile_mpi/security/ipcontroller-engine.json' 
2016-03-06 03:28:14.805 [IPEngineApp] Registering with controller at tcp://127.0.0.1:34540 
2016-03-06 03:28:16.807 [IPEngineApp] Registration timed out after 2.0 seconds 

Хммм ... Думаю, я могу попробовать переустановить ipython завтра.

EDIT UPDATE 3

Противоречивые версии IPython были установлены (выглядит как через APT-получить и ПУМ). Удаление и повторная установка с использованием pip install ipython[all] ...

EDIT UPDATE 4

Я надеюсь, что кто-то находит это полезным и я надеюсь, что кто-то может весить в какой-то момент, чтобы помочь прояснить несколько вещей.

Anywho, я установил virtualenv, чтобы разобраться в изоляции среды, и это похоже на некоторый успех, я думаю. Я активировал «ipcluster start -n 4 --profile = mpi» на каждом из моих узлов, затем ssh'ed обратно в мой головной узел и запускал тестовый скрипт, который сначала вызывает ipcluster. Следующий вывод: signs of parallelism Итак, он выполняет некоторые параллельные вычисления.

Однако, когда я запускаю мой тестовый скрипт, который запрашивает все узлы, я просто получить головной узел:

no parallelism here

Но, опять же, если я просто запустить прямо mpiexec команду, все hunky dory.

Чтобы добавить к путанице, если я смотрю на процессы на узлах, я вижу, все виды поведения, чтобы указать, что они работают вместе: monitor of processes

И ничего необычного в моих журналах. Почему я не получаю узлы возвращаются в мой второй тестовый скрипт (код включен здесь :):

# test_mpi.py 
import os 
import socket 
from mpi4py import MPI 

MPI = MPI.COMM_WORLD 

print("{host}[{pid}]: {rank}/{size}".format(
    host=socket.gethostname(), 
    pid=os.getpid(), 
    rank=MPI.rank, 
    size=MPI.size, 
)) 
+0

Ноутбук автоматически не запускает какие-либо параллельные вычислительные машины, и если вы не используете ipcluster, то конфигурационный файл 'ipcluster_config.py', вероятно, ничего не делая. –

+0

Да, я понял это после дальнейшего изучения проблемы ... Мне нужно установить NFS на своих хостах и ​​заставить работать ipcluster. Кажется, это наименее безболезненный путь. –

ответ

0

Не знаю, почему, но я воссоздал мой ipcluster_config.py файл и снова добавил c.MPILauncher.mpi_args = [ "- машинный файл "," path_to_file/машинный файл "], и на этот раз это сработало - по какой-то причудливой причине. Я мог бы поклясться, что у меня было это в нем раньше, но, увы ...

 Смежные вопросы

  • Нет связанных вопросов^_^