gpt4 book ai didi

r - 修复具有不同内核数的并行仿真运行的种子

转载 作者:行者123 更新时间:2023-12-05 05:19:29 25 4
gpt4 key购买 nike

我想并行化模拟研究以加快速度,我还想考虑可重复性。特别是,我希望获得与在顺序模拟运行开始时使用 set.seed 相同的结果。这是我尝试设置它的示例(我在这里有意使用 .inorder=T):

library(doSNOW)
library(rlecuyer)

nr.cores = 4
nr.simulations = 10
sample.size = 100000

seed = 12345

cl = makeCluster(nr.cores)
registerDoSNOW(cl)
clusterExport(cl=cl, list=c('sample.size'), envir=environment())
clusterSetupRNGstream(cl,rep(seed,6))

result = foreach(i=1:nr.simulations, .combine = 'c', .inorder=T)%dopar%{
tmp = rnorm(sample.size)
tmp[sample.size]
}

stopCluster(cl)

print(paste0('nr.cores = ',nr.cores,'; seed = ',seed,'; time =',Sys.time()))
print(result)

多次运行此示例后,我有两个问题:

  1. 核心数会影响结果序列,例如,对于 nr.cores=14,只有第一个值一致,而对于 nr.cores=48 前四个值重合。有没有办法让它独立于 nr.cores?从概念上讲,我想我可以创建一个大小为 nr.simulations * sample.size 的 RNG 流,将其拆分为 nr.simulations 部分并将它们始终分发到节点以相同的顺序。更简单的是,我可以修复(不同)种子的 nr.simulations 值,然后再次以固定顺序将它们传递给节点。这可以通过某种节点映射来完成,节点可以使用该节点映射从表中读取其适当的种子值。有办法吗?

  2. 当我多次运行脚本时,即使我没有更改任何参数(我只是一次又一次地获取文件),结果序列也会重新排序(并非总是如此,但有时会发生) .它对我来说就像是一个错误,因为 .inorderclusterSetupRNGstream 失败。还是我遗漏了什么?

    [1] "nr.cores = 4; seed = 12345; time =2017-09-08 19:00:24"
    [1] 1.327091137 -1.800244293 -1.163391460 0.005980001 0.957521136 1.641354433 -1.219033091
    [8] -0.238129356 -0.225193384 1.457018576

    [1] "nr.cores = 4; seed = 12345; time =2017-09-08 19:00:28"
    [1] 1.327091137 -1.800244293 -1.163391460 0.005980001 -0.238129356 0.957521136 1.641354433
    [8] -1.219033091 0.870269174 -0.225193384

最佳答案

第一个问题:以下似乎对我有用

library(parallel)
library(doParallel)
cl <- makeCluster(5)
registerDoParallel(cl)
seedlist <- c(100, 200, 300, 400, 500)
clusterExport(cl, 'seedlist')
foreach(I=1:5) %dopar% {set.seed(seedlist[I]); runif(1)}

[[1]]
[1] 0.3077661

[[2]]
[1] 0.5337724

[[3]]
[1] 0.9152467

[[4]]
[1] 0.1499731

[[5]]
[1] 0.8336


set.seed(100)
runif(1)
[1] 0.3077661

第二个问题:看起来像是一个错误,但也许其他人有更好的线索

关于r - 修复具有不同内核数的并行仿真运行的种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46121551/

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