标签: domc

R中doMC和doParallel之间的区别

关于函数R doParalleldoMCR 之间的区别是什么foreachdoParallel支持windows,unix-like,同时doMC仅支持unix-like.换句话说,为什么doParallel不能doMC直接替换?谢谢.

更新: doParallel是建立在parallel,这基本上是对等合并multicore,并snow和自动使用系统的相应工具.因此,我们可以doParallel用来支持多系统.换句话说,我们可以doParallel用来代替doMC.

参考:http://michaeljkoontz.weebly.com/uploads/1/9/9/4/19940979/parallel.pdf

顺便说一下,registerDoParallel(ncores=3)和之间有什么区别

cl <- makeCluster(3)
registerDoParallel(cl)
Run Code Online (Sandbox Code Playgroud)

它似乎registerDoParallel(ncores=3)可以自动停止集群,而第二个不会自动停止和需要stopCluster(cl).

参考:http://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf

parallel-processing r domc doparallel

49
推荐指数
1
解决办法
1万
查看次数

doMC vs doSNOW vs doSMP vs doMPI:为什么'foreach'的各种并行后端功能不相同?

我已经在各种机器上运行了一些代码测试代码,总是得到相同的结果.我认为各种do ...包背后的哲学是它们可以互换地用作foreach的%dopar%的后端.为什么不是这样?

例如,此代码段有效:

library(plyr)
library(doMC)
registerDoMC()
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE)
Run Code Online (Sandbox Code Playgroud)

虽然这些代码段中的每一个都失败了:

library(plyr)
library(doSMP)
workers <- startWorkers(2)
registerDoSMP(workers)
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE) 
stopWorkers(workers)

library(plyr)
library(snow)
library(doSNOW)
cl <- makeCluster(2, type = "SOCK")
registerDoSNOW(cl)
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE) 
stopCluster(cl)

library(plyr)
library(doMPI)
cl <- startMPIcluster(count = 2) …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r plyr domc

28
推荐指数
1
解决办法
5249
查看次数

R multicore mcfork():无法分叉:无法分配内存

我得到了名义上的错误:

mcfork(): Unable to fork: Cannot allocate memory
Run Code Online (Sandbox Code Playgroud)

试图用mcapply运行一个函数后,但top我说我是51%

这是在EC2实例上,但我确实有最新的R.

有谁知道还有什么可以导致这个错误?

谢谢,

-N

memory multicore r amazon-ec2 domc

18
推荐指数
2
解决办法
9382
查看次数

是否有可能获得带有foreach的进度条和后端的"多核类型"

使用foreachdoMC后端使用"多核"并行性时(我使用doMC时,我调查了其他包不允许从我想要获取进度条,使用进度包,但任何进度)这适用于Linux终端,即没有tcltk弹出窗口).

鉴于它使用分叉,我可以想象它可能不可能,但我不确定.

