【问题标题】:bootstrapping with 10 million replicates - not enough memory具有 1000 万次复制的引导 - 内存不足
【发布时间】:2016-09-14 03:24:23
【问题描述】:

我想在 R 中计算 1000 万次引导复制,但我的机器没有足够的内存(128 GB)。

现在,我一直在使用 boot 在多个内核上执行此操作:

boot_data <- boot(data=data, statistic=correlation_fn, R=10^7, 
                  parallel="multicore", ncpus=10)

甚至在任何子进程开始计算之前(通过使用htop 进行监视,计算就会耗尽内存:

mcfork() 中的错误:

无法fork,可能原因:无法分配内存

调用:cor_boot_wrap -> boot -> -> lapply -> FUN -> mcfork

执行停止

警告信息:

系统调用失败:无法分配内存

是否有另一种方法可以使用内存映射(可能使用bigmemoryff)?我意识到这个问题可以通过使用另一台内存更大的机器轻松解决,但这不是我的选择。

最后,我使用boot.ci(boot_data, type="bca") 计算置信区间,所以任何中间方法都应该与此兼容。

【问题讨论】:

  • 实际需要 1000 万个样本,您在做什么分析?
  • 或许可以完成这项工作,但如果没有可重现的示例,我们无能为力帮助您。但是,您应该首先在不进行并行化的情况下对此进行测试,然后尝试使用较小的 n 递增数来推断内存需求。
  • 好主意,我将进行可重现的分析并修改问题。

标签: r memory parallel-processing statistics-bootstrap


【解决方案1】:

您能否使用代表引导程序选择的索引创建一个文件或一组文件。您还可以编写每个引导程序产生的对象本身。然后您的处理将是读取每个文件并执行您的分析。该问题可能是由于试图一次在内存中创建所有内容而引起的。

一次运行 1000 个引导程序然后合并结果如何?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-07
    • 2011-12-02
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    相关资源
    最近更新 更多