r - 如何在集群上使用 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 终端中运行来查看它,两者都显示没有作业被传递到服务器)。
我错过了什么?
解决方案
请查看https://topepo.github.io/caret/parallel-processing.html
相关报价:
train
,rfe
,sbf
,bag
和avNNet
在它们各自的控制文件中被赋予了一个额外的参数,称为allowParallel
默认为 TRUE。当为 TRUE 时,如果注册了并行后端(例如 doMC),则代码将并行执行。
帮助您调试此问题的一个建议是首先尝试在本地使用 redis,如果可行,请指定另一台服务器。
推荐阅读
- python - 在 Django 中获取变量 OneToOneField
- php - 在laravel路由中使用参数调用自定义类方法
- r - R:合并行以导出到excel
- java - PANIC:损坏的 AVD 系统路径。检查您的 ANDROID_SDK_ROOT
- html - 高密度显示器上笔画宽度中的 REM 单位
- c# - 如何通过c#中的某些条件将一个datagridview中的行添加到另一个空datagridview
- javascript - 循环创建文件,添加文件而不是覆盖
- c++ - 如何在 x86 处理器上实现“加锁”
- javascript - 保存json文件的困难
- c++ - 将 AVFrame 转换为 QVideoFrame 时颜色错误