2014-05-08 4 views
11

Ich erlebe Langsamkeit beim Erstellen von Clustern mit dem parallel-Paket.Was beeinflusst die Zeit zum Erstellen eines Clusters mit dem parallelen Paket?

Hier ist eine Funktion, die einen PSOCK-Cluster mit n Knoten erstellt und dann stoppt.

library(parallel) 
library(microbenchmark) 
f <- function(n) 
{ 
    cl <- makeCluster(n) 
    on.exit(stopCluster(cl)) 
} 
microbenchmark(f(2), f(4), times = 10) 
## Unit: seconds 
## expr  min  lq median  uq  max neval 
## f(2) 4.095315 4.103224 4.206586 5.080307 5.991463 10 
## f(4) 8.150088 8.179489 8.391088 8.822470 9.226745 10 

Meine Maschine (eine einigermaßen moderne 4-Core-Workstation Win 7 ausgeführt Pro) nimmt etwa 4 Sekunden, um einen Cluster mit zwei Knoten und 8 Sekunden erstellen vier Knoten-Cluster zu erstellen. Das erschien mir zu langsam, also habe ich das gleiche Profiling auf einer identisch ausgestatteten Maschine eines Kollegen versucht, und es dauerte ein/zwei Sekunden für die beiden Tests jeweils.

Dies könnte bedeuten, dass auf meinem Computer einige seltsame Einstellungen vorgenommen wurden oder dass es ein anderes Problem gibt. Ich habe die Hilfeseiten ?makeCluster und socketConnection gelesen, aber nichts in Bezug auf die Verbesserung der Leistung gesehen.

Ich habe in den Windows Task-Manager geschaut, während der Code lief: Es gab keine offensichtliche Störung mit Antiviren- oder anderer Software, nur ein Rscript-Prozess lief bei ~ 17% (weniger als ein Kern).

Ich weiß nicht, wo ich suchen muss, um die Ursache des Problems zu finden. Gibt es bekannte Ursachen für Langsamkeit bei der PSOCK-Cluster-Erstellung unter Windows?

Sind 8 Sekunden zum Erstellen eines 4-Knoten-Clusters tatsächlich langsam (bis 2014 Standards), oder sind meine Erwartungen zu hoch?

+0

8 Sekunden ist ziemlich langsam. Es dauert etwa 1 Sekunde auf meinem 3 Jahre alten win7-Arbeitsplatz. – Roland

+0

dauert 11 Sekunden auf meinem neuen win8 pc. – JT85

+0

1,6 und 3,2 Sekunden auf meinem 3 Jahre alten i7 mit W7. –

Antwort

13

Um zu überwachen, was passierte, installierte und öffnete ich Process Monitor (HT @ qethanm). Ich habe auch die meisten Dinge in meinem System Tray wie Dropbox verlassen, um weniger Lärm zu erzeugen. (Obwohl das am Ende keinen Unterschied machte.)

Ich habe dann eine vereinfachte Version des R-Codes in der Frage direkt von R GUI (anstelle einer IDE) erneut ausgeführt.

microbenchmark(f(4), times = 5) 

Nach einigen Graben, stellte ich fest, daß R einen GUI Rscript Prozess für jeden Cluster, die sie hervorbringt (siehe Bild) erzeugt.

the process tree shows an Rscript instance for each node in each cluster

Nach vielen Sackgassen und Wildgans Verfolgungsjagden, kam mir der Gedanke, dass vielleicht diese Rscript Instanzen nicht Vanille R. waren umbenannt ich meine Rprofile.site Datei, um sie zu verstecken und den Maßstab wiederholt.

Diesmal wurde ein Cluster mit 4 Knoten im Durchschnitt in knapp einer Sekunde erstellt.

Für einen Vier-Knoten-Cluster, die Rprofile.site Datei (und vermutlich auch die persönliche Startdatei, ~/.Rprofile, wenn es vorhanden ist) werden vier mal gelesen, die Dinge nach unten erheblich verlangsamen kann. Übergeben Sie rscript_args = c("--no-init-file", "--no-site-file", "--no-environ") zu makeCluster, um dieses Verhalten zu vermeiden.

+1

Bei weiterer Überprüfung scheint es, dass die überwiegende Mehrheit der Zeit in meinem 'RProfile verbracht.site 'befindet sich im Aufruf von' update.packages (ask = FALSE) '. –

+0

Wie die Umbenennung von Rprofile.site die weitere Analyse beeinflusst, die Sie ausführen können? Ist das nicht ein notwendiger Schritt? Andere Benutzer haben diesen Ansatz nicht verwendet, um ähnliche Ergebnisse zu erzielen. –

+0

Wenn Sie keine 'Rprofile.site'-Datei haben oder verwenden, bedeutet dies nur, dass alle Optionen oder Variablen, die Sie in der Datei definiert haben, nicht gesetzt werden/existieren. –

Verwandte Themen