问题标签 [mclapply]

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 回答
733 浏览

r - expand.grid - 尝试解决“无法分配大小向量”问题

我需要创建巨大的 data.frame 组合,但我不需要全部。但正如我在这里看到的,expand.grid 函数无法添加组合抛出的特定条件。

所以我决定一步一步走。例如我有

如果我尝试

“无法分配大小向量”问题来了..

所以我试着一步一步走

这给了我需要的组合。为了节省内存,我添加了另一列,例如

但是当我遇到 8 个或更多变量的网格时,问题就来了。这需要很多时间,但它应该只是在另一个框架中添加一个数字。也许我错了,它确实需要那个时间,但我希望有一种更有效的方法来做到这一点。

我只需要创建 2 个变量的 expand.grid,然后将条件添加到子集。然后添加另一个尊重子集网格的列(将 c(0:variants) 添加到每一行,这意味着当然要创建更多行......然后按条件对其进行子集等等......

任何人都可以帮助使其更快吗?我希望使用 mclapply trought 函数应该是最快的,但也许不是..

感谢任何人...

0 投票
0 回答
168 浏览

r - 使用 dada2 运行 mclapply 时 IRkernel 死机

我不知道这个问题是否特定于dada2。我猜它不是,但我无法以其他方式重现它。

我正在尝试mclapplyparallel带有dada2的Jupyter笔记本内部的库中使用。并行作业运行,尽管它完成内核的那一刻就死了,我无法重新启动它。在 R 终端内运行相同的工作流程没有问题。

在小型数据集上运行它没有问题:

运行相同的工作流程但使用完整的数据集(对不起,我无法在此处提供它,它太大,并且不公开)会导致内核死机,这让我认为这是一个内存问题,正在运行它在 Jupyter 环境之外没有问题。运行这个lapply没有问题。尝试在具有更多内存的 AWS 实例上运行它也会导致相同的错误。内核死亡时的终端输出是:

监控内存显示它永远不会变得非常高~200MB。所以我的问题是,如果它不是记忆,它会是什么?我意识到可能很难回答这个问题,但正如我所说,我无法发布完整的数据集。R 版本 3.2.2、Jupyter 版本 1.0.0、Dada2 版本 0.99.8、OSX 10.11.4

0 投票
1 回答
708 浏览

r - R:TermDocumentMatrix - 创建时出错

我正在尝试获取 twitter 数据并创建 wordcloud,但我的代码在创建 TermDocumentMatrix 时出错。我的代码如下

创建 TermDocumentMatrix 之前没有错误。我得到的错误如下

mclapply(x$content[i], function(d) tm_reduce(d, x$lazy$maps)) 中的警告:调度核心 1 在用户代码中遇到错误,作业的所有值都会受到影响 mclapply(unname( content(x)), termFreq, control) : 计划核心 1 在用户代码中遇到错误,作业的所有值都会受到影响错误”堆栈跟踪(最里面的第一个):74:FUN
73:lapply
72:setNames
71:as.list.VCorpus
70:as.list
69:lapply
68:meta.VCorpus
67:meta
66: TermDocumentMatrix.VCorpus
65 :TermDocumentMatrix
64 : as.matrix
63:观察事件处理程序
1:运行应用程序

我已经添加了lazy = TRUEcontent_transformer(tolower)但仍然出现错误。

0 投票
1 回答
209 浏览

r - 高效/多线程运行回归预测

我知道有很多关于内存消耗问题的帖子,mclapply但我仍然想看看是否有什么可以帮助我的情况。

我正在将随机森林模型拟合到 ~600 x 60,000(通过变量矩阵 X 响应 y)矩阵:

然后我想将该拟合与随机拟合进行比较,为此我正在做的是:

不幸的是,这太占用内存(需要超过 100GB),这使得它不切实际。

顺便说一句,我运行的环境是 Linux。

有什么建议么?

0 投票
0 回答
246 浏览

r - 使用多个 mclapply、parLapply

我正在尝试链接多个 mclapply/parLapply:

然后我改变我的 x:

问题是我经常收到以下错误:

调度核 3、57、54、8、23、17、53、18、22、28、41、25、30 在用户代码中遇到错误,所有作业的值都会受到影响

有趣的是,如果我在我的 ubuntu 机器上运行它,我没有收到错误,但是当我在 CentOS 机器上运行它时我收到了这个错误。当我使用 parLapply 执行第二步时,也会发生类似的事情

我也试过:

但是我又遇到了一些有趣的错误。

0 投票
1 回答
664 浏览

r - 朱莉娅 pmap 性能

我正在尝试将我的一些 R 代码移植到 Julia;基本上我在 Julia 中重写了以下 R 代码:

可以注意到,从一个核心升级到 11 个核心时,我的速度得到了显着提升。现在我正在尝试在 Julia 中做同样的事情:

正如人们注意到的那样,我没有得到任何 pmap 的加速。也许有人可以提出替代方案。

0 投票
1 回答
629 浏览

r - Passing mclapply() a parameter from for (i in range)

I'm trying to do this:

But instead of having rank = 2 in the nmf for temp.result, I want to have rank = i

Any idea how I could pass it that parameter? Just passing it through mclapply as function(n, i) doesn't work.

0 投票
1 回答
1542 浏览

r - mclapply vs parLapply 速度

我在 Linux 上运行并且mclapply很容易使用。parlapply即使在使用后,我也遇到了一些错误clusterEvalQ

在我进一步解决问题之前,是否有任何意义,即两者之间是否存在显着的速度差异,或者人们只是parLapply在 Windows 上使用?

我已经阅读parLapplyLB并可以看到这种方法的用途,但是如果我严格查看,mclapplyFORKparlapply方法和 PSOCK 方法的速度是否有很大差异?

我的职能性质可能决定答案;它正在使用stri_extract.

0 投票
1 回答
5739 浏览

r - mcapply:所有计划的核心在用户代码中遇到错误

以下是我的代码。我正在尝试获取以该函数结尾的所有文件(〜20000)的列表.idat并读取每个文件illuminaio::readIDAT

在读取和写入有关 1200 个文件的信息后,我收到以下消息:

我该如何解决?

0 投票
2 回答
1194 浏览

r - 使用 R 中的并行函数最小化开销

我尝试报告我在mclapply中遇到的关于不允许大返回值的错误。

显然,该错误已在开发版本中得到修复,但我对响应者的评论更感兴趣:

序列化对象的大小有 2GB 的限制,例如 mclapply 可以从分叉的进程返回,本示例尝试 16GB。这在 R-devel 中已被取消(对于 64 位版本),但这种用法非常不寻常且效率很低(该示例需要 ca 150GB,因为(取消)序列化涉及的所有副本)

如果使用 mclapply 对大数据进行并行计算效率低下,那么有什么更好的方法呢?我做这种事情的需求只会越来越大,而且我肯定到处都遇到瓶颈。我看到的教程是关于如何使用函数的非常基本的介绍,但不一定是如何有效地使用函数来管理权衡。该文档对这种权衡有一个小小的介绍:

mc.preschedule:如果设置为 'TRUE',则计算首先被划分为(最多)有多少个作业有核心,然后开始作业,每个作业可能覆盖多个值。如果设置为“FALSE”,则为每个“X”值派生一个作业。前者更适合短计算或'X'中的大量值,后者更适合完成时间差异较大且'X'值与'mc.cores'相比没有太多的工作</p>

默认情况下('mc.preschedule = TRUE')输入'X'被分成与核心一样多的部分(当前值按顺序分布在核心中,即第一个值到核心1,第二个到核心2,...... .. (core + 1)-th value to core 1 etc.) 然后将一个进程分叉到每个核心并收集结果。

在没有预先安排的情况下,会为每个“X”值派生一个单独的作业。为了确保一次运行的作业不超过“mc.cores”,一旦该数量被分叉,主进程会在下一次分叉之前等待子进程完成

可靠地对这些事物进行基准测试需要花费大量时间,因为有些问题只会在规模上体现出来,然后很难弄清楚到底发生了什么。因此,更好地了解函数的行为会很有帮助。

编辑:

我没有具体的例子,因为我经常使用 mclapply 并且想更好地了解如何考虑性能影响。虽然写入磁盘可以解决错误,但我认为这对于必须发生的(反)序列化没有帮助,这也必须通过磁盘 IO。

一个工作流程如下:获取一个大的稀疏矩阵M,并将其分块写入磁盘(例如M1-M100),因为 M 本身不适合内存。

现在说,对于其中的每个用户,我想在用户级别添加和聚合i其中ICi列。M对于较小的数据,这将是相对微不足道的:

但是对于更大的数据,我的方法是根据列所在的矩阵将用户/列的 data.frame 拆分为不同的 data.frames M1-M100,对这些 data.frames 执行并行循环,读入关联的矩阵,然后然后遍历用户,提取列并应用我的函数,然后获取输出列表,再次循环并重新聚合。

如果我有一个不能像那样重新聚合的函数(到目前为止,这不是问题),这并不理想,但我显然用这种方法洗牌了太多数据。