2011-03-03 19 views
43

Estoy interesado en ejecutar un programa de Python utilizando un clúster de equipo. En el pasado he estado usando interfaces Python MPI, pero debido a las dificultades para compilar/instalar estas, preferiría soluciones que usan módulos integrados, como el módulo multiprocessing de Python.Uso del módulo de multiprocesamiento para informática en clúster

Lo que realmente me gustaría hacer es simplemente configurar una instancia multiprocessing.Pool que abarque todo el grupo de computadoras, y ejecutar un Pool.map(...). ¿Es esto algo que es posible/fácil de hacer?

Si esto es imposible, me gustaría al menos poder iniciar Process instancias en cualquiera de los nodos de un script central con diferentes parámetros para cada nodo.

+2

Quizás intente JUG: http://packages.python.org/Jug/ – unutbu

Respuesta

35

Si por computación en clúster se entiende sistemas de memoria distribuida (múltiples nodos en lugar de SMP), entonces el multiprocesamiento de Python puede no ser una opción adecuada. Puede engendrar múltiples procesos, pero aún estarán vinculados dentro de un solo nodo.

Lo que necesitará es un marco que maneje el desorden de procesos en múltiples nodos y proporciona un mecanismo para la comunicación entre los procesadores. (más o menos lo que hace MPI).

Consulte la página en Parallel Processing on the Python wiki para obtener una lista de marcos que ayudarán con la computación en clúster.

En la lista, pp, jug, pyro y celery parecen opciones de forma inteligente, aunque no puedo responder por cualquiera ya que no tengo experiencia con cualquiera de ellos (yo uso principalmente MPI).

Si la facilidad de instalación/uso es importante, comenzaría por explorar jug. Es easy to install, supports common batch cluster systems, y se ve well documented.

+12

Escribí jarra (gracias por las amables palabras). Añadiré que el módulo también está bien soportado. Si encuentra algún error, lo arreglarán muy rápido (<24 h, en general). – luispedro

+2

Los administradores de multiprocesamiento de Python pueden hablar entre varios sistemas, no solo dentro de un sistema. Ver: http://eli.thegreenplace.net/2012/01/24/distributed-computing-in-python-with-multiprocessing/ – MattK

11

En el pasado he usado Pyro para hacer esto con bastante éxito. Si activa el código móvil, enviará automáticamente los módulos requeridos por los cables que los nodos ya no tienen. Bastante ingenioso.

+0

muy ingenioso de hecho –

Cuestiones relacionadas