【发布时间】:2015-02-10 07:06:26
【问题描述】:
我正在使用 foreach 包使用 HPC 并行运行蒙特卡罗模拟。我对 foreach 返回我想要的结果没有任何问题,但我想知道是否可以定期保存工作区。我问的原因是我必须指定一个壁挂时间(在此之后作业终止),所以我冒险 1. 设置壁挂时间太低并在 foreach 循环完成并保存我的输出之前丢失所有内容或 2. 设置一个保守的walltime 和浪费我的配额。理想情况下,我希望能够定期保存我的输出,在这种情况下,如果作业终止,我仍然有数据。
例如:
results <- foreach (ii = 1:100, .combine = rbind) %dopar% {
res1 <- ii^2
res2 <- matrix(sample(1:9,9,replace = F),nrow = 3, ncol = 3)
if (ii %% 10 == 0){
save.image("temp_save.RData")
}
results <- list(res1,res2)
}
save.image("final_save.RData")
> load("~/final_save.RData")
> results
[,1] [,2]
result.1 1 Integer,9
result.2 4 Integer,9
result.3 9 Integer,9
result.4 16 Integer,9
...
但是'temp_save'是空的,大概是因为'results'只有在foreach循环完成后才生成。在 foreach 循环完成之前,有什么方法可以访问和保存这些数据?感谢您的帮助。
【问题讨论】:
-
你可以将 res1 和 res2 转储到文件中,这样就够了吗?
-
您使用的是什么后端? doParallel?
-
@Steve 我使用 doMC 作为后端。
-
@Laurik 如果可能的话,我宁愿保存而不是写,但感谢您的建议 - 如果我不能使用保存,这绝对是一个选择。
-
@yidryi 是的,但您也可以 save() 特定变量而不是整个图像。也许值得一试?
标签: r parallel-processing parallel-foreach