Per eseguire un programma basato su Rmpi su un cluster, è necessario richiedere più nodi utilizzando il sistema di accodamento batch e quindi eseguire lo script R dallo script del lavoro tramite un'utilità come mpirun/mpiexec. Idealmente, l'utilità mpirun è stata creata per rilevare automaticamente quali nodi sono stati allocati dal sistema di accodamento batch, altrimenti sarà necessario utilizzare un argomento mpirun come --hostfile
per indicare quali nodi utilizzare.
Nel tuo caso, sembra che tu abbia richiesto più nodi, quindi il problema è probabilmente il modo in cui viene eseguito lo script R. Alcune persone non si rendono conto che hanno bisogno di usare mpirun/mpiexec, e il risultato è che il tuo script gira su un singolo nodo. Se si utilizza mpirun, è possibile che l'installazione di Open MPI non sia stata realizzata con il supporto per il proprio sistema di accodamento batch. In tal caso, è necessario creare un file host appropriato dalle informazioni fornite dal proprio sistema di accodamento batch che viene solitamente fornito tramite una variabile di ambiente e/o un file.
Ecco un tipico comando mpirun che uso per eseguire i miei script R parallele dal script di processo:
mpirun -np 1 R --slave -f par.R
Dato che costruiamo Open MPI con il supporto per coppia, io non uso l'opzione --hostfile
: mpirun individua automaticamente quali nodi utilizzare dalla variabile di ambiente PBS_NODEFILE
. L'uso di -np 1
può sembrare strano, ma è necessario se il programma sta per generare i lavoratori, che in genere viene eseguito quando si utilizza il pacchetto snow
. Non ho mai utilizzato snowfall
, ma dopo aver cercato sul codice sorgente, mi sembra che sfInit
chiami sempre makeMPIcluster
con un argomento "count" che causerà snow
per generare i lavoratori, quindi penso che sia necessario -np 1
per i cluster MPI con snowfall
. Altrimenti, mpirun avvierà il tuo script R su più nodi e ognuno genererà 10 lavoratori sul proprio nodo che non è quello che desideri. Il trucco è impostare l'argomento "cpus" sfInit
su un valore coerente con il numero di nodi assegnati al lavoro dal sistema di accodamento batch. È possibile trovare la funzione Rmpi
mpi.universe.size
utile per questo.
Se pensate che tutto ciò sia fatto correttamente, il problema potrebbe essere il modo in cui l'oggetto cluster MPI viene creato nello script R, ma sospetto che abbia a che fare con l'uso (o la mancanza di uso) di mpirun.
fonte
2013-07-28 03:42:03
Qualche messaggio di errore? – sgibb
Che tipo di MPI sta eseguendo il tuo cluster? –
openMPI, nessun messaggio di errore per quanto ne so (le cose funzionano senza intoppi, ma il sysadmin mi dice che sta eseguendo tutto su un cluster anche se ho 5 allocati). Inoltre ho appena realizzato che intendevo un nodo e non un cluster. – user1480248