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.