问题标签 [snowfall]

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 投票
2 回答
5874 浏览

c - 使用 C 和并行化在 R 中快速关联

我今天的项目是使用我拥有的基本技能在 R 中编写一个快速关联例程。我必须找到近 400 个变量之间的相关性,每个变量都有近百万个观察值(即大小为 p=1MM 行和 n=400 列的矩阵)。

对于 1MM 行和每个变量 200 个观测值,R 的本机相关函数需要将近 2 分钟。我没有为每列运行 400 次观察,但我猜这需要将近 8 分钟。我有不到 30 秒的时间来完成它。

因此,我想做一些事情。

1 - 用 C 语言编写一个简单的相关函数并将其并行应用到块中(见下文)。

2 - 块 - 将相关矩阵分成三个块(大小为 K*K 的左上正方形、大小为 (pK) (pK) 的右下正方形和大小为 K (pK) 的右上矩形矩阵)。这涵盖了相关矩阵中的所有单元格,corr因为我只需要上三角形。

3 - 使用降雪通过 .C 调用并行运行 C 函数。

这是我的问题:

对于方法 1,它有效,但不是我想要的方式。我相信,当我传递 corr 矩阵时,我传递了一个地址,而 C 将在源代码处进行更改。

但原始corr矩阵保持不变:

问题 #1:有什么方法可以确保 C 函数更改corr源代码的值?我仍然可以合并这三个来创建一个上三角相关矩阵,但我想知道是否可以在源头上进行更改。注意:这并不能帮助我实现快速关联,因为我只是在运行一个循环。

问题 #2:对于方法 2,我如何在初始化步骤将共享对象加载到每个内核以在每个内核上进行并行作业(而不是我是如何完成的)?

问题#3:这个错误是什么意思?我需要一些指示,我很想自己调试它。

问题#4:有没有一种快速的方法可以在不到 30 秒的时间内计算 1MM x 400 矩阵的相关性?

当我运行方法 2 时,我收到以下错误:

下面附上我用于关联的普通香草 C 代码:

0 投票
1 回答
84 浏览

r - $ 使用 snowFall 的问题

我正在尝试使用 snowFall 来使用集群加速我的代码。我的代码的简化版本是

这样做的目的是只输出 lm 对象的系数(guess$coef),但我得到的输出是整个 lm 对象。所以在我看来,$ 不起作用。稍后在我的代码中(不包括在这里我遇到了同样的问题,即 $ 似乎没有工作)。非常感谢所有建议。

0 投票
1 回答
2128 浏览

r - 如何在 R 的并行方法中使用无效的记录器进行记录?

我在 R 中使用无用的记录器进行记录。我有一个在 R 中使用降雪实现的并行算法。并行进程的每个核心在记录器中记录一个中间输出。但是这个输出没有出现在记录器中?

我们可以在使用降雪的并行作业中使用无用的记录器进行记录吗?

添加它是如何完成的:

我的具体情况有点不同。我正在使用我创建的共享对象从 R 调用 C 函数。该函数是一个迭代算法,我需要每隔几次迭代记录一次输出。我有兴趣从 C 函数记录到无用的记录器。为什么是徒劳的记录器?因为这是 Web 应用程序的一部分,所以让用户会话的所有输出以一致的格式出现是有意义的。

这是我根据接受的答案遵循的一般方法。

现在是 C 函数

希望这可以帮助。如果 R 和 C 有更简单的方法来共享一个公共记录器,请告诉我。

0 投票
1 回答
1499 浏览

r - 运行 R 脚本后无法杀死工人

我正在使用:R 版本 3.0.1 (2013-05-16) 和降雪 1.84-4 在 m2.2xl AWS EC2 上初始化(使用雪 0.3-13),原始 AMI 来自http://www.louisaslett。 com/RStudio_AMI/

我的问题是在创建集群后使用:

从命令行我运行: sudo R CMD BATCH xyz.R &

