问题标签 [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 会话
我正在寻找一种方法来从当前会话开始R
在用户定义的目录中工作的新实例。R
例如,假设我有
我想做类似的事情
换句话说,我希望能够使用R
引用另一个工作目录的另一个会话来评估某些内容,同时保持主R
会话等待。是否有任何包/功能/做事方式?
r - parLapply:未使用的参数(MoreArgs
当我遇到意外问题时,我试图调试我正在处理的 parLapply 函数:parLapply 的 MoreArgs 参数不起作用!现在是凌晨 5 点,我一定很累,错过了一些非常明显和愚蠢的东西,但我终生无法看到它是什么。无论如何,这是给我带来麻烦的最小示例:
输出是:
r - R 并行 - Partools 包 - `calm()` 函数出错
我正在使用该partools
包并行运行线性回归。我正在使用该calm()
函数执行此操作,该函数是包版本 R 的包装器lm()
。
我在 64gb 节点上使用 20 个内核。
我在运行该calm()
函数时收到错误,并且我已将问题隔离到一个变量:agelvl
. 由于partools
必须将数据集拆分为块(块的数量等于要使用的核心数量),因此据我所知,变量存储为字符或整数。agelvl
由于它的命名级别,它被存储为一个字符,所以我factor()
在函数中使用它。
这是代码:
这是错误:
当我在本地机器上运行上述代码时(尽管使用 3 个核心,而不是 20 个),我无法重现该错误。这表明问题出现在分块中,特别agelvl
是一个或多个块中缺少给定级别的 。
但是,这是agelvl
未分块数据中的摘要:
在我看来,分成 20 个块似乎不太可能,这 20 个块中的任何一个都不会丢失这些级别中的任何一个。我什至单独检查了每 20 个块,我没有看到任何级别丢失:
有趣的是,当我将数据分成 3 个块并在集群上使用 3 个核心而不是 20 个核心时,我让它运行,就像我能够在我的本地机器上一样。
那么,为什么在使用 20 核而不是 3 核时会出现这个问题?
r - R Google Compute Engine 创建集群错误
我正在尝试创建一个包含在 GCE 上的虚拟机上的 R 集群。我遵循了googleComputeEngineR中的示例。我已经粘贴了下面的代码。
基本上,我可以创建虚拟机并建立对它们的 SSH 访问,但 socketConnection 一直超时。有什么想法可能是错的吗?
这是我得到的输出:
2018-10-10 20:27:20> 创建模板虚拟机
2018-10-10 20:27:22> 检查操作...待处理
2018-10-10 20:27:33> 运行中...
2018-10-10 20:27:53> 操作在 17 秒内完成
2018-10-10 20:27:53> 外部 IP 例如 cpu1:35.240.99.251
2018-10-10 20:27:53> ## VM r-base 在 35.240.99.251 运行
2018-10-10 20:27:53> 等待几分钟,让初始 docker 容器下载并安装,然后再登录。
2018-10-10 20:27:54> 虚拟机运行
2018-10-10 20:27:59> 创建模板虚拟机
2018-10-10 20:28:01> 检查操作...待处理
2018-10-10 20:28:21> 操作在 5 秒内完成
2018-10-10 20:28:22> 外部 IP 例如 cpu2:35.205.28.126
2018-10-10 20:28:22> ## VM r-base 在 35.205.28.126 运行
2018-10-10 20:28:22> 等待几分钟,让初始 docker 容器下载并安装,然后再登录。
2018-10-10 20:28:23> 虚拟机运行
2018-10-10 20:28:30> SSH 公钥上传到实例
2018-10-10 20:28:38> SSH 公钥上传到实例
2018-10-10 20:28:59> 外部 IP 例如 cpu1:35.240.99.251
socketConnection 中的错误(“localhost”,端口 = 端口,服务器 = TRUE,阻塞 = TRUE,:
已达到已用时间限制
r - R non-standard evaluation : get promise value while leaving it unevaluated [or: keep external pointer valid...]
This a follow-up to Parallelize function taking external pointers (XPtr)
I won't reproduce the Cpp code here to make things shorter. The problem was to that once a parameter of a function is evaluated, it is defined in the function's environment and, in the case of an external pointer, is no longer available in a fork cluster.
So while this function worked:
This function didn't:
As pointed out by Ralf Stubner, this came from the fact that the call g(a, 0)
forced the evaluation of the promise a
. He suggested the following work around (here with two debug prints to understand how it works):
This allowed to access to whatever was in a
, but a
was still an unevaluated promise. But this doesn't work when test3
is called from another function!
While test4
works well (the recursive promise evaluation seems to give a valid pointer), the workaround in test3
no longer works when called from test5
.
The debugging prints show that despite the eval(substitute(a))
trick, the promise is evaluated. My understanding is that this tricks forces the evaluation of the promise b
of test5
in its environment, thus a
becomes evaluated too.
Is there another workaround? (I tried to play with pryr::parent_promise
but even the code from the example in the man page gives strange results).
I have other complex problems of this type. A general way to get the content of a promise without evaluating it, or to pass external pointers to other functions, with a parLapply
call at the very end, without stumbling constantly on this problem, would be much welcome.
r - 无法在 Windows 10 上制作集群
我无法在 Windows 10 计算机上使用parallel::makeCluster
或。snow::makeCluster
我经常收到此错误,每次使用不同的端口号:
我使用这个 R 代码,它在另一台计算机上运行良好,但我不知道为什么相同的代码对我不起作用:
我尝试了一些建议的解决方案但没有成功,包括禁用防火墙。有没有办法避免在 Windows 计算机上阻塞端口(或解除阻塞)以并行使用 R?
r - makeCluster 函数中的第一个参数究竟是做什么的?
从我的问题的性质可以看出,我是 r 编程的新手。我正在尝试利用 train 函数的并行计算能力。
我需要有人帮我解释这段代码。最初的第一个参数makeCluster()
had nthreads 但在运行之后
我了解到我有 4 个线程可用。我根据指南中提供的消息更改了值。这能让我一次同时运行 128 次 train 函数迭代吗?如果是这样,首先获取我的计算机拥有的线程和内核数量有什么意义?
r - R parLapply 需要越来越多的时间才能完成
我在一个循环中运行函数 parLapply 并验证一个奇怪的行为。每次迭代的时间显着增加,这样的增加没有多大意义。
因此,我开始在周期内对函数进行计时,以查看哪个函数花费的时间最多,我发现 parLapply 花费了超过 95% 的时间。因此,我进入了 parLapply 函数并对其计时,以查看函数内部和外部之间的时间是否匹配。他们并没有很大的差距。这个余量随着时间的推移而增加,并且差异可以达到几秒钟,这对算法完成所需的时间产生了很大的影响。
我预计 time.taken 将类似于所有 time.taken_par 的总和。但事实并非如此。所有 time.taken_par 的总和通常为 0.026 秒,而 time.taken 开始时是该值的 4 倍,这很好,但随后会增加到更多(> 5 秒)。
谁能解释发生了什么和/或我认为应该发生的事情是否错误?是内存问题吗?
谢谢您的帮助!
编辑:
的输出parLapply
如下。然而,在我的测试中,有 10 个列表,而不是本例中的 3 个。返回的每个单独列表的大小parLapply
始终相同,在本例中为 25。
编辑2:
好的,我发现了问题所在。我有一个数组,我使用vector("list",10000)
. 在循环的每次迭代中,我都会向这个数组添加一个列表列表。此列表列表的大小为 6656 字节。因此,在 10000 次迭代中,它甚至不等于 0.1Gb。然而,随着这个数组开始填满,并行化的性能开始下降。我不知道为什么会发生这种情况,因为我在具有 64Gb RAM 的机器上运行脚本。这是一个已知问题吗?