问题标签 [snow]

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

r - 如何设置集群从节点(在 Windows 上)

我需要在所有 Windows 的 15 台机器(每台 4 核)上运行数千个模型。我开始学习parallel,打包snowsnowfall阅读了一堆介绍,但它们主要集中在大师的设置上。关于如何在 Windows 上设置工作(从)节点的信息很少。信息往往是矛盾的: 有人说 SOCK 集群实际上是最简单的方法,其他人声称SOCK 集群设置在 Windows 上很复杂(sshd 设置),最好的方法是 MPI

那么,在 Windows 上安装从节点最简单的方法是什么?MPI、PVM、SOCK 还是 NWS?我的,可能是幼稚的想法是(按优先级列出):

  1. 使用从节点上的所有 4 个内核(必需)。
  2. 理想情况下,我只需要带有一些包的 R 和一个从属 R 脚本或 R 函数,它们会在某个端口上侦听并等待来自主控的任务。
  3. 理想情况下,可以从集群中动态添加/删除节点。
  4. 理想情况下,从服务器将连接到主服务器——所以我不必在主服务器的配置中列出所有从服务器 IP。

只有 1 是 100% 需要的,2-4 是“会好的”。要求是不是太天真了?

很抱歉,我无法从可用的文档和教程中弄清楚这一点。如果您指出正确的来源,我将不胜感激。


* 请注意,这数千个模型中的每一个至少需要 7 分钟,因此不会有很大的通信开销。

0 投票
1 回答
517 浏览

r - 在雪包中使用 clusterApply?

我正在尝试使用雪包进行 R 代码。我有功能

imp<-函数(x,y)

如何在 clusterApply 中使用此功能?

而不是这个我想使用我的功能

假设这是我的功能,我如何使用此功能在并行和分布式系统中运行..

0 投票
1 回答
471 浏览

r - 在线程之间传递信息(foreach 使用 %dopar%)

我正在使用 doSNOW- 包来并行化长度不同的任务。当一个线程完成时,我想要

  • 旧线程产生的一些信息传递给下一个线程
  • 立即启动下一个线程(如 clusterApplyLB 中的负载平衡)

它在单线程中工作(参见 makeClust( spec = 1 ))

现在将“makeCluster”中的规范更改为 4。输出是这样的:

在 18:12:21 线程 9 知道,线程 1 和 5 已被处理。2 秒后线程 6 结束。下一个线程必须至少知道 1、5 和 6,对吧?但是线程 10 只知道 6 和 2。

我意识到,这与 makeCluster 中指定的内核有关。9 知道 1、5 和 9 (1 + 4 + 4),10 知道 2,6 和 10 (2 + 4 + 4)。

有没有更好的方法将“已处理”的东西传递给更几代的线程?

奖励点:有没有办法在并行处理中“打印”到主节点,而无需从雪包中获得这些“类型:执行”等消息?:)

谢谢!马克

0 投票
1 回答
1228 浏览

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

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

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

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

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

谢谢和最好的问候尼科

0 投票
1 回答
409 浏览

r - 在 R 中处理多核和稀疏矩阵

我正在研究一个需要具有大量零的大型矩阵的项目。不幸的是,由于这些矩阵中的一些可能有超过 1e10 个元素,因此由于 RAM 限制,不能使用“标准”R 矩阵。另外,我需要在多个内核上工作,因为计算可能需要很长时间,而且确实不应该。

到目前为止,我一直在使用该foreach包,然后将结果(以标准矩阵形式出现)转换为稀疏矩阵。我忍不住想,一定有更聪明的办法。

这是我到目前为止所做的一个最小示例:

lambda 都非常小,因此只有大约每 5 个元素不为零,因此将结果存储在稀疏矩阵中是明智的。

不幸的是,现在必须将迭代次数从 1e6 增加到至少 1e7,这样foreach循环生成的矩阵太大而无法存储在 8GB 的​​ RAM 中。我现在要做的是将任务拆分为每个具有 1e6 次迭代的步骤,并将它们组合成一个单一的稀疏矩阵。

