當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R makeCluster 創建並行套接字集群


R語言 makeCluster 位於 parallel 包(package)。

說明

創建一組副本R並行運行並通過套接字進行通信。

用法

makeCluster(spec, type, ...)
makePSOCKcluster(names, ...)
makeForkCluster(nnodes = getOption("mc.cores", 2L), ...)

stopCluster(cl = NULL)

setDefaultCluster(cl = NULL)
getDefaultCluster()

參數

spec

適合集群類型的規範。

names

運行工作副本的主機名的字符向量R,或一個正整數(在這種情況下,副本數在‘⁠本地主機⁠’)。

nnodes

要分叉的節點數量。

type

支持的類型之一:請參閱“詳細信息”。

...

要傳遞給生成工作人員的函數的選項。查看具體信息'。

cl

"cluster" 的對象。

細節

makeCluster 創建受支持類型之一的集群。默認類型 "PSOCK" 調用 makePSOCKcluster 。輸入 "FORK" 調用 makeForkCluster 。其他類型傳遞給包 snow

makePSOCKcluster snow 包中 makeSOCKcluster 的增強版本。它在指定主機上運行 Rscript 以設置一個工作進程,該進程在套接字上偵聽要計算的表達式,並返回結果(作為序列化對象)。

makeForkCluster 隻是 Windows 上的一個存根。在類 Unix 平台上,它通過分叉創建工作進程。

當不需要設置任何選項時,工作線程通常與主線程在同一主機上運行。

支持多個選項(主要針對 makePSOCKcluster ):

master

master 的主機名,worker 知道的。這可能與主站所知的不同,並且在私有子網上,可能需要將其指定為數字 IP 地址。例如,macOS 可能會將機器檢測為“⁠somename.local⁠’,這個名字隻有它自己知道。

port

套接字連接的端口號,默認取自環境變量R_PARALLEL_PORT,然後在範圍內隨機選擇一個端口11000:11999.

timeout

該端口的超時(以秒為單位)。這是失敗前master和worker之間零通信的最長時間。默認值為 30 天(POSIX 標準僅要求支持最長 31 天的值)。

setup_timeout

工作節點在失敗之前嘗試連接到主節點的最大秒數。默認值為 2 分鍾。下次嘗試之前的等待時間從 0.1 秒開始,每次重試後增加 50%。

outfile

去哪裏指揮stdoutstderr工作人員的連接輸出。""表示沒有重定向(這可能隻對本地計算機上的工作人員有用)。默認為‘/dev/空’(‘無:’在 Windows 上)。另一種可能性是工作主機上的文件路徑。文件將以追加模式打開,因為所有工作人員都登錄到同一文件。

homogeneous

邏輯,默認 true。看注釋'。

rscript

看注釋'。

rscript_args

附加參數的字符向量Rscript--no-environ.

renice

為工作進程設置的數字‘niceness’,例如15 表示低優先級。 OS-dependent:詳情請參閱psnice

rshcmd

要在主機上運行以在另一台主機上啟動進程的命令。默認為 ssh

user

與另一台主機通信時使用的用戶名。

manual

邏輯性強。如果為 true,則需要手動運行工作人員。

methods

邏輯性強。如果為 true(默認),工作線程將加載 methods 包:不加載它可以節省大約 30% 的集群啟動 CPU 時間。

useXDR

邏輯性強。如果 true(默認)序列化將使用 XDR:其中要傳輸大量數據並且所有節點都是小端,如果將其設置為 false,則通信可能會快得多。

setup_strategy

特點。如果"parallel"(默認)如果可能的話,工作人員將在集群設置期間並行啟動,現在適用於同構"PSOCK"包含所有工作人員的集群自動啟動(manual = FALSE)在本地機器上。工作線程將在其他集群上按順序啟動,在所有集群上setup_strategy = "sequential"等等R3.6.0 及更早版本。此選項僅供專家使用(例如調試),並且可能會在 R 的未來版本中刪除。

函數 makeForkCluster 通過分叉創建套接字集群(因此在 Windows 上不可用)。它支持選項 porttimeoutoutfile ,並始終使用 useXDR = FALSE 。強烈建議不要將 "FORK" 集群與 GUI front-ends 或多線程庫一起使用。有關詳細信息,請參閱mcfork

通過調用來關閉工人是一個很好的做法stopCluster:但是,一旦工作人員正在偵聽命令的套接字變得不可用,工作人員將自行終止,如果主設備R會話已完成(或其進程終止)。

函數 setDefaultCluster 將集群注冊為當前會話的默認集群。使用 setDefaultCluster(NULL) 會刪除已注冊的集群,就像停止該集群一樣。

對於集群創建者來說,是 c("SOCKcluster", "cluster") 類的對象。

對於默認簇 setter 和 getter,注冊的默認簇或NULL(如果沒有這樣的簇)。

注意

選項 homogeneous = TRUE 多年來一直被記錄為“所有主機都運行相同的設置嗎?”,但這顯然比其作者的意圖更具限製性,並且代碼並不要求這樣做。

目前的解釋homogeneous = TRUE就是它Rscript可以在每個工作人員上使用相同的路徑啟動。該路徑由選項給出rscript並默認為完整路徑Rscript在主人身上。 (工作人員不需要運行相同版本的R作為主人,甚至也不作為彼此。)

對於 homogeneous = FALSE ,工作人員上的 Rscript 可在其默認 shell 路徑中找到。

對於在單個多核主機上運行 master 和worker 的非常常見的用法,默認設置是合適的。

套接字 connection 用於從主進程到每個工作進程進行通信,因此當主進程啟動時,可能需要增加最大連接數(默認為 128,但有些將被使用)。

作者

Luke Tierney and R Core.

Derived from the snow package.

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Create a Parallel Socket Cluster。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。