2017-05-10 17 views
2

我有以下問題。R:makeCluster中的錯誤(多核):無法打開連接

爲什麼在標準節點上提交作業(最大內核數爲56)時一切正常,但是當我向large_memory節點(最大內核數128)提交相同的作業/代碼時,出現錯誤?

- 並行化代碼中R:

no_cores < - detectCores() - 1

CL < - makeCluster(no_cores,OUTFILE = paste0( './ info_parallel.log'))

- ERROR ...

在錯誤SocketConnection處(主,端口=端口,集團王= TRUE,開= 「A + B」:

無法打開連接

電話:... doTryCatch - > recvData - > makeSOCKmaster - > SocketConnection處

另外:警告消息:

在SocketConnection處(主,端口=端口,阻斷= TRUE,開放= 「A + b」,:

本地主機:11232不能被打開

執行暫停

錯誤在反序列化(節點$ CON):從連接讀取錯誤

電話:... doTryCatch - > recvData - > recvData.SOCKnode - >反序列化

執行停止

錯誤在反序列化(節點$ CON):從連接讀取錯誤

電話:... doTryCatch - > recvData - > recvData.SOCKnode - >反序列化

執行停止


正如我所說的R代碼運行的標準節點上細,因此我假定它與large_memory節點的問題。那可能是什麼?

謝謝,

+0

谷歌搜索的許多答案是以下答案: 可能是防火牆站在計算節點和登錄節點之間,或者登錄節點不允許連接到計算節點的端口11232。 - 我嘗試從登錄節點ssh到計算節點;然後直接在計算節點上運行R代碼。或者將連接設置到端口11232.但仍然有相同的錯誤。 –

回答

3

最後,我提出了它。

此錯誤是由R中連接的默認限制引起的。連接的默認值爲128. 此處的「連接」是指代碼中使用的每個節點的核心數。

雖然在代碼中,錯誤發生在「cl < - makeCluster ........「

no_cores < - detectCores() - 1

CL < - makeCluster(no_cores,OUTFILE = paste0( './ info_parallel.log'))

這裏,detectCores()將獲得節點上的最大內核數量

在集羣的標準節點中,每個節點的內核數量少於128個,這就是爲什麼R代碼可以在標準節點上運行良好的原因;而每個核心數量在我的情況下,在large_memory分區中的值是128。它默認達到核心數量的限制。因此,錯誤顯示爲:

無法打開連接

我試圖設置芯120的數量爲large_memory節點上運行的作業(最大數量的核= 128)。沒有錯誤。代碼運行良好。

CL < - makeCluster(,OUTFILE = paste0( './ info_parallel.log'))

謝謝!

+0

這是正確的;有一個R會話可以隨時打開的硬編碼連接數; 'NCONNECTIONS = 128',其中三個總是被佔用,所以最多可以有125個並行的PSOCK工作者(假設你沒有任何打開的文件或其他連接)。如果您願意從源重建R,則可以手動增加此限制。我已成功嘗試900.有關此問題的更多詳細信息(「你並不孤單」),請參閱 https://github.com/HenrikBengtsson/Wishlist-for-R/issues/28 – HenrikB

相關問題