/ / Eseguire più script R contemporaneamente - r, rstudio

Eseguire più R-scripts contemporaneamente - r, rstudio

Nella mia tesi ho bisogno di esibirmi moltostudi di simulazione, che richiedono tutti un po 'di tempo. Il mio computer ha 4 core, quindi mi sono chiesto se è possibile eseguire ad esempio due script R in Rstudio allo stesso tempo, consentendo loro di utilizzare due core diversi? Se ciò potesse essere fatto, potrei risparmiare un sacco di tempo semplicemente lasciando il computer durante la notte eseguendo tutti questi script.

risposte:

11 per risposta № 1

Supponendo che i risultati non debbano finire nello stesso ambiente, è possibile ottenere ciò usando i progetti RStudio: https://support.rstudio.com/hc/en-us/articles/200526207-Using-Projects

Per prima cosa crea due progetti separati. È possibile aprire entrambi contemporaneamente, il che comporterà due ressioni. È quindi possibile aprire ciascuno script in ogni progetto ed eseguirne uno separatamente. È quindi sul tuo sistema operativo gestire l'allocazione core.


7 per risposta № 2

In RStudio

Se fai clic con il tasto destro su RStudio, dovresti essere in grado di aprire diverse "sessioni" separate di RStudio (indipendentemente dal fatto che tu usi o meno Progetti). Di default questi useranno 1 core ciascuno.

Aggiornare (Luglio 2018): RStudio v1.2.830-1 che è disponibile come Release di anteprima supporta un riquadro "jobs". Questo è dedicato all'esecuzione di script R in background separati dalla sessione R interattiva:

  • Esegui qualsiasi script R come lavoro in background in una sessione R pulita

  • Monitora i progressi e visualizza l'output degli script in tempo reale

  • Opzionalmente dai ai lavori il tuo ambiente globale quando avviato, ed esporta nuovamente i valori quando completi

Questo sarà disponibile in RStudio versione 1.2.

Esecuzione di script nel terminale

Se hai diversi script che sai eseguire senza errori, ti consiglio di eseguirli su diversi parametri tramite la riga di comando:

RCMD script.R
RScript script.R

In esecuzione in background:

nohup Rscript script.R &

Qui "&" esegue lo script in background (può essere recuperato con fg, monitorato con htope ucciso con kill <pid> o pkill rsession) e nohup salva l'output in un file e continua a essere eseguito se il terminale è chiuso.

Passare argomenti a uno script:

Rscript script.R 1 2 3

Questo passerà c(1, 2, 3) a R come output di commandArgs() quindi un loop in bash può eseguire più istanze di Rscript con un loop bash:

for ii in 1 2 3
do
nohup Rscript script.R $ii &
done

Esecuzione di codice parallelo all'interno di R

Troverai spesso che un particolare passaggio nel tuo script R sta rallentando i calcoli, posso suggerire di eseguire codice parallelo all'interno del tuo codice R piuttosto che eseguirlo separatamente? Io consiglierei il pacchetto neve per i loop di esecuzione in parallelo in R. Generalmente, invece di utilizzare:

cl <- makeCluster(n)
# n = number of cores (I"d recommend one less than machine capacity)
clusterExport(list=ls()) #export input data to all cores
output_list <- parLapply(cl, input_list, function(x) ... )
stopCluster() # close cluster when complete (particularly on shared machines)

Usa questo ovunque tu usi normalmente a lapply funzione in R per eseguirlo in parallelo.


4 per risposta № 3

È possibile ottenere il parallelismo multicore (come spiegato qui https://cran.r-project.org/web/packages/doMC/vignettes/gettingstartedMC.pdf) nella stessa sessione con il seguente codice

if(Sys.info()["sysname"]=="Windows"){
library(doParallel)
cl<-makeCluster(numberOfCores)
registerDoParallel(cl)
}else{
library(doMC)
registerDoMC(numberOfCores)
}
library(foreach)

someList<-list("file1","file2")
returnComputation <-
foreach(x=someList) %dopar%{
source(x)
}


if(Sys.info()["sysname"]=="Windows") stopCluster(cl)

Avrai bisogno di adattare ancora il tuo output.


0 per risposta № 4

Se vuoi fare un parallelo imbarazzante, puoi aprire tutti i terminali che vuoi nella scheda del terminale (che si trova subito dopo la scheda Console) ed eseguire il tuo codice usando Rscript yourcode.R. Ogni codice verrà eseguito su core separato per impostazione predefinita. Puoi anche usare l'argomento della riga di comando (come menzionato da @Tom Kelly) se necessario.