Das folgende (vereinfachte) Skript funktioniert einwandfrei auf dem Master-Knoten eines Unix-Clusters (4 virtuelle Kerne).R foreach: von Einzelmaschine zu Cluster
library(foreach)
library(doParallel)
nc = detectCores()
cl = makeCluster(nc)
registerDoParallel(cl)
foreach(i = 1:nrow(data_frame_1), .packages = c("package_1","package_2"), .export = c("variable_1","variable_2")) %dopar% {
row_temp = data_frame_1[i,]
function(argument_1 = row_temp, argument_2 = variable_1, argument_3 = variable_2)
}
stopCluster(cl)
Ich möchte die Vorteile der 16 Knoten im Cluster nehmen (16 * 4
virtuelle Kerne insgesamt).
Ich denke, alles, was ich tun muß, ist der parallel Backend von makeCluster
angegeben ändern. Aber wie soll ich das machen? Die Dokumentation ist nicht sehr klar.
Basierend auf diese ziemlich alt (2013) veröffentlichen http://www.r-bloggers.com/the-wonders-of-foreach/ es scheint, dass ich den Standardtyp verändern soll (sock
oder MPI
- was würde ein-, dass die Arbeit auf Unix?)
EDIT
Aus diese vignette von den Autoren der foreach:
verwendet standardmäßig doParallel Multi-Core-Funktionalität auf Unix-ähnlichen Systemen und Schnee fu nktionalität unter Windows. Beachten Sie, dass die Multicore-Funktion nur Aufgaben auf einem einzelnen Computer ausführt, nicht auf einem Cluster von Computern. Sie können jedoch die Snow-Funktionalität verwenden, um unter einen Cluster unter Verwendung von Unix-ähnlichen Betriebssystemen, Windows oder sogar einer Kombination auszuführen.
Was bedeutet you can use the snow functionality
? Wie soll ich das machen?
Ich verwende keine For-Schleife ... – Antoine
Ich würde empfehlen, Revolution R öffnen, die statistische Bibliotheken und Multi-Core-Unterstützung verbessert hat. [Überprüfen Sie meine Antwort auf diesen Beitrag für weitere Informationen über RRO] (http://stackoverflow.com/questions/31900708/how-can-i-get-r-to-use-more-cpu-usage/33996564#33996564) . Dies hängt nicht direkt mit Ihrer Frage zusammen, aber es beschleunigt alle mathematischen Berechnungen und Pakete, die Multi-Cores verwenden können. – Bas