关于R中并行后端的2个问题:
1)parallel::detectCores()我的机器上没有检测到正确的内核数量:
parallel::detectCores(logical = FALSE)
[1] 24
parallel::detectCores(logical = TRUE)
[1] 48
Run Code Online (Sandbox Code Playgroud)
2)当运行插入符号模型时,每当我选择超过64个核心时,即使每个进程都已成功完成(因为它出现在日志中),模型也无法完成.无论我在32核计算机上尝试使用多少核心,我都会发生这种情况,当我运行makeCluster(64)它时,它会工作并makeCluster(65)挂起.
library(caret)
library(doParallel)
library(xgboost)
iris <- iris[1:100,]
iris$Species <- as.factor(as.character(iris$Species))
tc <- trainControl(method="repeatedcv",
classProb = TRUE,
verboseIter = TRUE,
allowParallel = TRUE)
stopCluster(cl)
cl <- makeCluster(65, outfile="D:\\R_data\\Log\\test.txt")
registerDoParallel(cl)
system.time(
train.rf <- train(Species ~ .,data=iris, method="xgbTree", trControl=tc, metric = "Accuracy", verbose = TRUE)
)
Run Code Online (Sandbox Code Playgroud)
上面挂起20-30分钟或更长时间,永远不会执行,而下面的代码在20秒内完成:
> cl <- makeCluster(64, outfile="D:\\R_data\\Log\\test2.txt")
> registerDoParallel(cl)
> system.time(
+ train.rf <- train(Species ~ .,data=iris, method="xgbTree", trControl=tc, metric …Run Code Online (Sandbox Code Playgroud)