如果 xyz.R 失败,所有节点仍然存在,但现在我无法使用 sfStop() 因为我将文件作为脚本运行。如果我在 Rstudio 浏览器窗口中运行相同的代码,如果代码失败,我可以成功运行 sfStop()。

如果我包括

然后它会捕获任何错误并终止集群。此外,如果我只从 Rstudio 运行命令,我可以停止集群。然而,问题仍然存在,我有 30 多个节点是使用脚本启动的并且无法停止。

我曾尝试使用 杀死节点sudo kill 'PID' -9,但它们总是重新出现。我也试过杀死所有的 PPID=2。我尝试重新启动我的 EC2,但这也没有成功。我什至手动杀死了每个正在运行的进程(是的,所有 100 多个),但是这些 PPID=2 都回来了。这是 的输出ps -ef。底部显示了我当前正在运行的 8 个集群。

无论我做什么,前 50 个进程都存在/将会回来。有没有其他人有这个问题?如果是这样,你是如何杀死工人的?

0 投票
1 回答
466 浏览

r - 使用降雪进行并行计算时为什么不进行负载均衡?

很长一段时间以来,我一直将 sfLapply 用于我的许多并行 r 脚本。但是,最近随着我对并行计算的深入研究,我一直在使用 sfClusterApplyLB,如果单个实例的运行时间不同,它可以节省大量时间。由于 sfLapply 将等待批次的每个实例完成,然后再加载新批次(这可能导致空闲实例),完成任务的 sfClusterApplyLB 实例将立即分配给列表中的剩余元素,从而可能节省很多当实例不花费完全相同的时间时。这让我质疑为什么我们不想在使用降雪时对我们的运行进行负载平衡?到目前为止我唯一发现的是,当并行脚本中出现错误时,sfClusterApplyLB 在给出错误之前仍会循环遍历整个列表,而 sfLapply 将在尝试第一批后停止。我还缺少什么?负载平衡还有其他成本/缺点吗?下面是一个示例代码,显示了两者之间的区别

0 投票
1 回答
1228 浏览

r - 什么时候需要使用 sfExport(R Snowfall 包)

我正在使用降雪进行并行计算。我总是只在一台具有多个 CPU(> 20 个内核)的机器上。我正在处理大量数据(> 20gb)。sfExport() 需要很长时间。

当我在笔记本电脑上运行测试代码并检查 CPU 使用率时,有时它也可以在没有 sfExport() 的情况下工作。

我的代码的某些部分是嵌套的 sfLapply() 函数。喜欢:

我什么时候真的需要将数据导出到所有 CPU?

谢谢和最好的问候尼科

0 投票
1 回答
292 浏览

r - R:基于自定义距离函数和多个条件快速匹配记录

