标签: r-doredis

doRedis如何运作?

我一直在玩redis数据库R接口,以及foreachdoRedis并行后端.我有几个问题,帮助我更好地应用此工具:

  1. doMC,doSMP,doSnow等似乎都可以通过在同一台计算机上调用工作进程,从列表和要应用的函数传递它们,然后收集结果来工作.在doMC的情况下,工作人员共享内存.但是,对于数据库如何提供相同的功能,我有点困惑.
  2. 当我将另一台从属计算机添加到doRedis作业队列时(如本视频所示),整个doredis数据库是否被发送到从属计算机?或者每个奴隶只是在特定时刻所需的数据(即列表的一个元素和要应用的函数).
  3. 如何将其他数据和函数显式传递给doRedis作业队列,每个从站都需要执行它的计算?
  4. 使用doRedis和foreach时,是否还有其他"陷阱"可能不适用于其他并行后端?

我知道这是很多问题,但我一直遇到这样一种情况,即我对并行处理如何工作的有限理解阻碍了我实现它的能力.例如,我最近尝试在大型数据库上并行化计算,并发现自己将整个数据库传递到我的集群上的每个节点,这一操作完全破坏了我从并行化中获得的任何优势.

谢谢!

parallel-processing r cluster-computing redis r-doredis

15
推荐指数
1
解决办法
1569
查看次数

在群集上运行时在插入符中发生错误

我通过doRedis在集群train中的插入符号中运行该函数.在大多数情况下,它是有效的,但我经常在这种性质的最后得到错误:

error calling combine function:
<simpleError: obj$state$numResults <= obj$state$numValues is not TRUE>
Run Code Online (Sandbox Code Playgroud)

Error in names(resamples) <- gsub("^\\.", "", names(resamples)) : 
  attempt to set an attribute on NULL
Run Code Online (Sandbox Code Playgroud)

当我跑步时,traceback()我得到:

5: nominalTrainWorkflow(dat = trainData, info = trainInfo, method = method, 
       ppOpts = preProcess, ctrl = trControl, lev = classLevels, 
       ...)
4: train.default(x, y, weights = w, ...)
3: train(x, y, weights = w, ...)
2: train.formula(couple ~ ., training.balanced, method = "nnet", 
       preProcess …
Run Code Online (Sandbox Code Playgroud)

r machine-learning cluster-computing r-doredis r-caret

5
推荐指数
1
解决办法
868
查看次数

如何在Windows上的R 3.0.1中安装doRedis软件包版本1.0.5?

当前最新版本的doRedis(1.1.0)存在一个错误,建议降级到1.0.5版本.但是,我无法在Windows XP上将1.0.5软件包安装到R 3.0.1中!

我试着按照" 安装旧版R包 " 的问题的答案:

  1. 托马斯答案对我不起作用:

    url <- 'http://cran.r-project.org/src/contrib/Archive/doRedis/doRedis_1.0.5.tar.gz'
    install.packages(url, contriburl=NULL, type="source")
    # Warning message:
    # package ‘http://cran.r-project.org/src/contrib/Archive/doRedis/doRedis_1.0.5.tar.gz’ is not available (for R version 3.0.1)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 直接编译(Mark Butler的回答) - 对我来说也不起作用,甚至在卸载以前安装的版本之后,甚至在安装后都没有devtools:

    c:\Program Files\R\R-3.0.1\bin>R CMD INSTALL doRedis_1.0.5.tar.gz
    * installing to library 'c:/Program Files/R/R-3.0.1/library'
    * installing *source* package 'doRedis' ...
    ** package 'doRedis' successfully unpacked and MD5 sums checked
    ** libs
    ERROR: compilation failed for package 'doRedis'
    * removing 'c:/Program Files/R/R-3.0.1/library/doRedis' …
    Run Code Online (Sandbox Code Playgroud)

r r-doredis

5
推荐指数
1
解决办法
2150
查看次数

Windows 7 上的 doRedis 一旦运行 foreach 循环就会出错

我有一个简单的设置如下:

Sys.info()
                 sysname                      release                      version                     nodename 
               "Windows"                      "7 x64" "build 7601, Service Pack 1"                "OCTAVE-WS21" 
                 machine                        login                         user               effective_user 
                "x86-64"                      "kjain"                      "kjain"                      "kjain" 
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 R 中的 doRedis 包来设置集群。我的机器上安装了“2.8.2101”版本的 Redis。首先,我尝试在本地计算机上(在 RStudio 中)运行作业:

library(doRedis)
registerDoRedis('jobs')
getDoParName()
#[1] "doRedis"
getDoParRegistered()
#[1] TRUE
startLocalWorkers(n = 2,queue = 'jobs')
getDoParWorkers()
#[1] 2
Run Code Online (Sandbox Code Playgroud)

我已检查 Redis 是否作为服务运行(redis-cli ping 返回“PONG”)

但是,当我尝试运行一个简单的 foreach 循环时,出现以下错误;即使我重新启动一切,我也会收到相同的错误:

workerIndex = foreach(i=1:100) %dopar% {i}
Run Code Online (Sandbox Code Playgroud)

sprintf("%s:%.0f.env",queue,ID) 中出错:格式“%.0f”无效;对字符对象使用格式 %s

显然,顺序版本工作得很好:

workerIndex = foreach(i=1:100) %do% {i}
workerIndex
#[[1]]
#[1] 1

#[[2]]
#[1] 2
etc.
Run Code Online (Sandbox Code Playgroud)

请帮忙!任何意见/指示表示赞赏。如果您需要更多信息,请告诉我。

foreach r r-doredis

3
推荐指数
1
解决办法
311
查看次数