2012-03-25 13 views
11

Acabo de descubrir cómo enviar trabajos para que se procesen en máquinas del clúster utilizando Condor. Como tenemos muchas máquinas y no cada una de esas máquinas está configurada de la misma manera, me preguntaba:¿Cómo decirle a Condor que envíe trabajos solo a las máquinas en el clúster, que tienen "numpy" instalado en ellas?

¿Es posible decirle a cóndor que envíe mis trabajos (scripts de Python) a las máquinas que tienen instalado numpy en ellos ya que mi script depende de este paquete?

Respuesta

-2

¿Lo necesita? De acuerdo con condor manual:

Condor no requiere una cuenta (iniciar sesión) en las máquinas donde se ejecuta un trabajo. Condor puede hacer esto debido a su tecnología de llamada a sistema remoto, que intercepta las llamadas a la biblioteca para operaciones tales como leer o escribir desde archivos de disco. Las llamadas se transmiten a través de la red para que se realicen en la máquina donde se envió el trabajo .

Para mí, esto implica que si la máquina que envía el trabajo tiene un numpy instalado, debería funcionar.

+0

Gracias por su respuesta. Desafortunadamente mi caso prueba de otra manera. Los trabajos se envían a diferentes máquinas. Algunas presentaciones dan como resultado un ImportError de numpy. Comprobé esas máquinas dos veces y no tenían ningún numpy instalado. Por lo tanto, el cóndor no parece impedir la presentación de un trabajo a una máquina que no cumple con los requisitos del trabajo; en mi caso, una instalación numpy. Tal vez sea el caso en nuestra instalación de cóndor, sin embargo. Yo mismo no configuré el sistema y es la primera vez que trabajo con cóndor. :-) – Aufwind

+0

Hora de contactar a los desarrolladores de cóndores. O bien su manual no es correcto, o Python se trata de manera diferente como lo es Java. –

+0

Esta cita del manual está fuera de contexto. La función de llamada remota del sistema Condor está disponible solo para trabajos de "universo estándar".Aunque no lo dice, el OP debe usar el universo "vainilla" porque el universo estándar impone restricciones que impiden que los intérpretes como Python se ejecuten debajo de él. – Pinko

7

Al igual que cualquier otro atributo de la máquina, solo tiene que anunciarlo en el classad de la máquina, y luego hacer que sus trabajos lo requieran.

para hacer publicidad en el ClassAd máquina, puede difícil que el código en el archivo de configuración condor de cada máquina mediante la adición de algo como esto:

has_numpy = True 
STARTD_EXPRS = $(STARTD_EXPRS) HAS_NUMPY 

... o mejor aún, puede decirle a Condor descubrirlo dinámicamente en tiempo de ejecución con un script y anunciar el resultado a través de startd classad hook. Para ello, instale un simple script has_numpy en cada máquina, así:

#!/usr/bin/env python 
try: 
    import numpy 
except ImportError: 
    print "has_numpy = False" 
else: 
    print "has_numpy = True" 

... y luego decirle Cóndor para ejecutarlo cada cinco minutos y se adhieren los resultados en el ClassAd startd, añadiendo lo siguiente a la condor archivo de configuración de la máquina:

HASNUMPY = /usr/libexec/condor/has_numpy 
STARTD_CRON_JOBLIST = $(STARTD_CRON_JOBLIST) HASNUMPY 
STARTD_CRON_HASNUMPY_EXECUTABLE = $(HASNUMPY) 
STARTD_CRON_HASNUMPY_PERIOD = 300 

... y luego ta-da (después de un reconfig) sus máquinas de forma dinámica detectar e informar de si numpy está instalado y disponible para los scripts de python.

Entonces sólo tiene que añadir el requisito correspondiente a su trabajo puede enviar los archivos, así:

Requirements = (has_numpy == True) 

... y su trabajo sólo se ejecutará en máquinas en las que se instala numpy.

Cuestiones relacionadas