/ / Führen Sie mehrere R-Skripte gleichzeitig aus - r, rstudio

Mehrere R-Skripte gleichzeitig ausführen - r, rstudio

In meiner Diplomarbeit muss ich viel leistenSimulationsstudien, die alle eine Weile dauern. Mein Computer hat 4 Kerne, also habe ich mich gefragt, ob es zum Beispiel möglich ist, zwei R-Skripte gleichzeitig in Rstudio auszuführen, indem man sie zwei verschiedene Kerne verwenden lässt. Wenn dies getan werden könnte, könnte ich viel Zeit sparen, indem ich den Computer über Nacht laufen lasse, um all diese Skripte auszuführen.

Antworten:

11 für die Antwort № 1

Angenommen, die Ergebnisse müssen nicht in derselben Umgebung landen, können Sie dies mit RStudio-Projekten erreichen: https://support.rstudio.com/hc/en-us/articles/200526207-Using-Projects

Erstellen Sie zunächst zwei separate Projekte. Sie können beide gleichzeitig öffnen, was zu zwei Sitzungen führt. Sie können dann jedes Skript in jedem Projekt öffnen und jedes einzeln ausführen. Es liegt dann an Ihrem Betriebssystem, die Kernzuweisung zu verwalten.


7 für die Antwort № 2

In RStudio

Wenn Sie mit der rechten Maustaste auf RStudio klicken, sollten Sie in der Lage sein, mehrere separate "Sitzungen" von RStudio zu öffnen (unabhängig davon, ob Sie Projekte verwenden oder nicht). Standardmäßig wird jeweils 1 Kern verwendet.

Aktualisieren (Juli 2018): RStudio 1.2.830-1, verfügbar als Vorschau Release unterstützt einen Bereich "Jobs". Dies dient zum Ausführen von R-Skripten im Hintergrund, getrennt von der interaktiven R-Sitzung:

  • Führen Sie ein beliebiges R-Skript als Hintergrundjob in einer sauberen R-Sitzung aus

  • Überwachen Sie den Fortschritt und sehen Sie die Skriptausgabe in Echtzeit

  • Geben Sie Jobs beim Start optional Ihre globale Umgebung und exportieren Sie die Werte nach Abschluss zurück

Dies wird in RStudio Version 1.2 verfügbar sein.

Ausführen von Skripten im Terminal

Wenn mehrere Skripte, von denen Sie wissen, dass sie fehlerfrei ausgeführt werden, empfehle ich, diese mit verschiedenen Parametern über die Befehlszeile auszuführen:

RCMD script.R
RScript script.R

Laufen im Hintergrund:

nohup Rscript script.R &

Hier "&" führt das Skript im Hintergrund aus (abrufbar mit fg, überwacht mit htopund getötet mit kill <pid> oder pkill rsession) und nohup speichert die Ausgabe in einer Datei und läuft weiter, wenn das Terminal geschlossen wird.

Argumente an ein Skript übergeben:

Rscript script.R 1 2 3

Es wird vorübergehen c(1, 2, 3) bis R als Ausgang von commandArgs() So kann eine Schleife in Bash mehrere Instanzen von Rscript mit einer Bash-Schleife ausführen:

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

Ausführen von parallelem Code in R

Sie werden oft feststellen, dass ein bestimmter Schritt in Ihrem R-Skript Berechnungen verlangsamt. Darf ich vorschlagen, parallelen Code in Ihrem R-Code auszuführen, anstatt sie separat auszuführen? Ich würde das empfehlen Schneepaket zum parallelen Laufen von Schleifen in R. Im Allgemeinen anstelle von:

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)

Verwenden Sie diese Option überall dort, wo Sie normalerweise eine verwenden würden lapply Funktion in R, um es parallel auszuführen.


4 für die Antwort № 3

Sie können eine Multicore-Parallelität erreichen (wie hier erläutert) https://cran.r-project.org/web/packages/doMC/vignettes/gettingstartedMC.pdf) in derselben Sitzung mit dem folgenden Code

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)

Sie müssen Ihre Ausgabe noch anpassen.


0 für die Antwort № 4

Wenn Sie eine peinliche Parallelekönnen Sie so viele Terminals öffnen, wie Sie möchten, und Ihren Code mithilfe von ausführen Rscript yourcode.R. Jeder Code wird standardmäßig auf einem separaten Core ausgeführt. Bei Bedarf können Sie auch ein Befehlszeilenargument (wie @Tom Kelly erwähnt) verwenden.