2016-03-20 18 views
0

Dies ist eine Fortsetzung des Threads ipython-with-mpi-clustering-using-machinefile. Es ist etwas konzentrierter und hoffentlich klarer, was das Problem sein könnte.Zugreifen auf mehrere Knoten in einem mpi-Cluster mithilfe von ipython

Ich habe 3-Knoten als Cluster mit mpich/mpi4py, eine Maschinendatei und alle Bibliotheken in einem virtualenv, alle auf einer NFS-Freigabe. Mein Ziel ist es, ipython/ipyparallel zu verwenden, um Jobs auf mehrere Knoten zu verteilen, auf denen jeweils mehrere ipython-Engines laufen.

Ich bin in der Lage ipcluster start --profile=mpi -n 4 auf einem Knoten (in diesem Fall worker2) und durch einen anderen Knoten (in diesem Fall worker1) laufen ipython --profile=mpi und die Liste der laufenden Motoren auf die Lauf mithilfe der folgenden Befehle auszuführen:

import ipyparallel as ipp 

client = ipp.Client() 
dview = client[:] 

with dview.sync_imports(): 
    import socket 

@dview.remote(block=True) 
def engine_hostname(): 
    return socket.gethostname() 

results = engine_hostname() 
for r in results: 
    print r 

Wie erwartet, erhalte ich 4 Instanzen des Hostnamen des Host gedruckt, die Motoren laufen:

In [7]: for r in results: 
     print r 
    ...: 
worker2 
worker2 
worker2 
worker2 

wenn ich jedoch auf einem anderen Knoten starten ipcluster (in diesem Fall.210), dann ist das der einzige Motor/Knoten bis zu zeigen, wenn ich sich frage, wie oben ausgeführt, auch wenn der erste Satz von Motoren nach wie vor auf dem anderen Knoten ausgeführt werden:

In [7]: for r in results: 
      print r 
     ...: 
    head 
    head 
    head 
    head 

Meine Frage ist, wie kann Ich erhalte ipython, um alle Engines auf allen laufenden Knoten zu sehen; um die Last tatsächlich über die verschiedenen Knoten zu verteilen.

Lauf mpi auf seine eigenen Werke in Ordnung (Kopf, worker1 und worker2 sind die jeweiligen Knoten sin der Cluster):

(venv)[email protected]:~/development/mpi$ mpiexec -f machinefile -n 10 ipython test.py 
head[21506]: 0/10 
worker1[7809]: 1/10 
head[21507]: 3/10 
worker2[8683]: 2/10 
head[21509]: 9/10 
worker2[8685]: 8/10 
head[21508]: 6/10 
worker1[7811]: 7/10 
worker2[8684]: 5/10 
worker1[7810]: 4/10 

Also zumindest ich weiß, das ist nicht das Problem.

Antwort

0

Gelöst. Ich habe meine ipcluster_config.py-Datei neu erstellt und c.MPILauncher.mpi_args = ["-machinefile", "path_to_file/machinefile"] hinzugefügt und dieses Mal hat es funktioniert - aus irgendeinem seltsamen Grund. Ich könnte schwören, dass ich das vorher drin hatte, aber leider ...