![](/img/trans.png)
[英]makecluster in R opens parallel sockets but does not use them all
[英]makeCluster with parallelSVM in R takes up all Memory and swap
我正在嘗試在大型數據集上訓練SVM模型(〜110k訓練點)。 這是代碼示例,我在其中使用parallelSVM軟件包來並行化4核Linux機器上訓練數據子集的訓練步驟。
numcore = 4
train.time = c()
for(i in 1:5)
{
cl = makeCluster(4)
registerDoParallel(cores=numCore)
getDoParWorkers()
dummy = train_train[1:10000*i,]
begin = Sys.time()
model.svm = parallelSVM(as.factor(target) ~ .,data =dummy,
numberCores=detectCores(),probability = T)
end = Sys.time() - begin
train.time = c(train.time,end)
stopCluster(cl)
registerDoSEQ()
}
此代碼段的想法是通過逐漸增加虛擬訓練集的大小來估計在整個數據集上訓練模型所需的時間。 在運行了上面的代碼以進行10,000和20,000個訓練樣本后, 這是系統監視器中的內存和交換歷史記錄使用情況統計信息。經過4次for循環運行后,內存和交換記錄的使用率均約為95%,我得到以下信息錯誤:
summary.connection(connection)中的錯誤:無效的連接
有關如何解決此問題的任何想法? 使用stopCluster()函數后,是否有辦法釋放集群使用的內存?
請考慮以下事實:我絕對是該領域的初學者。 對提出的解決方案的簡短解釋將不勝感激。 謝謝。
你的線
registerDoParallel(cores=numCore)
創建一個節點數等於numCore
的新集群(尚未說明)。 這個集群永遠不會被破壞,因此,每次循環迭代都將啟動更多新的R進程。 由於您已經使用cl = makeCluster(4)
創建了集群,因此您應該使用
registerDoParallel(cl)
代替。
(和移動makeCluster
, registerDoParallel
, stopCluster
和registerDoSEQ
調用循環外)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.