问题标签 [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.
r - R 并行 - parRapply 无法正常工作
我正在对开发中的包进行一些单元测试。其中一项测试失败了。具体来说,我有代码的并行版本和非并行版本。非并行版本完美运行。并行版本未通过单元测试,出现看似荒谬的错误。
checkForRemoteErrors(val) 中的错误:2 个节点产生错误;第一个错误:ref 必须是 {1, nrow(x)} 中的整数。
如您所见,ref
明确定义为ref= 1L
1,nrow(x)。
library(parallel)
与导致此错误的交互发生了什么?
编辑- 我在 Windows 机器上:
r - 并行作业雪的最大工人/奴隶数量
我正在 Windows 机器上运行带有雪后端的 foreach 循环。我有 8 个内核可以使用。rscript 是通过嵌入在 python 脚本中的系统调用执行的,因此也会有一个活动的 python 实例。
没有 #workers=#cores 而不是 #workers<#cores 有什么好处,所以系统进程或 python 实例总是有一个开放的空间吗?
它在 #workers=#cores 的情况下成功运行,但我是否会因为 r worker 实例使内核(最大可能线程)饱和而降低性能?
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)工作进程完全没有用?谢谢你。
r - 在 R 中使用 big.matrix 进行交叉验证的并行计算
我正在尝试使用mclapply
并行化交叉验证来为非常大的设计矩阵X
(~10GB)和响应向量建模拟合过程y
。假设X
是维度n-by-p
: n=1000, p=1,000,000
。由于X
非常庞大,它作为big.matrix
对象支持,存储在磁盘中,并使用 R 包中的方法进行访问bigmemory
。
4 折交叉验证的工作流程如下。
- 设置
cv.ind
长度为 的索引向量n
,它存储从 1 到 4 的数字序列,指示哪个观察值X
属于 CV 的哪个折叠。 - 设置4个核心。在第 i 个核心中,为第 i 个折叠 CV 复制相应的训练和测试子矩阵。
- 为每个核心中的每个折叠拟合一个模型。
- 收集结果,返回。
交叉验证函数如下所示。
R 函数cvf
在每个内核中运行。它将第 i 次折叠的训练/测试矩阵复制为两个big.matrix
对象,拟合模型,计算一些统计数据并返回结果。
到目前为止,当设计矩阵X
不是太大时,代码工作得很好,比如n=1000, p=100,000
大小约为 1GB。但是,如果p=1,000,000
因此大小X
变为 ~10GB,则每个内核中的模型拟合过程将永远运行!!!!!!(以下部分):
备注:
- 如果我在原始矩阵 (10GB) 上运行一次“ncvreg()”,大约需要 2.5 分钟。
for
如果我使用loop 但 not顺序运行交叉验证mclapply
,则代码运行良好,每个折叠 'ncvreg()' 的模型拟合也很好(约 2 分钟),尽管整个过程需要约 25 分钟。- 起初我尝试了同样的问题“parLapply”。由于这里的原因,我切换到“mclapply” 。
- 每个核心中的数据复制步骤(即
deepcopy
部分)运行良好,大约需要 2 分钟才能将训练和测试数据集复制并备份到磁盘上。 - 我试图监控 CPU 使用率,下面是一张截图。如我们所见,在左图中,4 个 rsession 中的每一个都占用了 ~25% 的 CPU 使用率,而有一个进程时,kernel_task占用了 ~100% 的 CPU。随着时间的推移,kernel_task甚至会占用 150% 的 CPU。此外,CPU 历史面板(右下角)显示大部分 CPU 使用率来自系统,而不是用户,因为红色区域主导绿色区域。
我的问题:
- 为什么模型拟合过程在并行时需要很长时间?可能的原因是什么?
- 我是否在正确的轨道上并行化 big.matrix 的 CV 程序?有什么替代方法吗?
我感谢任何有助于解决我的问题的见解。提前致谢!!
r - 向量化和并行化列表的分解
下面是一些代码,它生成一个data.frame
s 列表,然后将该原始列表转换为一个新列表,其中每个列表元素都是每个数据帧的行的列表。
例如。
-l1
长度为 10,每个元素为data.frame
1000 行。
-l2
是一个长度为 1000 ( nrow(l1[[k]])
) 的列表,每个元素是一个list
长度为 10 ( length(l1)
) 的列表,其中包含来自元素的行向量l1
编辑为了澄清l1
与 的关系l2
,这里是与语言无关的代码。
如何l2
通过矢量化或并行化加速创建 up?我遇到的问题是parallel::parLapplyLB
拆分列表;但是,我不想拆分列表l1
,我想做的是拆分每个元素中的行l1
。*apply
一个中间解决方案将通过使用一些函数来替换 for 循环来对我当前的方法进行矢量化。这显然也可以扩展到并行解决方案。
如果我在一个可接受的解决方案之前自己解决这个问题,我会在这里发布我的答案。
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,但它没有解决问题。
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”进行比较。
关于为什么这不会产生相同的数据帧的任何想法?
r - 从集群工作人员处理 big.matrix
我正在尝试从 Windows 机器上的 parLapply 函数访问 big.matrix(不是文件支持)。但是,调用 big.matrix 时 R 崩溃 - “R for Windows 前端停止工作”。
我需要先附加 big.matrix 吗?我该怎么做呢?非常感谢任何帮助。