2016-08-12 4 views
0

Ich versuche R-Code auf einem HPC ausführen, aber nicht sicher, wie Sie mehrere Knoten nutzen. Die spezifische HPC, die ich verwende, hat 100 Knoten und 36 Kerne pro Knoten.Multinode-Verarbeitung in R

Hier ist ein Beispiel für den Code.

n = 3600 ### This would be my ideal. Set to 3 on my laptop 
cl = makeCluster(n, "SOCK") 
foreach(i in 1:length(files), packages=c("raster","dismo")) %dopar% 
    Myfunction(files=files[i],template=comm.path, out = outdir) 

Dieser Code funktioniert auf meinem Laptop und auf dem Login des HPC, aber es wird nur unter Verwendung von 1-Knoten. Ich möchte nur sicherstellen, dass ich alle Kerne ausnutze, die ich kann.

Wie konkret nützt ich mehrere Knoten oder ist es "hinter den Kulissen"?

Antwort

0

Wenn Sie es mit HPC-Clustern ernst meinen, verwenden Sie MPI-Cluster, nicht SOCK. MPI ist der Standard für Nicht-Shared-Memory-Computing, und die meisten Cluster sind für MPI optimiert.

Bei HPC müssen Sie auch einen Job-Skript R. starten Es gibt mehrere Möglichkeiten, es zu starten, können Sie mpirun verwenden, oder die Arbeiter direkt von R. Scheduler aufrufen wird die MPI-Umgebung und R aufgebaut werden herauszufinden, welche Knoten zu verwenden sind. Beginnen Sie klein, sagen Sie mit 4 Mitarbeitern, und erhöhen Sie die Anzahl, bis Sie das optimale Niveau erreicht haben. Die meisten Aufgaben können 3600 CPUs nicht effizient verwenden.

Schließlich, wenn Sie mehrere CPU-s über MPI verwenden, empfehle ich dringend, Rhpc anstelle von Rmpi-Paket zu verwenden. Es nutzt eine effizientere MPI-Kommunikation und gibt Ihnen einen spürbaren Geschwindigkeitsschub.

Auf einem drehmomentgesteuerten System, das ich etwas entlang der Linien bin mit:

Rhpc_initialize() 
nodefile <- Sys.getenv("PBS_NODEFILE") 
nodes <- readLines(nodefile) 
commSize <- length(nodes) 
cl <- Rhpc_getHandle(commSize) 

Rhpc_Export(cl, c("data")) 
... 
result <- Rhpc_lapply(cl, 1:1000, runMySimulation) 
... 
Rhpc_finalize() 

Der drehmoment spezifischen Teil ist der nodefile Teil auf diese Weise ich weiß, wie viele Arbeiter zu schaffen. Im Jobskript starte ich R wie Rscript >>output.txt myScript.R.

Als Randnotiz: Sind Sie sicher myfun(files, ...) ist richtig? Vielleicht meinst du myfun(files[i], ...)?

Lassen Sie uns wissen, wie es geht, ich bin glücklich, zu helfen :-)