2016-08-12 68 views
0

我試圖在HPC上運行R代碼,但不知道如何利用多個節點。我使用的特定HPC有100個節點,每個節點有36個核心。R中的多節點處理

這是一個代碼示例。

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) 

此代碼適用於我的筆記本電腦和HPC的登錄名,但它僅使用1個節點。我只是想確保我利用了我所能做到的所有核心。

我該如何特別利用多個節點,還是「幕後」完成?

回答

0

如果您對HPC羣集非常認真,請使用MPI羣集,而不是SOCK。 MPI是非共享內存計算的標準,大多數羣集都針對MPI進行了優化。

在HPC的情況下,您還需要一個作業腳本來啓動R.有幾種啓動方法,您可以使用mpirun或直接從R中調用作業。Scheduler將設置MPI環境,R將會找出使用哪個節點。從4名工人開始小,然後增加數量,直到達到最佳水平。大多數任務不能有效使用3600 cpu。

最後,如果您在MPI上使用數十個CPU-s,我強烈建議使用Rhpc而不是Rmpi軟件包。它使用更高效的MPI通信併爲您提供明顯的速度提升。

在我使用的東西沿線的扭矩控制系統:

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() 

具體的扭矩 - 部分是nodefile部分,這樣我知道有多少工人創造。在jobcript中,我開始R就像Rscript >>output.txt myScript.R

作爲便箋:你確定myfun(files, ...)是正確的?也許你的意思是myfun(files[i], ...)?我們很高興幫助:-)