首页 > 解决方案 > 如何在集群上使用 doRedis 和 caret?

问题描述

我一直在使用 R 中的doRedis包来尝试在集群上运行一些代码。我有一台 Windows 机器和一台运行 Ubuntu 的机器(这是安装 redis 的地方)。

我可以愉快地运行 doRedis 文档中的示例,但我的目标是能够将 doRedis 与插入符号一起用于某些机器学习应用程序。我的理解是插入符号允许并行化,似乎其他人已经让它工作了,但对于我的生活,我无法弄清楚我哪里出错了。

我找到了这个例子并将其稍微修改为以下内容:

library(caret)
library(doRedis)

dat = iris

registerDoRedis("jobs",
                host = "xyz")

xgb.grid = expand.grid(nrounds = c(10, 200),
                       max_depth = c(6),
                       eta = c(0.05),
                       gamma = c(0.01),
                       colsample_bytree = 1,
                       min_child_weight = 1,
                       subsample = 1)

ctrl = trainControl(method = 'cv',
                    number = 10,
                    verboseIter = F,
                    allowParallel = T)

set.seed(13)
xgb1 <- train(Species ~ .,
              data = dat,
              method = "xgbTree",
              trControl = ctrl,
              verbose = F,
              tuneGrid = xgb.grid)

removeQueue("jobs")

这仅在本地计算机上运行,​​并且不会分发到 redis 队列(我可以使用doRedis::jobs()以及redis-cli --stat在 Ubuntu 终端中运行来查看它,两者都显示没有作业被传递到服务器)。

我错过了什么?

标签: rparallel-processingxgboostr-caretr-doredis

解决方案


请查看https://topepo.github.io/caret/parallel-processing.html

相关报价:

train, rfe, sbf,bagavNNet在它们各自的控制文件中被赋予了一个额外的参数,称为allowParallel默认为 TRUE。当为 TRUE 时,如果注册了并行后端(例如 doMC),则代码将并行执行。

帮助您调试此问题的一个建议是首先尝试在本地使用 redis,如果可行,请指定另一台服务器。


推荐阅读