2016-03-20 1 views
0

Ceci est la suite du thread ipython-with-mpi-clustering-using-machinefile. Il est légèrement plus ciblé et, espérons-le, plus clair quant à la nature du problème.Accès à plusieurs nœuds dans un cluster mpi en utilisant ipython

J'ai 3 nœuds fonctionnant en cluster en utilisant mpich/mpi4py, un fichier machine et toutes les bibliothèques d'un virtualenv, le tout sur un partage NFS. Mon but est d'utiliser ipython/ipyparallel pour distribuer des tâches sur plusieurs nœuds, chacun utilisant plusieurs moteurs ipython.

Je suis en mesure d'exécuter ipcluster start --profile=mpi -n 4 sur un nœud (dans ce cas, worker2) et à travers un autre noeud (dans ce cas worker1) exécuter ipython --profile=mpi et la liste des moteurs fonctionnant au cours d'exécution en utilisant les commandes suivantes:

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 

Comme prévu, je reçois 4 instances du nom d'hôte de l'hôte exécutant les moteurs imprimés:

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

Cependant, si je commence à ipcluster sur un autre nœud (dans ce cas head), alors ce sont les seuls moteurs/nœuds pour montrer quand je les interroger comme indiqué ci-dessus, même si la première série de moteurs sont encore en cours d'exécution sur l'autre nœud:

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

Ma question est, comment Je reçois ipython pour voir tous les moteurs sur tous les nœuds qui sont en cours d'exécution; Pour répartir réellement la charge entre les différents nœuds.

Courir mpi sur ses propres œuvres fines (tête, worker1 et worker2 sont le noeud respectif péché du 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 

Donc, au moins je sais que ce n'est pas le problème.

Répondre

0

Résolu. J'ai recréé mon fichier ipcluster_config.py et ajouté c.MPILauncher.mpi_args = ["-machinefile", "path_to_file/machinefile"] et cette fois cela a fonctionné - pour une raison bizarre. Je pourrais jurer que j'avais ça avant, mais hélas ...