我在 R 中创建了一些函数,以根据自定义光谱相似性函数和所谓的化合物保留指数匹配(即洗脱时间)(参见此处的示例,http: //webbook.nist.gov/cgi/cbook.cgi?ID=C630035&Mask=200)。为此,必须将每个记录的列表元素“RI”与库中的元素进行比较,当绝对偏差小于给定容差时,它应该将最佳光谱库匹配添加到我的记录中。下面是我为此编写的一些代码,但问题是它对于我的目的来说太慢了(我通常有大约 1000 个样本光谱和 200 000 个库光谱)。我尝试并行化它,但这似乎也没有多大帮助。关于如何使下面的代码更高效的任何想法,例如使用更多矢量化,或使用内联 C 代码,或其他一些 R 技巧?我知道这方面的一般建议,但不太明白在这种情况下如何轻松实现它(不幸的是,我对 C 语言还不是很精通)......有什么想法或建议吗?哦是的,sfLapply? 首先将我的光谱放在一个大(稀疏,因为有很多零)矩阵中是否有帮助,以避免merge光谱相似性函数中的步骤,或者使用其他标准,例如仅在最大/最多时考虑光谱查询光谱中的强峰与库光谱具有相同的质量(或者包含在库光谱中的 5 个最大峰的集合中)?无论如何,任何关于如何加快这项任务的想法都将不胜感激!

编辑:我仍然有一个剩余查询是如何避免在函数 addbestlibmatches1 中制作样本记录 recs 的完整副本,而是只更改存在库匹配的记录?此外,传递保留索引匹配的图书馆记录的选择可能效率不高(在函数 addbestlibmatch 中)。有什么想法可以避免这种情况吗?

0 投票
1 回答
1512 浏览

r - 为集群上的所有节点开启所有 CPU:snow/snowfall 包

我正在开发一个集群,并使用该snowfall软件包在 5 个节点上建立一个套接字集群,每个节点有 40 个 CPU,使用以下命令:

当我检查集群报告时,我看到从属服务器上的负载比预期的要低得多,并且对它说“在 5 个 CPU 上并行执行”而不是“在 200 个 CPU 上并行执行”这一事实感到不安。这仅仅是对 CPU 的模棱两可的引用,还是每个主机只运行一个 CPU?

编辑:这是一个为什么这与我有关的例子,如果我只使用本地机器并指定最大核心数,我有:

我在单节点 40 CPU 集群上运行了相同的作业,它需要 1.4 分钟,而 5 节点,显然 5 CPU 集群需要 5.22 分钟。对我来说,这证实了我的怀疑,即我在 5 个节点上并行运行,但每个节点上只打开 1 个 CPU。

那么我的问题是:如何打开所有 CPU 以供所有可用节点使用?

编辑:@SimonG 我使用了底层snow包的初始化,我们可以清楚地看到只有 5 个节点被打开:

我认为这很清楚地表明了这一点。我绝望地尝试了这个:

并且可以预见地得到:

0 投票
0 回答
339 浏览

r - 使用降雪时访问 RStudio 服务器中的文件夹时出错

我正在使用 RStudio 服务器和降雪。我的并行代码总是给我这些信息:

在我的并行函数(nvtPar)中,我从硬盘驱动器读取了一些文件并将文件写入硬盘驱动器。所有文件都在子文件夹中。

该服务器构建在具有 16 个内核的 VMware 虚拟服务器上。我的工作目录是 nfs 服务器并安装为我的主目录。

我的 RStudio 服务器是 0.98.994 版。

这是我的会话信息:

感谢您的任何建议。如果我的问题不清楚,请告诉我。

编辑:作为@roman-luštrik 的建议,我添加了我的最小示例来重现我的问题(抱歉,我无法发布我的整个脚本,但这个示例会产生相同的错误消息)。

经过挖掘,似乎这个错误与并行计算中的file.remove有关。如果我评论这一行,所有错误都会消失:

顺便说一句:我在工作目录中使用 svn 进行版本控制。

0 投票
1 回答
1487 浏览

r - 使用雪在 R 中进行并行处理

我有 1000 个列表,每个列表都有多个时间序列。我想将预测应用于列表中的每个元素。就计算资源而言,这已成为一个棘手的问题。我没有并行计算或高级 R 编程方面的背景知识。任何帮助将不胜感激。

我创建了虚拟列表。基本上, dat.list 与我正在研究的类似。

上面的代码给了我我需要的东西。我想在上面的代码中对两个 lapply 应用并行处理。因此,我尝试使用 snow 包和本网站中显示的示例。

以下是我的问题,

  1. 出于某种原因,非并行版本的 tm 输出是不同的。预测函数 ets 应用于每个数据点,而不是列表中的元素。

非并行:

平行版:

  1. 我的第二个问题是我应该如何在自定义函数中并行化 lapply,基本上是嵌套的 parLapply

    custom.function <- function(x) parLapply(clus,x$z,function(y) (forecast::ets(y))) ## 不工作

非常感谢您的帮助