【问题标题】:Cholmod error 'out of memory' : Merging Seurat ObjectsCholmod 错误“内存不足”:合并 Seurat 对象
【发布时间】:2021-05-10 17:25:48
【问题描述】:

我正在尝试合并包含转录组计数数据(稀疏矩阵)的 Seurat 类对象。我对 R 比较陌生,因此感谢任何帮助/解决方案。我添加了我正在处理的数据的屏幕截图。

**General Info:**
-------------

> memory.size(max = TRUE)
[1] 2533.94
R version 4.0.3 (2020-10-10)
Platform: i386-w64-mingw32/i386 (32-bit)
Running under: Windows 10 x64 (build 19041)

attached base packages:
[1] stats     graphics  grDevices utils    
[5] datasets  methods   base     

other attached packages:
[1] RSQLite_2.2.3 Seurat_3.2.3

我不确定我的存储是否有问题,或者我是否应该将功能一分为二。

 options(stringsAsFactors = F)
setwd("C:/Users/Amara/OneDrive - Virginia Tech/XieLab/ZebraFish_Project/zf_brain-master/data")
folders <- list.files("C:/Users/Amara/OneDrive - Virginia Tech/XieLab/ZebraFish_Project/zf_brain-master/data")
library(Seurat)
library(dplyr)
zfbrainList = lapply(folders,function(folder){ 
  CreateSeuratObject(counts = Read10X(folder), 
                     project = folder )
})
zfbrain.combined <- merge(zfbrainList[[1]], 
                 y = c(zfbrainList[[2]],zfbrainList[[3]],zfbrainList[[4]],zfbrainList[[5]],
                       zfbrainList[[6]],zfbrainList[[7]],zfbrainList[[8]],zfbrainList[[9]],
                       zfbrainList[[10]],zfbrainList[[11]],zfbrainList[[12]],zfbrainList[[13]],
                       zfbrainList[[14]],zfbrainList[[15]]), 
                 add.cell.ids = folders, 
                 project = "zebrafish")

.cbind2Csp(x, y) 中的错误: 文件 ../Core/cholmod_memory.c 中的 Cholmod 错误“内存不足”,第 147 行

Data folder

【问题讨论】:

    标签: r merge sparse-matrix seurat


    【解决方案1】:

    用于处理原始问题中数据的机器具有运行 32 位版本 R 的 64 位 Windows 操作系统。memory.size() 的结果表明,@987654337 可以使用大约 2.4Gb 的 RAM @R 使用的函数。根据help for memory.size(),Windows 上的 32 位版本的 R 在 64 位 Windows 上运行时最多可以访问略小于 4Gb 的 RAM。

    Memory Limits in R 告诉我们,在 Windows 上的 32 位 R 中,通常不可能分配 2Gb 大小的单个向量,因为 Windows 在 2 Gb 地址空间的中间消耗了一些内存。

    一旦我们从问题中加载数据,zfbrainList 对象就会消耗大约 1.2Gb 的 RAM。

    options(stringsAsFactors = F)
    folders <- list.files("./data/zebraFishData",full.names = TRUE)
    library(Seurat)
    library(dplyr)
    zfbrainList = lapply(folders,function(folder){ 
         CreateSeuratObject(counts = Read10X(folder), 
                            project = folder )
    })
    format(object.size(zfbrainList),units = "Gb")
    

    ...结果:

    > format(object.size(zfbrainList),units = "Gb")
    [1] "1.2 Gb"
    

    此时,代码尝试将列表中的对象合并为一个对象。

    zfbrain.combined <- merge(zfbrainList[[1]], 
                              y = c(zfbrainList[[2]],zfbrainList[[3]],zfbrainList[[4]],zfbrainList[[5]],
                                    zfbrainList[[6]],zfbrainList[[7]],zfbrainList[[8]],zfbrainList[[9]],
                                    zfbrainList[[10]],zfbrainList[[11]],zfbrainList[[12]],zfbrainList[[13]],
                                    zfbrainList[[14]],zfbrainList[[15]]), 
                              add.cell.ids = folders, 
                              project = "zebrafish")
    

    当我们计算生成的zfbrain.combined 对象的大小时,我们发现它的大小也大约为 1.2Gb,超过了原始发布者机器上 R 可用的 RAM。

    format(object.size(zfbrain.combined),units = "Gb")
    
    > format(object.size(zfbrain.combined),units = "Gb")
    [1] "1.2 Gb"
    

    由于在创建 zfbrain.combinedzfbrainList 必须在 RAM 中,因此无法在只有 2.4Gb RAM 可访问的 R 实例中执行上面编码的合并,因为两者都消耗了 RAM zfbrainListzfbrain.combined 介于 2.4 - 2.5Gb 之间,不包括 R 运行所需的其他 RAM。

    解决方法:使用64位版本的R

    由于大多数基于 Windows 的机器至少有 4Gb 的 RAM,而memory.size() 报告的 RAM 量是 2.4Gb,因此机器上可能至少有 4Gb 的 RAM。原帖中使用的机器已经安装了 64 位 Windows,因此我们可以通过安装和运行 64 位版本的 R 来让 R 访问更多内存。

    在具有 8Gb RAM 的基于 Windows 的计算机上,32 位 R 报告 memory.size()memory.limit() 的以下内容。

    有趣的是,R 报告 memory.size() 的值为 25.25,因为根据 help documentation,1Mb 向下舍入为 0.01,但 memory.limit() 提供了一个介于 0 和 4095 之间的数字(也根据文档)。在我们的测试机器上,它报告了 3583,大约 3.5Gb 的 RAM。

    当我们在同一台机器上以 64 位 R 运行这些函数时,memory.size() 报告 34.25,这意味着malloc() 将分配一个大小为 3.3Gb 的对象,memory.limit() 报告 R 可以访问总共 8Gb 的 RAM,即安装在这台特定机器上的总量。

    测试解决方案

    当我在 64 位 Windows 上的 32 位 R 4.0.3 会话中运行代码时,我能够复制内存不足错误。

    当我在 64 位版本的 R 中运行代码时,它会运行完成,并且我能够计算生成的 zfbrain.combined 对象的大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多