问题标签 [domc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
255 浏览

r - gbm + plyr + doMC 无法在 R 中打开连接

我有一个关于美国房价的数据集。数据跨越 50 个不同的州。我想以并行方式为每个州构建一个 GBM。我还想利用 R 包中的cv.folds参数gbm。我想做一个 3 倍的 CV 以获得最佳n.trees价值。

我的代码:

上面的代码返回以下错误:

但是,如果我更改cv.folds = 3代码cv.folds = 0运行良好并且我得到了 50 GBM,但它们没有针对n.trees.

请注意,如果我设置,.parallel = FALSE那么代码可以正常工作,但需要很长时间,因为它会在单核上运行。当我尝试使用foreach.

我怎样才能解决这个问题?您的帮助将不胜感激。

0 投票
1 回答
443 浏览

r - R doMC库detectCores误报核心数

一位 R 讲师提供了此代码,以确保学生仅在其 PC/笔记本电脑上使用一半的内核进行并行处理。但是,如下所示,我的 mac 的系统报告说我有 4 个,而这个库似乎检测到 8 个。为了确保至少 1 或 2 个内核是空闲的,这段代码设置是否正确?或者我应该改变最后一行,也许用一个ifelse()语句告诉它当系统规范不同意它的检测时该怎么做?

代码:

输出(它看到多少个核心):

什么“关于这台 Mac”->“系统报告”报告包括核心在内的规格:

0 投票
0 回答
366 浏览

r - 为什么 doparallel::getDoParWorkers() 返回 14 但在我完成循环之后?

我的理解是,如果使用 eg 注册一个隐式集群,registerDoParallel(cores = 14)那么在循环结束时,集群会自动关闭。

在尝试调试另一个问题时,我想看看到工作人员的链接(我不知道正确的术语)是否确实关闭了。

“获取有关并行后端的信息”下的其他 doMC文档:“要了解 foreach 将使用多少个工作人员,您可以使用 getDoParWorkers 函数: > getDoParWorkers()

我预计在运行多巴循环后,这将恢复默认值。但是,我注意到它被记住了,因为如果我当前运行getDoParWorkers()它会返回 14,这是我在我的代码块中声明的内容,registerDoParallel(cores = 14)但是如果我这样做registerDoParallel(cores = 10),则执行一个 dopar 循环,然后getDoParWorkers()返回 10。

这是否意味着即使我完成了循环,仍然有注册的并行后端?

0 投票
0 回答
1030 浏览

r - 进度条在 foreach 设置中不起作用

我在 Ubuntu 系统中有以下foreach设置,我需要一个进度条来监控进度。

但是,上述实现不起作用,但输出respar符合预期。如果这种方法有问题,您能否发表评论?

注意:问题是确定这种创建进度条的方法中的错误。其他类似的问题没有处理用于创建进度条的背景设置组合。

0 投票
1 回答
258 浏览

r - 使 R foreach 和 doMC %dopar% 与单线程 data.table fwrite 一起工作?

我在我的 Debian 9 PC 和 Red Hat 4.8.5 高性能计算集群上间歇性地遇到了 %dopar% (带有 doMC 后端)和 fwrite() 的问题。行为并不总是一致的,但简而言之,fwrite 和 foreach 故障——即使特别要求 fwrite 仅使用一个内核(通过 setDTthreads 或 fwrite 中的 nThread)以避免并行工作人员的怪异。在最近的案例中,一个实例没有写入任何文件,而在另一对实例中,12 个文件中只写入了 1 到 4 个。更重要的是,foreach 没有正确返回。fwrite 不是 foreach 循环中的最后一行;之后,它打算返回一些东西,但它返回的是 NULL。同时,没有检测到错误——集群上的退出状态为 0,并且不打印任何警告。

如果使用顺序 %do%,它会按预期工作(并且可以使用多个线程进行 fwrite)。我不确定我能否提供一个可重现的例子,因为结果并不一致。对于最新行为,我使用的是 R 3.3.3、data.table 1.10.4-3、doMC 1.3.5 和 foreach 1.4.4。我使用来自 GitHub 的最新版本的 data.table v1.10.5 遇到了同样的问题。该问题似乎与文件大小有关;它倾向于在相对较小的文件上正常工作,但是一旦接近 0.3GB 及以上,它就会变得混乱。实际上,在编写较小的文件(相同 data.tables 的子集)时,相同的代码也可以工作。

我不知道这真的是发布这个的最佳位置——我只是在这里问这个,因为 GitHub 页面指定我应该在提交问题之前。那么,有没有人遇到过这个问题,有没有人知道解决方法(即,如何在使用单线程 fwrite 和大型数据集时保留多核并行循环)?

0 投票
0 回答
164 浏览

r - dopar glmnet 静默失败

我正在使用glmnet适合某些模型并正在交叉验证lambda. 我cv.glmnet默认使用(因为它确实完成了内部的交叉验证lambda),但下面我将重点关注该功能的第一步,这是导致问题的一个步骤。

第一个数据设置。我没有制作可重现的示例,也无法共享原始数据,但dim(smat)大约有 470 万行乘 50 列,其中大约一半是密集的。我尝试了一种简单的方法来用完全随机的列重现问题,但无济于事。

以下是cv.glmnet在传递给之前所做的定制版本cv.lognet

这似乎工作正常,但速度很慢。如果我们将其替换为等效版本parallel = TRUE

调用在某些节点上静默失败(glmnet与之相比any(sapply(train_models, is.null))is FALSE):

哪个任务失败是不一致的(所以这不是问题,例如,cv_grp = 2 本身)。我试过捕获输出glmnet并检查is.null无济于事。我还添加了.verbose = TRUE标志foreach,没有出现任何可疑的情况。请注意,语法是辅助的,因为(也导致类似的失败)data.table的默认行为依赖于使用来拆分训练和测试集。cv.glmnetwhich = foldid == i

我该如何调试这个问题?为什么任务在并行化时可能会失败,但不是串行化时,我如何才能捕捉到任务失败的情况(例如,我可以尝试并重试)?

当前环境信息:

0 投票
1 回答
70 浏览

r - 使用 mclapply 或 %dopar% 从对角线切片组装矩阵,例如 Matrix::bandSparse

现在我正在使用 R 中的一些巨大的矩阵,我需要能够使用对角带重新组装它们。出于编程原因(为了避免对大小为 n 的矩阵(数百万次计算)进行 n*n 操作,我只想进行 2n 次计算(数千次计算),因此选择在对角线带上运行我的函数矩阵。现在,我有了结果,但需要获取这些矩阵切片并以允许我使用多个处理器的方式组装它们。

foreach 和 mclapply 都不允许我在循环之外修改对象,因此我正在尝试考虑并行解决方案。如果有一些函数可以将非对角带分配给可以可靠完成的矩阵的一部分,我完全赞成。

输入:

所需的输出(并行操作):

我越看这个,我需要一个并行化的 Matrix::bandSparse 版本。

0 投票
3 回答
2964 浏览

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

在使用foreachdoMC后端使用“多核”并行性时(我在查看它时使用 doMC,其他包不允许从我想使用进度包获取进度条进行日志记录,但是任何进度(这适用于 linux 终端,即没有 tcltk 弹出窗口)可以做到。

鉴于它使用分叉,我可以想象这可能是不可能的,但我不确定。

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

我看过一些帖子,比如在 R 中使用“foreach()”函数时如何创建进度条?. 很高兴为此提供赏金。

编辑

为向我展示如何操作的人提供 500 点赏金

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

代表

期望的输出

请注意,进度条不会与打印行混淆)

编辑 2

赏金结束后,没有什么能接近预期的结果。

在进度条中记录会使一切变得混乱。如果有人得到正确的结果,我将给予另一个基于结果的赏金。

0 投票
0 回答
389 浏览

r - R iconv() 错误 - 不支持从“latin1”到“ASCII”的转换

我想安装R包“doMC”,代码是

install.packages("doMC", repos="http://R-Forge.R-project.org")

然后我收到以下错误:

那么,我该如何解决这个问题呢?

我的操作系统是:

和我的 R 版本:

0 投票
2 回答
113 浏览

r - 在 CRAN 上获取一个包以通过带有 linux 特定包 (doMC) 的 winbuilder 测试(在 CRAN 上获取它)

所以,我准备在 CRAN 上获取我的包,但我使用了 doMC 包,它仅在 CRAN 上的 linux 上可用(它在 R-forge for windows 上可用)。我在 devtools:check() 上没有收到任何错误,但是当 CRAN 尝试使用 winbuilder 构建它时,我确实收到了以下错误。我想有些包使用该包,而 doMC 包本身是 linux 特定的。

这是错误:*检查包命名空间信息...确定*检查包依赖关系...错误包需要但不可用:'doMC'

请参阅“编写 R 扩展”手册中的“描述文件”部分。* 完成状态:1 个错误,1 个注释