问题标签 [r-bigmemory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 如何在 R 中保存和加载 bigmemory::big.matrix 对象?
我正在尝试在我的 R 代码中使用 big.matrix 对象,但是我无法使用 将它们保存到文件中saveRDS
,这是我通常保存对象的方式:
我假设 saveRDS 不知何故未能意识到 big.matrix 对象实际上是指向其他内存的指针,并且实际上只是保存了一个指针。有什么办法可以解决这个问题吗?
(我真的不想使用文件支持的 big.matrix 对象,因为我真正要保存的对象是一个包含一个或多个 big.matrix 对象的复杂数据结构,所以我需要每个 big.matrix 对象的支持文件.matrix 包含在对象中,然后对象将被序列化为不确定数量的文件,而不仅仅是一个。)
r - 尝试创建大型矩阵时 R 崩溃
我正在尝试创建一个大的 0 矩阵,以便在插入和转换一些数据后将其转换为网络对象。我使用的数据是用户 ID 及其朋友 ID 的列表。我正在使用我在此处找到的代码 [ http://www.shizukalab.com/toolkits/sna/sna_data]将用户和朋友之间的连接转换为 1。然后我可以使用statnet
andigraph
来分析数据。当我尝试根据我的 R 会话不断中止的数据维度创建矩阵时,就会出现问题。
为了具体起见,我将展示我的整个过程,因为我认为问题不是内存或系统问题,而是我的数据问题。
所以我首先对数据进行子集化,给我两列,用户 ID 和他们的朋友。然后我将其折叠并从中创建了一个 txt 文件,然后我将其扫描到内存中。
这是一个dat
看起来像的片段:
然后我阅读了 的长度dat
以建立维度并尝试创建矩阵。Rstudio 似乎运行了很长时间,然后崩溃了。
同样,我不认为这是内存或系统问题。基于其他 StackOverflow 讨论,我正在使用该bigmemory
包并在我的四个核心中的三个上运行。这是其中的一部分,sessionInfo
我有 16GB RAM。我也在运行 Rstudio v. 0.99.486,几周前我刚刚升级了它。
我不是最高级的 R 用户,所以我可能会忽略一些明显的东西。任何想法都非常感谢。
r - 超大数据集的稀疏数据聚类
我试过使用
- kmeansparse,来自 sparcl 包(缺少内存错误)
- Biganalytics 的 bigkmeans (奇怪的错误:在网上找不到任何东西;duplicated.default 中的错误(centers[[length(centers)]]) :duplicated() 仅适用于向量)
- 来自 skmeans 的 skmean(与 kmeans 相似的结果)
但我仍然无法为我的稀疏数据获得正确的聚类。集群没有很好的定义,大部分都具有重叠的成员资格。在处理稀疏数据方面我是否遗漏了什么?建议对数据进行什么样的预处理?是否应将缺失值标记为 -1 而不是 0 以便清楚区分?如果您有任何可能有帮助的想法,请随时询问更多详细信息。
r - 如何在 R 中有效地使用 big.matrix 进行交叉验证?
我有一个函数,如下所示,它将一个X
具有类类型的设计矩阵big.matrix
作为输入并预测响应。
注意:矩阵大小X
超过 10 GB。所以我无法将它加载到内存中。我曾经read.big.matrix()
生成支持文件X.bin
和X.desc
.
我的问题是,如何使用这个巨大的 big.matrix 有效地进行交叉验证?
我的尝试:(它有效,但很耗时。)
- 第 1 步:对于每一折,获取训练
idx.train
和测试的指标idx.test
; - 步骤 2:
X
分为X.train
和X.test
。由于X.train
和X.test
也非常大,我必须将它们存储为,并为每个折叠的训练和测试集big.matrix
创建关联的支持文件 (.bin
, ) 。.desc
- 第 3 步:输入
X.train
以构建模型,并预测 的响应X.test
。
耗时的部分是第 2 步,我必须多次创建用于训练和测试的支持文件(几乎就像复制/粘贴原始大矩阵一样)。例如,假设我进行 10 倍交叉验证。第 2 步将花费 30 多分钟来为所有 10 个折叠创建备份文件!
为了在步骤 2 中解决这个问题,我想也许我可以将原始矩阵分成 10 个子矩阵(类类型big.matrix
)一次。然后对于每一折,我使用一个部分进行测试,并将剩余的 9 个部分组合为一个大矩阵进行训练。但是新的问题是,big.matrix
没有复制/粘贴就没有办法有效地将小的组合成一个大的。
当然,我可以为这个交叉验证过程进行分布式计算。但我只是想知道如果仅使用单核是否有更好的方法来加快该过程。
有任何想法吗?提前致谢。
更新:
X
事实证明,@cdeterman 的答案在很大时不起作用。原因是该mpermute()
函数本质上是通过复制/粘贴来置换行。mpermute()
在 C++ 中调用ReorderRNumericMatrix()
,然后调用reorder_matrix()
函数。此函数通过遍历所有列和行并进行复制/粘贴来重新排序矩阵。请参阅此处的源代码。
有没有更好的想法来解决我的问题?谢谢。
结束更新
r - 计算 big.matrix 的平均值
我正在使用bigmemory和biganalytics包,并专门尝试计算big.matrix
对象的平均值。biganalytics 的文档(例如?biganalytics
)建议mean()
应该可用于big.matrix
对象,但这失败了:
虽然有些事情可以正常工作:
没有mean()
,似乎mean(colmean(x))
是下一个最好的事情:
大概mean()
还可以更快,尤其是对于具有大量列的矩形矩阵。
任何想法为什么mean()
不适合我?
r - 使用 R 中的 bigmemory 包读取缺少数据的大型 csv 文件
我正在使用大型数据集进行研究(4.72GB),我在 R 中发现了“bigmemory”包,据说可以处理大型数据集(最大 10GB)。但是,当我使用 read.big.matrix 读取 csv 文件时,出现以下错误:
我认为问题在于 csv 文件未满,即多个单元格中缺少值。我尝试删除 header = TRUE 但随后 R 中止并重新启动会话。
有没有人有使用 read.big.matrix 读取缺少数据的大型 csv 文件的经验?
r - 在 R 中使用 big.matrix 进行交叉验证的并行计算
我正在尝试使用mclapply
并行化交叉验证来为非常大的设计矩阵X
(~10GB)和响应向量建模拟合过程y
。假设X
是维度n-by-p
: n=1000, p=1,000,000
。由于X
非常庞大,它作为big.matrix
对象支持,存储在磁盘中,并使用 R 包中的方法进行访问bigmemory
。
4 折交叉验证的工作流程如下。
- 设置
cv.ind
长度为 的索引向量n
,它存储从 1 到 4 的数字序列,指示哪个观察值X
属于 CV 的哪个折叠。 - 设置4个核心。在第 i 个核心中,为第 i 个折叠 CV 复制相应的训练和测试子矩阵。
- 为每个核心中的每个折叠拟合一个模型。
- 收集结果,返回。
交叉验证函数如下所示。
R 函数cvf
在每个内核中运行。它将第 i 次折叠的训练/测试矩阵复制为两个big.matrix
对象,拟合模型,计算一些统计数据并返回结果。
到目前为止,当设计矩阵X
不是太大时,代码工作得很好,比如n=1000, p=100,000
大小约为 1GB。但是,如果p=1,000,000
因此大小X
变为 ~10GB,则每个内核中的模型拟合过程将永远运行!!!!!!(以下部分):
备注:
- 如果我在原始矩阵 (10GB) 上运行一次“ncvreg()”,大约需要 2.5 分钟。
for
如果我使用loop 但 not顺序运行交叉验证mclapply
,则代码运行良好,每个折叠 'ncvreg()' 的模型拟合也很好(约 2 分钟),尽管整个过程需要约 25 分钟。- 起初我尝试了同样的问题“parLapply”。由于这里的原因,我切换到“mclapply” 。
- 每个核心中的数据复制步骤(即
deepcopy
部分)运行良好,大约需要 2 分钟才能将训练和测试数据集复制并备份到磁盘上。 - 我试图监控 CPU 使用率,下面是一张截图。如我们所见,在左图中,4 个 rsession 中的每一个都占用了 ~25% 的 CPU 使用率,而有一个进程时,kernel_task占用了 ~100% 的 CPU。随着时间的推移,kernel_task甚至会占用 150% 的 CPU。此外,CPU 历史面板(右下角)显示大部分 CPU 使用率来自系统,而不是用户,因为红色区域主导绿色区域。
我的问题:
- 为什么模型拟合过程在并行时需要很长时间?可能的原因是什么?
- 我是否在正确的轨道上并行化 big.matrix 的 CV 程序?有什么替代方法吗?
我感谢任何有助于解决我的问题的见解。提前致谢!!
r - 在 R 中处理大数据集的最佳方法
我必须在一个大数据集上运行一些回归模型和描述。我有一个包含大约 500 个文件(更新:txt 文件)的文件夹,我想合并它们,总共 250GB。
我知道如何合并文件夹中的所有文件,但是尽管我在 128RAM 服务器上运行它,但我一直在内存不足。
我正在寻找有关如何使用 RI 以可管理的方式(如果可能)加载/合并这些文件的任何提示/建议,我一直在研究诸如“ff”和“bigmemory”之类的包,这些会为我提供解决方案吗?
r - 大矩阵和内存问题
我正在处理一个巨大的数据集,我想得出一个测试统计的分布。因此,我需要使用巨大的矩阵 (200000x200000) 进行计算,正如您可能预测的那样,我有内存问题。更准确地说,我得到以下信息:错误:无法分配大小为 ... Gb 的向量。我在 64 位版本的 R 上工作,我的 RAM 是 8Gb。我尝试使用包 bigmemory 但没有取得很大成功。
当我必须计算距离矩阵时,第一个问题就出现了。我在名为 Dist 的 amap 包中发现了这个不错的函数,它可以并行计算数据帧的列的距离,并且效果很好,但是它会产生下/上三角形。我需要距离矩阵来执行矩阵乘法,不幸的是我不能使用一半的矩阵。当使用 as.matrix 函数使其充满时,我又遇到了内存问题。
所以我的问题是如何通过跳过 as.matrix 步骤将 dist 对象转换为 big.matrix 。我想这可能是一个 Rccp 问题,请记住,我是 Rccp 的新手。
提前谢谢!
r - Work on data that larger than physical RAM in R using bigmemory?
I am developing an R package called biglasso that fits lasso models in R for massive data sets by using memory-mapping techniques implemented in bigmemory C++ library. Specifically, for a very large dataset (say 10GB), a file-backed big.matrix
is first created with memory-mapped files stored on disk. Then the model fitting algorithm accesses the big.matrix
via MatrixAccessor defined in the C++ library to obtain data for computation. I assume that memory-mapping technique allows to work on data that larger than available RAM, as mentioned in the bigmemory paper.
For my package, everything works great at this point if the data size doesn't exceed available RAM. However, the code runs like forever when the data is larger than RAM, no complains, no errors, no stop. On Mac, I checked top
command, and noticed that the status of this job kept switching between "sleeping" and "running", I am not sure what this means or this indicates something going on.
[EDIT:]
By "cannot finish", "run forever", I mean that: working on 18 GB of data with 16 GB RAM cannot finish for over 1.5 hours, but it could be done within 5 minutes if with 32 GB RAM.
[END EDIT]
Questions:
(1) I basically understand memory-mapping utilizes virtual memory so that it can handle data larger than RAM. But how much memory does it need to deal with larger-than-RAM objects? Is there a upper bound? Or is it decided by size of virtual memory? Since the virtual memory is like infinite (constrained by hard drive), would that mean memory-mapping approach can handle data much much larger than physical RAM?
(2) Is there a way that I can measure the memory used in physical RAM and the virtual memory used, separately?
(3) Are there anything that I am doing wrong? what are possible reasons for my problems here?
Really appreciate any feedback! Thanks in advance.
Below are some details of my experiments on Mac and Windows and related questions.
- On Mac OS: Physical RAM: 16GB; Testing data: 18GB. Here is the screenshot of memory usage. The code cannot finish.
[EDIT 2]
I attached CPU usage and history here. There is just use one single core for the R computation. It's strange that the system uses 6% CPU, while User just uses 3%. And from the CPU history window, there are a lot of red area.
Question: What does this suggest? Now I suspect it is the CPU cache is filled up. Is that right? If so, how could I resolve this issue?
[END EDIT 2]
Questions:
(4) As I understand, "memory" column shows the memory used in physical RAM, while "real memory" column shows the total memory usage, as pointed out here. Is that correct? The memory used always shows ~ 2GB, so I don't understand why so much memory in RAM is not used.
(5) A minor question. As I observed, it seems that "memory used" + "Cache" must be always less than "Physical memory" (in the bottom middle part). Is this correct?
- On Windows machine: Physical RAM: 8GB; Testing data: 9GB. What I observed was that as my job started, the memory usage kept increasing until hitting the limit. The job cannot finish as well. I also tested functions in biganalytics package (also using bigmemory), and found the memory blows up too.