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 |
類 |
細節
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
-
去哪裏指揮
stdout
和stderr
工作人員的連接輸出。""
表示沒有重定向(這可能隻對本地計算機上的工作人員有用)。默認為‘/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 上不可用)。它支持選項 port
、 timeout
和 outfile
,並始終使用 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 mcparallel 在單獨的進程中異步計算 R 表達式
- R mcfork 分叉當前 R 進程的副本
- R mcaffinity 獲取或設置當前進程的CPU親和性掩碼
- R mclapply 使用 Forking 的 lapply 和 mapply 並行版本
- R pvec 使用 Forking 並行化向量映射函數
- R children 用於管理分叉進程的低級函數
- R clusterApply 使用集群應用操作
- R RNGstreams Pierre L'Ecuyer 的 RngStreams 的實施
- R detectCores 檢測CPU核心數
- R splitIndices 劃分任務在集群中分布
- R SparkR partitionBy用法及代碼示例
- R purrr accumulate 累積向量縮減的中間結果
- R purrr imap 將函數應用於向量的每個元素及其索引
- R purrr list_transpose 轉置列表
- R purrr as_vector 將列表強製轉換為向量
- R purrr map_if 有條件地將函數應用於向量的每個元素
- R purrr map2 映射兩個輸入
- R purrr map_depth 在給定深度映射/修改元素
- R SparkR printSchema用法及代碼示例
- R purrr list_simplify 將列表簡化為原子或 S3 向量
- R purrr rerun 多次重新運行表達式
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Create a Parallel Socket Cluster。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。