预期用途是指示并行加载连接100个文件时的进度(通常在#!Rscript中)

我看过几个帖子,比如在R中使用"foreach()"函数时如何创建进度条?.很高兴为此奖励.

编辑

为有人向我展示500分的赏金

  1. 使用foreach和多核(分叉)类型的并行性
  2. 得到一个进度条
  3. 使用futile.logger获取日志记录

Reprex

# load packages                                                                                                        
library("futile.logger")                                                                                               
library("data.table")                                                                                                  
library("foreach")                                                                                                     
# create temp dir                                                                                                      
tmp_dir <- tempdir()                                                                                                   
# create names for 200 files to be created                                                                             
nb_files <- 200L                                                                                                       
file_names <- file.path(tmp_dir, sprintf("file_%s.txt", 1:nb_files))                                                   
# make it reproducible                                                                                                 
set.seed(1L)                                                                                                           
nb_rows <- 1000L                                                                                                       
nb_columns <- 10L                                                                                                      
# create those 200 files sequentially                                                                                  
foreach(file_i = file_names) %do%                                                                                      
{                                                                                                                      
    DT <- as.data.table(matrix(data = runif(n = nb_rows * nb_columns), nrow …
Run Code Online (Sandbox Code Playgroud)

r domc progress-bar parallel-foreach

12
推荐指数
1
解决办法
1189
查看次数

package doMC不适用于install.packages中的R版本3.0.0警告

对于像doMC和doSMP这样的一些软件包,我会收到警告和无法访问库(doMC).如下图所示,我对subselect没有问题,因此没有文件/目录权限问题.还试过repo = http://cran.us.r-project.org和其他人,没有运气.请指教.

ps:对于意想不到的日文字符,我不知道; 我认为这是一个可分离的问题; 尚未得到support.rstudio.org/help/discussions/problems/6009-japanese-characters-show-unexpectedly的回复

> install.packages('doMC')
Warning in install.packages :
  package ?oMC?is not available (for R version 3.0.0)
Installing package into ?:/Users/YULE/Documents/R/win-library/3.0?(as ?ib?is unspecified)
Warning in install.packages :
  package ?oMC?is not available (for R version 3.0.0)
> install.packages('subselect')
Installing package into ?:/Users/YULE/Documents/R/win-library/3.0?(as ?ib?is unspecified)
trying URL 'http://cran.rstudio.com/bin/windows/contrib/3.0/subselect_0.12-2.zip'
Content type 'application/zip' length 1295653 bytes (1.2 Mb)
opened URL
downloaded 1.2 Mb

package ?ubselect?successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\YULE\AppData\Local\Temp\Rtmp6DK5mn\downloaded_packages
> library(subselect)
--------------------------------------------------------------------------------- …
Run Code Online (Sandbox Code Playgroud)

windows r domc install.packages

9
推荐指数
2
解决办法
2万
查看次数

如果仅在包的描述中导入foreach,如何使用%dopar%

如果在包的描述中仅导入(不依赖)foreach,如何在包的功能中避免"找不到函数"%dopar%""?有没有像foreach ::%dopar%的方式,因为我在函数中使用foreach :: foreach?谢谢.

代码如:

在功能上

foreach::foreach(1:9) %dopar% {

...}
Run Code Online (Sandbox Code Playgroud)

在描述中

Imports: 
    Matrix,
    parallel,
    foreach,
   doParallel
Run Code Online (Sandbox Code Playgroud)

foreach r package domc doparallel

7
推荐指数
3
解决办法
2013
查看次数

如何在Windows下使用doMC或glmnet的替代并行处理实现?

我在Rstudio中使用R 3.3.1的Win7 OS.意图是glmnet与并行处理一起使用.从?glmnet帮助:

parallel:如果TRUE,使用平行的foreach适合每个折叠.必须事先注册并行,例如doMC或其他.请参阅下面的示例.

从引用的例子:

# Parallel
require(doMC)
registerDoMC(cores=4)
Run Code Online (Sandbox Code Playgroud)

install.packages('doMC')返回包不可用.手动检查CRAN可提供可下载的UNIX代码,但Windows二进制文件不可用.

我仍然可以doMC在我的Win7操作系统下使用相同的代码或什么是有用的替代方案?

parallel-processing foreach r domc

7
推荐指数
1
解决办法
3557
查看次数

如何杀死doMC工作人员?

doMC的文档似乎非常稀疏,仅列出了doMC-package和registerDoMC().我遇到的问题是我会通过doMC/foreach产生几个工作者,但是当工作完成后,他们只是坐在那里占用内存.我可以去寻找他们的进程ID,但我经常意外地杀死主进程.

library(doMC)
library(foreach)

registerDoMC(32)

foreach(i=1:32) %dopar% foo()

##kill command here?
Run Code Online (Sandbox Code Playgroud)

我试过跟随registerDoSEQ(),但它似乎没有杀掉进程.

parallel-processing foreach r domc

6
推荐指数
2
解决办法
2539
查看次数

R foreach不使用多核

我有一个案例,foreach使用doMC后端在不同的机器上产生不同的行为.

在运行Ubuntu 12.04.4 LTS的Linux服务器上,以下代码(改编自foreach vingette)在单个内核上同时运行5个作业,这不是所需的行为.

library(foreach)
library(doMC)

registerDoMC(cores=5)
getDoParWorkers()

x <- iris[which(iris[,5] != "setosa"), c(1,5)]
trials <- 10000
r <- foreach(icount(trials), .combine=cbind) %dopar% {
  ind <- sample(100, 100, replace=TRUE)
  result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit))
  coefficients(result1)
}
Run Code Online (Sandbox Code Playgroud)

会话信息:

> sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C         LC_TIME=C            LC_COLLATE=C         LC_MONETARY=C       
 [6] LC_MESSAGES=C        LC_PAPER=C           LC_NAME=C            LC_ADDRESS=C         LC_TELEPHONE=C      
[11] LC_MEASUREMENT=C     LC_IDENTIFICATION=C 

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods   base     

other …
Run Code Online (Sandbox Code Playgroud)

foreach r domc

6
推荐指数
1
解决办法
771
查看次数

Ubuntu R ForEach/DoMC不使用多核

我在R中构建了一个函数(运行在Ubuntu 12.04 LTS 64位,4核i7服务器,多线程和6gb ram),我使用标准软件包安装了R:

sudo apt-get install r-base r-recommended r-base-dev
sudo apt-get install r-cran-multicore r-cran-iterators r-cran-foreach r-cran-domc 
Run Code Online (Sandbox Code Playgroud)

注:我也安装foreachdoMC内部R(它没有帮助),像我安装的deldir软件包:

install.packages(c("deldir"), dependencies = TRUE)
Run Code Online (Sandbox Code Playgroud)

我的函数运行正常,但它不使用并行核心(只需最多输出8个):

library(deldir)
library(foreach)
library(doMC)
registerDoMC(cores=8)

#getDoParWorkers()
#getDoParName()
#getDoParVersion()

# loop through files
inputfiles <- dir(path="/home/geoadmin/data/objects/", pattern='.txt')
for( inputfilenr in 1:length(inputfiles))
{
# set file variables    
curinputfile = paste("/home/geoadmin/data/objects/",inputfiles[[inputfilenr]], sep = "", collapse = NULL)
print (curinputfile)
curoutputfile = paste("/home/geoadmin/data/objects/",substr(inputfiles[[inputfilenr]], start=1, stop=10), '.out', sep = "", collapse = NULL)
# select the …
Run Code Online (Sandbox Code Playgroud)

ubuntu foreach r domc

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

允许foreach工作人员向其他工作人员注册和分发子任务

我有一个R代码,涉及几个foreach工作者并行执行某些任务.我为此目的使用foreach和doMC.我想让每个foreach工作人员招募一些新的工作人员,并将可以并行化的代码的一些部分分发给他们.

当前代码如下:

require(doMC)
require(foreach)
registerDoMC(cores = 8)

foreach (i = (1:8)) %dopar% {
<<some code here>>
    for (j in c(1:4))  {
    <<some other code here>>
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个理想的代码,看起来像:

require(doMC)
require(foreach)
registerDoMC(cores = 8)

foreach (i = (1:8)) %dopar% {
<<some code here>>
    foreach (j = (1:4)) %dopar% {
    <<some other code here>>
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里看到了使用doSNOW和doMC的多范式并行性的一个例子(https://www.rmetrics.org/files/Meielisalp2009/Presentations/Lewis.pdf#page=17).但是,我不知道它是否符合我的要求.

而且,似乎嵌套的foreach不适用,因为它需要合并两个循环(见这里),而在我的情况下,这不是首选; 第二个循环只能帮助第一个循环代码的一部分.如果我错了,请纠正我.

谢谢.

parallel-processing foreach r cluster-computing domc

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

R中SQLite数据库的并行查询

我有一个大型数据库(~100Gb),我需要从中提取每个条目,对其执行一些比较,然后存储这些比较的结果。我尝试在单个 R 会话中运行并行查询,但没有成功。我可以同时运行多个 R 会话,但我正在寻找更好的方法。这是我尝试的:

library(RSQLite)
library(data.table)
library(foreach)
library(doMC)



#---------
# SETUP
#---------


#connect to db
db <- dbConnect(SQLite(), dbname="genes_drug_combos.sqlite")


#---------
# QUERY
#---------
# 856086 combos = 1309 * 109 * 6

registerDoMC(8)

#I would run 6 seperate R sessions (one for each i)
res_list <- foreach(i=1:6) %dopar% {

  a <- i*109-108
  b <- i*109

  pb  <- txtProgressBar(min=a, max=b, style=3)
  res <- list()

  for (j in a:b) {

    #get preds for drug combos
    statement   <- paste("SELECT * from combo_tstats …
Run Code Online (Sandbox Code Playgroud)

parallel-processing foreach domc rsqlite

4
推荐指数
1
解决办法
2772
查看次数