问题标签 [rparallel]

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 投票
1 回答
2812 浏览

r - R 并行 - parRapply 无法正常工作

我正在对开发中的包进行一些单元测试。其中一项测试失败了。具体来说,我有代码的并行版本和非并行版本。非并行版本完美运行。并行版本未通过单元测试,出现看似荒谬的错误。

checkForRemoteErrors(val) 中的错误:2 个节点产生错误;第一个错误:ref 必须是 {1, nrow(x)} 中的整数。

如您所见,ref明确定义为ref= 1L1,nrow(x)。

library(parallel)与导致此错误的交互发生了什么?

编辑- 我在 Windows 机器上:

0 投票
1 回答
127 浏览

r - 并行作业雪的最大工人/奴隶数量

我正在 Windows 机器上运行带有雪后端的 foreach 循环。我有 8 个内核可以使用。rscript 是通过嵌入在 python 脚本中的系统调用执行的,因此也会有一个活动的 python 实例。

没有 #workers=#cores 而不是 #workers<#cores 有什么好处,所以系统进程或 python 实例总是有一个开放的空间吗?

它在 #workers=#cores 的情况下成功运行,但我是否会因为 r worker 实例使内核(最大可能线程)饱和而降低性能?

0 投票
1 回答
373 浏览

r - 如何理解master和worker进程---R包“并行”?

当我试图了解R包的文档时parallel,我在阅读包文档第 8 页上的一些代码行时遇到了这个问题。我已经复制了下面的代码。请注意,mc仅等于2

在第 5 行,该命令library(boot)已在 上进行评估cl,但在第 8 行library(boot)再次运行,作者说它是c()master 上的方法所必需的。

我原来的理解是:makeCluster(mc)创建两个worker进程,master进程就是其中之一。现在看起来,由创建的每个工人makeCluster(mc)都与主进程不同。因此library(boot)必须在主进程上运行。我说得对吗?

如果我有一个 8 核 CPU,这是否意味着创建超过 7 个(>7)工作进程完全没有用?谢谢你。

0 投票
0 回答
428 浏览

r - 在 R 中使用 big.matrix 进行交叉验证的并行计算

我正在尝试使用mclapply并行化交叉验证来为非常大的设计矩阵X(~10GB)和响应向量建模拟合过程y。假设X是维度n-by-p: n=1000, p=1,000,000。由于X非常庞大,它作为big.matrix对象支持,存储在磁盘中,并使用 R 包中的方法进行访问bigmemory

4 折交叉验证的工作流程如下。

  1. 设置cv.ind长度为 的索引向量n,它存储从 1 到 4 的数字序列,指示哪个观察值X属于 CV 的哪个折叠。
  2. 设置4个核心。在第 i 个核心中,为第 i 个折叠 CV 复制相应的训练和测试子矩阵。
  3. 为每个核心中的每个折叠拟合一个模型。
  4. 收集结果,返回。

交叉验证函数如下所示。

R 函数cvf在每个内核中运行。它将第 i 次折叠的训练/测试矩阵复制为两个big.matrix对象,拟合模型,计算一些统计数据并返回结果。

到目前为止,当设计矩阵X不是太大时,代码工作得很好,比如n=1000, p=100,000大小约为 1GB。但是,如果p=1,000,000因此大小X变为 ~10GB,则每个内核中的模型拟合过程将永远运行!!!!!!(以下部分):


备注

  1. 如果我在原始矩阵 (10GB) 上运行一次“ncvreg()”,大约需要 2.5 分钟。
  2. for如果我使用loop 但 not顺序运行交叉验证mclapply,则代码运行良好,每个折叠 'ncvreg()' 的模型拟合也很好(约 2 分钟),尽管整个过程需要约 25 分钟。
  3. 起初我尝试了同样的问题“parLapply”。由于这里的原因,我切换到“mclapply” 。
  4. 每个核心中的数据复制步骤(即deepcopy部分)运行良好,大约需要 2 分钟才能将训练和测试数据集复制并备份到磁盘上
  5. 我试图监控 CPU 使用率,下面是一张截图。如我们所见,在左图中,4 个 rsession 中的每一个都占用了 ~25% 的 CPU 使用率,而有一个进程时,kernel_task占用了 ~100% 的 CPU。随着时间的推移,kernel_task甚至会占用 150% 的 CPU。此外,CPU 历史面板(右下角)显示大部分 CPU 使用率来自系统,而不是用户,因为红色区域主导绿色区域。

在此处输入图像描述


我的问题:

  1. 为什么模型拟合过程在并行时需要很长时间?可能的原因是什么?
  2. 我是否在正确的轨道上并行化 big.matrix 的 CV 程序?有什么替代方法吗?

我感谢任何有助于解决我的问题的见解。提前致谢!!