我现在有以下想法:

It works fine, but I had to fix lambda to some value. For my application, I need the values in the ith row to come from a poisson distribution with mean equal to the ith element of the lambda vector. This obviously worked fine in the foreach loop., but I have yet to find a way to make it work in an apply loop.

My questions are:

  1. Is it possible to have the apply function "know" on which row it is operating and pass a corresponding argument to a function?
  2. Is there a way to work with foreach and sparse matrices without the need of creating a standard matrix and converting it into a sparse one in the next step?
  3. 如果以上都不是,我有没有办法手动将任务分配给 R 的从属进程 - 也就是说,我可以具体告诉一个进程在第 1 列上工作,另一个在第 2 列上工作,依此类推,每个创建一个稀疏向量,并且仅在最后一步中组合这些向量。
0 投票
2 回答
398 浏览

r - 无法在从 Snow 调用的并行代码中访问 C++ 代码中的参数

我正在使用 Snow 包开发并行 R 代码,但是当使用 Rcpp 包调用 C++ 代码时,程序只是挂起并且没有响应。

作为一个例子......我在R中有以下代码,它使用雪分割成一定数量的进程

而我的 C++ 函数看起来像......

如果我用 mpi=false 和 mc.cores=[some number of threads] 运行它,程序运行得很好但是如果我用 mpi=true 运行它,因此使用雪,程序只是挂在 int=as<int>(n )??????另一方面,如果我将 C++ 函数定义为...

该程序在每个 mpi 线程上完美运行??问题是它适用于整数双精度等,但不适用于矩阵 另外,我必须使用 boost 包中的 lexical_cast 才能使其工作,因为 as<> 不能。

有谁知道这是为什么,以及我在这里缺少什么,所以我也可以加载我的矩阵?

0 投票
1 回答
751 浏览

r - 如何使用 clusterApply 并行运行自己的函数多次

我尝试使用不同的参数并行运行我自己的函数“EMGMM(y, startmy = 0)”:

但我现在不知道如何称呼“clusterApply”。每个工作中的 y 参数都是相同的,而 startmy 是我的算法的起始参数。

0 投票
4 回答
8398 浏览

r - 错误:找不到对象“.doSnowGlobals”?

我正在尝试在 4 个节点上并行化代码(type = "SOCK")。这是我的代码。

我收到此错误:

4个节点产生错误;第一个错误:找不到对象“.doSnowGlobals”。

如果我使用 doMC 即使用同一台机器的内核,此代码运行良好。但是当我尝试使用其他计算机进行并行计算时,我得到了上述错误。当我将其更改为 registerDoSNOW 时,错误仍然存​​在。

snow 和 DoSNOW 是否在集群中工作?我可以使用雪在本地主机上创建节点,但不能在集群上创建节点。有人在用雪吗?

0 投票
0 回答
468 浏览

r - 如何处理超过 10GB 的 stan 结果

我有一个预测时间序列的模型。所以我只有 5 个参数——然后我用它来计算时间序列,作为生成 7200x3 矩阵的转换参数——然后将其与观察结果进行比较。

到目前为止一切顺利 - 仅进行 100 次迭代时按预期工作。但是现在我使用 SNOW 来并行化这个计算来创建 6x1000 迭代。花了一个小时 - 但看起来不错。唯一的问题是我无法再加载生成的 rdata 文件。它的大小为 11GB - 可能就是这样。

我需要增加模拟的数量——所以我需要找到一种方法来处理这种大小的数据。其他人如何处理这个问题?

代码

(试图做一个简单的例子 - 所以它是可读的)

R 脚本

模型的相关部分

更新

我按照建模语言手册p41中的示例成功地重新组织了代码- 现在不再存储状态空间。不幸的是,我仍然需要这些轨迹(至少在这个开发阶段)。因此,我将保持开放状态,希望有人有一个聪明的解决方案。

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 个节点被打开:

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

并且可以预见地得到: