并行预测
Parallel predict
我正在尝试在我的 Windows 机器上并行 运行 predict()
。这适用于较小的数据集,但不能很好地扩展,因为每个过程都会创建数据框的新副本。有没有办法在不制作临时副本的情况下并行 运行?
我的代码(仅对this原始代码进行了少量修改):
library(foreach)
library(doSNOW)
fit <- lm(Employed ~ ., data = longley)
scale <- 100
longley2 <- (longley[rep(seq(nrow(longley)), scale), ])
num_splits <-4
cl <- makeCluster(num_splits)
registerDoSNOW(cl)
split_testing<-sort(rank(1:nrow(longley))%%num_splits)
predictions<-foreach(i= unique(split_testing),
.combine = c, .packages=c("stats")) %dopar% {
predict(fit, newdata=longley2[split_testing == i, ])
}
stopCluster(cl)
我正在使用简单的数据复制来测试它。使用 scale
10 或 1000 它可以正常工作,但我想使用 scale <- 1000000
使其成为 运行 - 具有 16M 行的数据框(1.86GB 数据框,如 object_size()
所示来自 pryr
。请注意,必要时我也可以使用 Linux 机器,如果这是唯一的选择。
您可以使用 itertools
包中的 isplitRows
函数来仅发送任务所需的 longley2
部分:
library(itertools)
predictions <-
foreach(d=isplitRows(longley2, chunks=num_splits),
.combine=c, .packages=c("stats")) %dopar% {
predict(fit, newdata=d)
}
这可以防止整个 longley2
数据框自动导出到每个 worker 并稍微简化代码。
我正在尝试在我的 Windows 机器上并行 运行 predict()
。这适用于较小的数据集,但不能很好地扩展,因为每个过程都会创建数据框的新副本。有没有办法在不制作临时副本的情况下并行 运行?
我的代码(仅对this原始代码进行了少量修改):
library(foreach)
library(doSNOW)
fit <- lm(Employed ~ ., data = longley)
scale <- 100
longley2 <- (longley[rep(seq(nrow(longley)), scale), ])
num_splits <-4
cl <- makeCluster(num_splits)
registerDoSNOW(cl)
split_testing<-sort(rank(1:nrow(longley))%%num_splits)
predictions<-foreach(i= unique(split_testing),
.combine = c, .packages=c("stats")) %dopar% {
predict(fit, newdata=longley2[split_testing == i, ])
}
stopCluster(cl)
我正在使用简单的数据复制来测试它。使用 scale
10 或 1000 它可以正常工作,但我想使用 scale <- 1000000
使其成为 运行 - 具有 16M 行的数据框(1.86GB 数据框,如 object_size()
所示来自 pryr
。请注意,必要时我也可以使用 Linux 机器,如果这是唯一的选择。
您可以使用 itertools
包中的 isplitRows
函数来仅发送任务所需的 longley2
部分:
library(itertools)
predictions <-
foreach(d=isplitRows(longley2, chunks=num_splits),
.combine=c, .packages=c("stats")) %dopar% {
predict(fit, newdata=d)
}
这可以防止整个 longley2
数据框自动导出到每个 worker 并稍微简化代码。