2013-07-22 15 views
5

Sto provando a utilizzare IPython Parallel per uno scenario molto comune, in cui voglio eseguire le simulazioni su un cluster su cui è in esecuzione Sun Grid Engine e non riesco a trovare un modo affidabile per eseguire Questo.Uso di IPython Parallel su Sun Grid Engine

Qui è quello che sto cercando di fare:

voglio eseguire simulazioni numeriche (utilizzando gli array NumPy) con diversi valori dei parametri diversi - i compiti sono ovviamente/'imbarazzante' parallelo. Ho accesso (tramite ssh) al nodo principale del cluster su cui gira Grid Engine. Fino ad ora, stavo eseguendo script di shell con il comando QSUB, ma questo è abbastanza maldestro (gestione dei crash di nodi ecc.) E stavo cercando un modo per tutto questo in Python.

IPython sembra ideale per questo scenario, ma si sta rivelando complicato per il corretto funzionamento dell'installazione. Inizio (diciamo 20) i motori usando IPCLUSTER sul nodo principale, quindi copio i file .json sui miei computer locali da dove mi connetto usando IPython.parallel.Client.

Ho impostato IPClusterStart.controller_launcher_class = 'SGEControllerLauncher' e IPClusterEngines.engine_launcher_class = 'SGEEngineSetLauncher'

IPCLUSTER sembra funzionare bene; Ottengo questo output dal nodo testa sul terminale ssh:

-- [IPClusterStart] Starting Controller with SGEControllerLauncher 
-- [IPClusterStart] Job submitted with job id: '143396' 
-- [IPClusterStart] Starting 4 Engines with SGEEngineSetLauncher 
-- [IPClusterStart] Job submitted with job id: '143397' 
-- [IPClusterStart] Engines appear to have started successfully 

Tuttavia, ho questi problemi:

  1. Molto spesso, molti dei motori non riuscirà a registro con il controller anche dopo Vedo il messaggio sopra il quale dice che i motori sono stati avviati con successo. Quando avvii IPCLUSTER con 20 motori, posso vedere 10-15 motori visualizzati nella coda Grid Engine. Non ho idea di cosa succede agli altri motori - non ci sono file di output. Di questi 10-15 motori che iniziano solo alcuni di essi a registrare con il controller e vedo questo sul loro file di output:

    ... [IPEngineApp] Using existing profile dir: .../.ipython/profile_sge' 
    ... [IPEngineApp] Loading url_file ... .ipython/profile_sge/security/ipcontroller-engine.json' 
    ... [IPEngineApp] Registering with controller at tcp://192.168.87.106:63615 
    ... [IPEngineApp] Using existing profile dir: .../.ipython/profile_sge' 
    ... [IPEngineApp] Completed registration with id 0 
    

    Su altri vedo questo:

    ... [IPEngineApp] Using existing profile dir: .../.ipython/profile_sge' 
    ... [IPEngineApp] Loading url_file .../.ipython/profile_sge/security/ipcontroller-engine.json' 
    ... [IPEngineApp] Registering with controller at tcp://192.168.87.115:64909 
    ... [IPEngineApp] Registration timed out after 2.0 seconds 
    

    Qualsiasi idea del perché questo accade?

  2. A volte, i motori di avviare e registrare con successo, ma cominciano a morire quando faccio correre qualcosa di molto semplice come view.execute('%pylab') e l'unica eccezione torno è questo:

    [Eccezione Engine] Traceback (più recente call last): File "/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/IPython/parallel/client/client.py", riga 708, in _handle_stranded_msgs errore di generazione. EngineError ("Motore% r morto durante l'esecuzione dell'attività% r"% (eid, msg_id)) EngineError: Engine 1 morto durante l'esecuzione dell'attività 'b9601e8a-cff5-4037-b9d9-a0b93ca2f256'

  3. Avviare i motori in questo modo significa che occupo i nodi e la coda finché i motori sono in esecuzione, anche se non eseguono nulla. C'è un modo semplice per avviare i motori in modo che vengano generati solo quando vuoi eseguire alcuni script e si chiuderanno una volta che avranno restituito il risultato del loro calcolo?

  4. Il Grid Engine sembra avviare il controller su un nodo diverso ogni volta, quindi il flag --ruse nei file di configurazione di IPCLUSTER non è utile; Devo copiare i file JSON ogni volta che uso IPCLUSTER. c'è un modo per evitarlo?

Sarebbe veramente utile se qualcuno può dare un semplice flusso di lavoro per questo scenario comune: usando IPython parallelo a inviare i lavori, ovviamente, in parallelo a un cluster SGE tramite una connessione SSH. Ci dovrebbe essere un modo per gestire la reinoltrazione dei crash del motore, e sarebbe anche bello se ci fosse un modo per usare le risorse del cluster solo per la durata della simulazione.

risposta

1

Arriva un po 'in ritardo e in realtà non risponde alla domanda specifica. Tuttavia, hai provato con pythongrid?