2012-03-25 4 views
11

Ho appena capito come inviare i lavori da elaborare sulle macchine nel cluster usando Condor. Dato che abbiamo un sacco di macchine e non ognuna di quelle macchine sono configurate allo stesso modo, mi chiedevo:Come dire a Condor di inviare i lavori solo alle macchine nel cluster, su cui sono installati "numpy"?

E 'possibile dire al condor solo di inviare i miei lavori (script python) alle macchine, che hanno numpy installato su da quando il mio script dipende da questo pacchetto?

risposta

-2

Avete bisogno di? Secondo lo condor manual:

Condor non richiede un account (accesso) su macchine in cui viene eseguito un lavoro. Condor può farlo a causa della sua tecnologia di chiamata di sistema remota, che intercetta le chiamate di libreria per operazioni come la lettura o la scrittura da file su disco. Le chiamate vengono trasmesse sulla rete da eseguire sulla macchina in cui è stato inviato il lavoro .

Per me questo implica che se la macchina di inoltrare il processo ha NumPy installato, dovrebbe funzionare.

+0

Grazie per la risposta. Purtroppo il mio caso dimostra altri saggi. I lavori sono inviati a macchine diverse. Alcune presentazioni danno come risultato un ImportError di numpy. Ho ricontrollato queste macchine e non hanno avuto nessun numpy installato. Quindi il condor non sembra impedire l'invio di un lavoro a una macchina che non soddisfa i requisiti del lavoro - nel mio caso un'installazione numpy. Forse è il caso della nostra installazione di condor, però. Io stesso non ho impostato il sistema ed è la prima volta che lavoro con il condor. :-) – Aufwind

+0

È ora di contattare gli sviluppatori del condor. O il loro manuale non è corretto, o Python è trattato in modo diverso come Java. –

+0

Questa citazione dal manuale è fuori dal contesto. La funzione di chiamata del sistema remoto Condor è disponibile solo per i lavori di "universo standard".Sebbene non lo dica, l'OP deve usare l'universo "vanilla" perché l'universo standard impone vincoli che precludono agli interpreti come Python di correre sotto di esso. – Pinko

7

Come qualsiasi altro attributo di macchina, è sufficiente pubblicizzarlo nel classad della macchina e quindi richiedere che il lavoro lo richieda.

fargli pubblicità nel classad macchina, è possibile codificare in file di configurazione condor di ogni macchina con l'aggiunta di qualcosa di simile:

has_numpy = True 
STARTD_EXPRS = $(STARTD_EXPRS) HAS_NUMPY 

... o meglio ancora, si può dire Condor a scoprilo dinamicamente in runtime con uno script e pubblicizza il risultato tramite startd classad hook. Per fare questo, è necessario installare un semplice has_numpy script su ogni macchina in questo modo:

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

... e poi dire Condor per eseguirlo ogni cinque minuti e bastone i risultati nella classad startd, aggiungendo quanto segue alla condor file di configurazione della macchina:

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

... e poi ta-da (dopo un reconfig) le macchine in modo dinamico rilevare e segnalare se NumPy è installato e disponibile per gli script python.

Poi basta aggiungere un corrispondente obbligo di presentare il vostro lavoro di file, in questo modo:

Requirements = (has_numpy == True) 

... e il vostro lavoro verrà eseguito solo su macchine in cui è installato NumPy.

Problemi correlati