JK_*_*own 5 parallel-processing foreach r
我在这个主题上看过其他一些帖子,似乎没有一个与我遇到的问题完全相同.但是这里:
我正在使用并行运行一个函数
cores <- detectCores()
cl <- makeCluster(8L,outfile="output.txt")
registerDoParallel(cl)
x <- foreach(i = 1:length(y), .combine='list',.packages=c('httr','jsonlite'),
.multicombine=TRUE,.verbose=F,.inorder=F) %dopar% {function(y[i])}
这通常工作正常,但现在抛出错误:
序列化错误(数据,节点$ con):写入连接时出错
检查output.txt文件后,我看到:
starting worker pid=11112 on localhost:11828 at 12:38:32.867
starting worker pid=10468 on localhost:11828 at 12:38:33.389
starting worker pid=4996 on localhost:11828 at 12:38:33.912
starting worker pid=3300 on localhost:11828 at 12:38:34.422
starting worker pid=10808 on localhost:11828 at 12:38:34.937
starting worker pid=5840 on localhost:11828 at 12:38:35.435
starting worker pid=8764 on localhost:11828 at 12:38:35.940
starting worker pid=7384 on localhost:11828 at 12:38:36.448
Error in unserialize(node$con) : embedded nul in string: '\0\0\0\006SYMBOL\0\004\0\t\0\0\0\003')'\0\004\0\t\0\0\0\004expr\0\004\0\t\0\0\0\004expr\0\004\0\t\0\0\0\003','\0\004\0\t\0\0\0\024SYMBOL_FUN'
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -
unserialize
Execution halted
Run Code Online (Sandbox Code Playgroud)
此错误是间歇性的.内存很丰富(32GB),内存中没有其他大型R对象.并行代码中的函数从云中检索许多小的json数据对象并将它们放入R对象中 - 因此没有大型数据文件.我不知道为什么它偶尔会看到嵌入式nul并停止.
我有一个类似的问题,一个从云端提取csv文件的函数.到目前为止,这两个功能在R 3.3.0和R 3.4.0下运行良好.
我在Windows上使用R 3.4.1和RStudio 1.0.143.
这是我的sessionInfo
sessionInfo()
R version 3.4.1 (2017-06-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United
States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] parallel stats graphics grDevices utils datasets methods base
other attached packages:
[1] RJSONIO_1.3-0 RcppBDT_0.2.3 zoo_1.8-0 data.table_1.10.4
doParallel_1.0.10 iterators_1.0.8
[7] RQuantLib_0.4.2 foreach_1.4.3 httr_1.2.1
loaded via a namespace (and not attached):
[1] Rcpp_0.12.12 lattice_0.20-35 codetools_0.2-15 grid_3.4.1
R6_2.2.2 jsonlite_1.5 tools_3.4.1
[8] compiler_3.4.1
Run Code Online (Sandbox Code Playgroud)
UPDATE
现在我得到另一个类似的错误:
反序列化错误(节点$ con):ReadItem:未知类型100,可能由更高版本的R编写
嵌入式的nul错误似乎已经消失了.我也尝试删除.Rhistory和.Rdata,并删除我的包子文件夹并重新加载所有pacakges.至少这个新错误似乎是一致的.我找不到"未知类型100"是什么.
我收到类似的错误...通常在后续脚本运行时发生,这是因为先前的脚本之一出错或我提早停止了该脚本。这可能是您提到的部分:“我不知道为什么它偶尔会看到嵌入的nul并停止运行”,这可能是错误。
这有一些很好的信息,尤其是要确保为常规Windows进程运行留出1个核心。还提到“如果您从这两个函数中的任何一个发生错误,通常都意味着至少一个工人死亡”,这可能支持我关于错误后崩溃的理论。
R中的doParallel错误:serialize(data,node $ con)错误:写入连接时出错
到目前为止,我的解决方案是通过再次运行并行后端来重新初始化并行后端:
registerDoParallel(cl)
Run Code Online (Sandbox Code Playgroud)
它通常在事后才起作用,但是我确实注意到,即使有以下情况,任务管理器中的先前多核会话也不会消失:
stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)
这就是为什么我有时重新启动R的原因。
小智 5
我还注意到多核会话不会脱离任务管理器。
从使用切换stopCluster(cl)
到stopImplicitCluster()
为我工作。从我的阅读来看,这应该在使用“一行”registerDoParallel(cores=x)
与
cl<-makeCluster(x)
registerDoParallel(cl)
Run Code Online (Sandbox Code Playgroud)
我的“直觉”是 Windows 如何处理集群需要 stopImplicitCluster,但您的体验可能会有所不同。
我会发表评论,但这是(提示带)我的第一个 STACKOVERFLOW 帖子!!!
| 归档时间: |
|
| 查看次数: |
3538 次 |
| 最近记录: |