gpt4 book ai didi

r - 追溯罕见错误

转载 作者:行者123 更新时间:2023-12-03 23:16:31 27 4
gpt4 key购买 nike

我正在运行一个需要很长时间来计算的代码。我使用 foreach()%dopar% 使我的代码并行并在集群上运行。

它运行正常,但有时会崩溃,我收到以下错误:Error in { : task 4 failed - "missing value where TRUE/FALSE needed"
Calls: %dopar% -> <Anonymous>
Execution halted

现在它说执行停止,但仅针对此特定核心,因此其他核心继续运行,最后它无法输出但没有事先告诉我。
我猜这是 if 的问题陈述。我尝试在我的电脑上模拟代码,但它太罕见了,我无法模拟它。

该代码可以轻松运行 100 小时,执行多达 100 000 次循环,其中只有一次会失败。

我的问题是:我可以回溯错误的位置吗? (我在集群上运行代码,所以我没有所有好的 Rstudio 东西)
另外,是否仍然可以从 foreach() 输出?即使其中一项任务崩溃也循环?
或者也许人们使用任何方法来使我的计算机发生崩溃?

如果需要,我可以编写代码,请询问是否有帮助。

最佳答案

foreach ".errorhandling"参数旨在帮助解决这种情况。如果您希望 foreach 传递错误,请使用 .errorhandling="pass" .如果您希望它过滤掉错误(这会减少结果的长度),请使用 .errorhandling="remove" .默认值是“stop”,它会抛出一个错误,指示哪个任务失败了。

不幸的是,大多数并行后端不支持回溯,但 doMPI 支持。您只需使用 verbose=TRUE 调用“startMPicluster” ,并且回溯将写入发生错误的工作人员的日志文件。这是在任务 42 上生成错误的示例:

suppressMessages(library(doMPI))
cl <- startMPIcluster(4, verbose=TRUE)
registerDoMPI(cl)
g <- function(i) {
if (i == 42) {
if (NULL) cat('hello, world\n')
}
7
}
f <- function(i) g(i)
r <- foreach(i=1:50, .errorhandling='pass') %dopar% f(i)
print(r)
closeCluster(cl)
mpi.quit()

因为它使用 .errorhandling="pass" ,脚本运行完成,在结果列表的元素 42 中返回一个错误对象。此外,其中一个日志文件包含错误的回溯(以及许多其他消息):
waiting for a taskchunk...
executing taskchunk 42 containing 1 tasks
error executing task: argument is of length zero
traceback (most recent call first):
> g(i)
> f(i)
> eval(expr, envir, enclos)
> eval(expr, envir)
> executeTask(taskchunk$argslist[[1]])
> executeTaskChunk(cl$workerid, taskchunk, envir, err, cores)
returning error results for taskchunk 42

不幸的是,doMPI 主要用于 Linux 系统,因此这对大多数 Mac 和 Windows 用户没有帮助。

关于r - 追溯罕见错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23082764/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com