问题标签 [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.
r - R snow rlecuyer:使用临时种子应用功能
我想使用snow::clusterApply
. 我的函数在函数的一部分中使用临时(预定义)种子,但通常应保持独立的随机数。每个“工作”的临时种子不同。
我可以执行以下操作:
但是,按照雪包文档( http://homepage.stat.uiowa.edu/~luke/R/cluster/cluster.html )中“SNOW 集群中的统一随机数生成”部分中给出的链接,我阅读了“默认的随机数生成器可能非常相关”并且应该使用额外的包,例如 package rlecuyer
。
现在,如果我尝试将其包含在我的代码中,set.seed
或者withSeed
不再使用:
当我需要在工作的基础上而不是在通话之前给他们打电话时,我该如何解决set.seed
或并行工作?withSeed
clusterApply
r - 使用并行/多核进程的回归
我正在尝试在 Linux 集群上的 R 中运行以下代码。我想使用完整的处理能力(指定核心/节点/内存)。下面的代码本质上是基于 GAM 回归运行预测,并将结果保存为 CSV 文件,用于多组数据(这里我只显示两个)。
我通过 Rmpi/snow/doParallel 等并行包传递此代码?谢谢!
数据
r - R foreach:从单机到集群
以下(简化的)脚本在 unix 集群(4 个虚拟核心)的主节点上运行良好。
我想利用集群中的 16 个节点(16 * 4
总共虚拟核心)。
我想我需要做的就是更改由makeCluster
. 但是我该怎么做呢?文档不是很清楚。
基于这篇相当古老的(2013 年)帖子http://www.r-bloggers.com/the-wonders-of-foreach/似乎我应该更改默认类型(sock
或者MPI
- 哪个 - 可以在 unix 上使用? )
编辑
来自foreach 的作者的这个小插曲:
默认情况下,doParallel 在类 Unix 系统上使用多核功能,在 Windows 上使用雪功能。请注意,多核功能仅在单台计算机上运行任务,而不是在计算机集群上运行。但是,您可以使用 snow 功能在集群上执行,使用类 Unix 操作系统、Windows 或什至组合。
是什么you can use the snow functionality
意思?我该怎么做?
r - R:在集群的 Worker 上设置“检查点”
我使用以下代码...
1. 创建一个并行集群
2. 源 test.R
3. 并使用“test.R”中定义的函数进行一些并行工作
不幸的是,我依赖旧包 :-(
可以使用“检查点”来利用 CRAN 包的过去快照
我的问题是......
我怎样才能利用集群工作人员上的旧包?
以下不起作用:
命令
返回 TRUE。但是第二个
只是挂起。我不知道为什么工人们会坚持这个命令。我可以以某种方式调查工作人员,看看他们是否只是在等待用户输入左右?
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 - 在 clusterApply 或 clusterMap 中将进度打印到 windows cmd
我正在使用 R 中的 snow 包在多个内核上调用 python 脚本。我想要的是将进度打印到控制台。使用cat()
, message()
orprint()
在我的函数内部没有给出任何输出。这使得跟踪我的功能的进度变得困难。
是否可以在 clusterApply 或 clusterMap 函数中将输出打印到命令行?
这是我当前的脚本:
r - R:处理雪团内的稀疏矩阵
我正在尝试在由雪制成的并行集群下使用 igraph 生成的稀疏矩阵,但似乎对矩阵求和或执行类似 which(element > 0) 之类的操作不起作用,即使它们的非-并行版本。这是我正在尝试做的一个简化示例:
如果我运行它,它会返回以下错误
但是,这有效:
由于我已将所有内容导出到集群,因此它会以不同的方式处理数据结构,这很奇怪。我错过了什么?
r - 反序列化错误(socklist[[n]]):从连接读取错误
我正在使用 R,并且在 Linux 机器上的 7 个内核上运行并行代码。
使用小型数据集时,我的代码大约需要 2 个小时并且运行良好。当使用 6 倍大的数据集时,代码需要更长的时间(可能是因为它需要交换),但随后会随机结束,有时为 10%,有时为 18、20、30% 左右。看起来完全随机。RAM 使用率通常在 90% 左右,SWAP 使用率低于 50%。
我正在使用foreach
后端doSNOW
。这是错误代码:
outfile="outfile.out"
这是通过在makeCluster
调用中设置获得的 SNOW 输出文件:
该代码使用本地机器的 8 个线程中的 7 个线程。foreach 调用是这样进行的:
mainF() 函数说明
很难为这个功能生成一个 MRE,因为它很复杂。代码在这里,我将在下面描述该函数的作用。我想强调一个事实,所有这些在小数据集上都非常有效,但在大数据集上却失败了,即使它包含重复多次的小数据集的相同数据。
mainF()
是一个函数,其输入por[i]
是一个 125000 个元素的向量,其输出是一个 244 个元素的向量。该函数基本上对输入向量执行 240 个滚动均值(使用),并为每个均值获取每个时间片(通常为 15)RcppRoll
的最大值(使用计算另外 240 个值并将这些值拟合(使用)到函数以获得更多参数。返回的 240 个元素和 4 个拟合参数(每个拟合 2 个)被返回。data.table
FAdist
raster
fitdistrplus
minpack.lm
如何解决上述错误?这是什么意思?
r - foreach 错误:正在中止...反序列化(nodecon)中的错误:从连接读取错误
有时,我的 R 实例正在悄然死亡。我正在使用 foreach 进行并行处理。我正在使用 16 核和 64GB ram 机器。我正在使用以下代码来执行 foreach。
我在“mkclog”日志文件中发现了以下错误。我在Error calling serialize R function和https://github.com/stan-dev/rstan/issues/243中发现了相同的错误。工人死亡导致退出现有的 R 会话。有什么解决办法吗?
我怀疑30: (function (args) { lapply(names(args), function(n) assign(n, args[[n]], pos = .doSnowGlobals$exportenv)) tryCatch(eval(.doSnowGlobals$expr, envir = .doSnowGlobals$exportenv), error = function(e) e)})(quote(list(l = 8L)))
r - R 并行处理 - 节点选择
我正在尝试在具有 8 个内核的计算机上使用并行包在Windows上处理 R 中的大量数据。我有一个大的data.frame,我需要逐行处理。对于每一行,我可以估计处理该行需要多长时间,这可以从每行 10 秒到 4 小时不等。
我不想在 clusterApplyLB 函数下一次运行整个程序(我知道这可能是最优化的方法),因为如果它遇到错误,那么我的整个结果集可能会丢失。我第一次尝试运行我的程序涉及将其分解为块,然后单独并行运行每个块,保存该并行运行的输出,然后转到下一个块。
问题在于,当它通过行运行时,而不是以 7 倍“实时”运行(我有 8 个内核,但我想保留一个备用),它似乎只以大约 2 倍的速度运行。我猜这是因为向每个核心分配行效率低下。
例如,2 核的 10 行数据,其中两行可以运行 4 小时,另外两行需要 10 秒。理论上,这可能需要 4 小时 10 秒才能运行,但如果分配效率低下,则可能需要 8 小时。(显然这是夸大其词,但是当估计不正确时,可能会发生类似的情况,因为更多的核心和更多的行)
如果我估计这些时间并以我估计的正确顺序将它们提交给 clusterApplyLB(以使估计的时间分布在内核之间以最大限度地减少所花费的时间),它们可能不会被发送到我希望它们发送的内核是,因为他们可能不会在我估计的时间内完成。例如,我估计两个进程的时间分别为 10 分钟和 12 分钟,它们需要 11.6 分钟和 11.4 秒,那么提交给 clusterApplyLB 的行的顺序将不是我预期的。这种错误可能看起来很小,但是如果我优化了多个长时间的行,那么这种顺序混淆可能会导致两个 4 小时的行转到同一个节点而不是不同的节点(这几乎可以使我的总时间)。
TL;博士。我的问题:有没有办法告诉 R 并行处理函数(例如 clusterApplyLB、clusterApply、parApply 或任何 sapply、lapply 或 foreach 变体)哪些行应该发送到哪个核心/节点?即使没有我发现自己所处的情况,我认为这将是提供信息的非常有用和有趣的事情。