2011-03-03 5 views
43

Je suis intéressé par l'exécution d'un programme Python à l'aide d'un cluster d'ordinateurs. J'ai déjà utilisé des interfaces Python MPI, mais en raison de difficultés de compilation/installation, je préférerais des solutions qui utilisent des modules intégrés, tels que le module multiprocessing de Python. Ce que je voudrais vraiment faire est juste de configurer une instance multiprocessing.Pool qui couvrirait l'ensemble du cluster d'ordinateurs, et exécuter un Pool.map(...). Est-ce quelque chose qui est possible/facile à faire?Utilisation du module multitraitement pour l'informatique en cluster

Si cela est impossible, je voudrais au moins pouvoir démarrer Process instances sur l'un des nœuds à partir d'un script central avec des paramètres différents pour chaque nœud.

+2

Peut-être essayer JUG: http://packages.python.org/Jug/ – unutbu

Répondre

35

Si par cluster computing, vous voulez dire des systèmes de mémoire distribués (plusieurs nœuds plutôt que SMP), alors le multitraitement de Python peut ne pas être un choix approprié. Il peut engendrer plusieurs processus, mais ils seront toujours liés dans un seul nœud.

Ce dont vous aurez besoin, c'est d'un framework qui gère la génération de processus sur plusieurs nœuds et fournit un mécanisme de communication entre les processeurs. (à peu près ce que MPI fait).

Voir la page sur Parallel Processing on the Python wiki pour une liste de frameworks qui aideront avec l'informatique en cluster.

Dans la liste, pp, jug, pyro et celery ressemblent à des options raisonnables bien que je ne peux pas se porter garant personnellement pour tout que je n'ai aucune expérience avec l'un d'eux (je l'utilise principalement MPI).

Si la facilité d'installation/d'utilisation est importante, je commencerais par explorer jug. C'est easy to install, supports common batch cluster systems, et regarde well documented.

+12

J'ai écrit cruche (merci pour vous les gentils mots). J'ajouterai que le module est également bien supporté. Si vous trouvez des bugs, ils seront corrigés très rapidement (<24h, généralement). – luispedro

+2

Les gestionnaires de multitraitement Python peuvent parler entre plusieurs systèmes, pas seulement au sein d'un système. Voir: http://eli.thegreenplace.net/2012/01/24/distributed-computing-in-python-with-multiprocessing/ – MattK

11

Dans le passé, j'ai utilisé Pyro pour ce faire assez bien. Si vous activez le code mobile, il enverra automatiquement par le câble les modules requis que les nœuds n'ont pas déjà. Assez chouette.

+0

très chouette en effet –

Questions connexes