0 投票
0 回答
299 浏览

r - 在 R 中使用 Parallel 进行多图

我在列表中保存了大约 30 个ggplot对象ggobject,现在我想要:

  • ggobject使用并行R 包绘制对象。
  • 另外,我想以网格方式显示这些图,为此我使用了multiplot函数。

我为此使用以下代码

我面临的主要问题是我应该如何表达网格排列(特定显示的列/行数)parLapply

在这里,我将一个对象粘贴在 ggobject

0 投票
1 回答
799 浏览

r - 并行 data.table - 什么是正确的语法

跟进一些data.table并行性(1) (2) (3)我试图弄清楚。这种语法有什么问题?

checkForRemoteErrors(val) 中的错误:4 个节点产生错误;第一个错误:维数不正确

checkForRemoteErrors(val) 中的错误:4 个节点产生错误;第一个错误:找不到对象“id”

我已经玩了很多语法。这两个似乎是我能得到的最接近的。显然有些事情仍然不对劲。

我真正的问题是类似的结构,但有更多的行,我正在使用一台具有 24 个内核/48 个逻辑处理器的机器。所以看着我的电脑使用大约 4% 的计算能力(仅使用 1 个核心)真的很烦人

0 投票
1 回答
63 浏览

r - 向量化和并行化列表的分解

下面是一些代码,它生成一个data.frames 列表,然后将该原始列表转换为一个新列表,其中每个列表元素都是每个数据帧的行的列表。

例如。
-l1长度为 10,每个元素为data.frame1000 行。
-l2是一个长度为 1000 ( nrow(l1[[k]])) 的列表,每个元素是一个list长度为 10 ( length(l1)) 的列表,其中包含来自元素的行向量l1

编辑为了澄清l1与 的关系l2,这里是与语言无关的代码。

如何l2通过矢量化或并行化加速创建 up?我遇到的问题是parallel::parLapplyLB拆分列表;但是,我不想拆分列表l1,我想做的是拆分每个元素中的行l1*apply一个中间解决方案将通过使用一些函数来替换 for 循环来对我当前的方法进行矢量化。这显然也可以扩展到并行解决方案。

如果我在一个可接受的解决方案之前自己解决这个问题,我会在这里发布我的答案。

0 投票
1 回答
96 浏览

r - 并行代码导致线程中的内存使用量膨胀(RStudio 效果)

概述:

我的 B 对象是一个大矩阵 100 000 * 5000 of 2 GB
我的 A 对象较小 1000 * 5000

最初,我有一个使用 2.1GB mermoy 的 rsession 进程。
调用 parApply 函数后,我有 4.5GB 的 nb_cpu 线程。

两个问题:

  • 虽然 B 只是读取的,但它可以从线程之间的单个内存槽共享。如何进行 ?
  • 即使如此,为什么每个线程 4.5 GB 而不是 ~2.1GB ?

我使用“top”命令来监控线程和内存使用情况,这不是垃圾收集器可以释放的表面使用。线程因内存不足而崩溃。它在具有 30 个线程(在我的代码中 nb_cpu = 30)的 128GB 内存计算机上运行。

注意:我也尝试相反,在 parApply 中使用 B(大矩阵)而不是 A,但它没有解决问题。

0 投票
0 回答
771 浏览

r - R 并行,parLapply() 不返回与 lapply() 相同的结果

我的任务是让一些代码在工作中运行得更快,但我遇到了并行计算的障碍。我有一个原始的 for 循环,我想并行运行。在没有 for 循环的情况下重现代码似乎最容易,而是使用 lapply(),但是它的运行时间与循环一样长。使用 parLapply() 重写代码给了我一个更快的结果,尽管结果与 lapply() 和原始 for 循环的结果不同,两者都具有可比性。该计划的目的是计算各个国家在每个到期日的现金利差(即利差曲线)。

“bonddata.csv”链接:http ://www.mediafire.com/download/hfcdbryhedpso77/bonddata.csv “weocountries.csv”链接: http ://www.mediafire.com/download/7x15csw7lwwataj/weocountries.csv

加载所需的数据和库:

创建计算现金点差的函数:

原代码:

lapply() 代码:

parLapply() 代码:

数据框比较:

如果代码为您正确运行,则生成的数据帧“cashspreads”和“cashspreads2”将无法与数据帧“cashspreads3”进行比较。

关于为什么这不会产生相同的数据帧的任何想法?

0 投票
1 回答
209 浏览

r - 从集群工作人员处理 big.matrix

我正在尝试从 Windows 机器上的 parLapply 函数访问 big.matrix(不是文件支持)。但是,调用 big.matrix 时 R 崩溃 - “R for Windows 前端停止工作”。

我需要先附加 big.matrix 吗?我该怎么做呢?非常感谢任何帮助。