我运行Linux集群内中的R读码 - 该代码是复杂的(超过两千行代码),涉及超过40个R包和几百个变量。但是,它在Windows和R.
的Linux版本,我现在正在运行爱丁堡大学EDCF高性能计算集群上运行的代码都和代码并行运行。并行代码在DEoptim中调用,基本上,在初始化后,并行运行一系列函数,并将结果发送回DEoptim算法,并将其作为绘图和数据表保存在我自己的空间 - 重要的是代码运行和工作!
的代码模型区域的水文,我可以设置密码了我想要的任何时间内,模拟历史条件 - 从一天到30年。平行一个月,结果大约每隔70秒吐出一次,而DEoptim算法只是不断重新运行代码,改变输入参数,试图找到最佳参数集。
该代码似乎运行良好的一些运行,但最终崩溃。昨晚的代码完成了一个100组的运行没有问题了大约2个小时,但最终坠毁 - 它总是最终崩溃 - 错误代码:
Error in unserialize(node$con) : error reading from connection
我登录到该系统是一个16核服务器( 16个真正的核心)根据:
detectCores()
我要求8GB的2GB内存插槽。我试图在24内核的机器上运行这个内存大的内存请求(4个40GB的内存插槽),但它最终还是会崩溃。这段代码在Windows计算机上运行良好,并且在8台逻辑内核上并行运行数千个结果。
所以我相信代码是好的,但为什么它崩溃?它可能是一个记忆问题?每次调用它时,它都包含:
rm(list=ls())
gc()
或者它只是一个核心崩溃?我确实认为,如果两个内核试图同时写入同一个数据文件,可能会出现问题,但我暂时将其删除,并且仍然崩溃。有时会在几分钟后和其他几次后崩溃。我试图从并行代码中删除一个核心使用:
cl
但它仍然崩溃。
无论如何,该代码可以修改,因此它拒绝崩溃的输出,例如如果错误然后拒绝并继续!
或者,是否有修改代码来捕获为什么在所有发生的错误的方法吗?
我知道有很多其他序列化(节点$ con)和反序列化(节点$ con)错误帖子,但他们似乎没有帮助我。
我真的很感谢一些帮助。
谢谢。
+0
您可以尝试将有问题的代码包装到'tryCatch'中,并将结果和对象输出到文本/ .RData文件。 –
+0
我想知道如何使用tryCatch - 听起来是可能的。 –
+0
我创建了另一篇文章,试图了解如何使用tryCatch与我的代码http://stackoverflow.com/questions/33733102/how-to-use-trycatch-in-r-with-parallel-code –