问题标签 [numpy-memmap]

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.

0 投票
0 回答
46 浏览

python - numpy.lib.format.open_memmap 不存储数据

我的 numpy.lib.format.open_memmap 没有存储我的数据。代码如下。

我也试过冲洗赢家。

0 投票
2 回答
195 浏览

python - 保存在磁盘上的 numpy 数组中的随机访问

我有一个大A的 numpy 形状数组(2_000_000, 2000)dtype float64需要 32 GB。

(或者将相同的数据分成10个形状数组(200_000、2000),序列化可能更容易?)。

我们如何将它序列化到磁盘,以便我们可以快速随机读取数据的任何部分?

更准确地说,我需要能够从A随机起始索引中读取一万个形状 (16, 2 000) 的窗口i

假设我只有 8 GB 的 RAM 可用于此任务;A在 RAM中加载整个 32 GB 是完全不可能的。

我们如何在磁盘上序列化的 numpy 数组中读取这样的窗口?(.h5 格式或任何其他格式)

注意:读取是在随机起始索引处完成的这一事实很重要。

0 投票
0 回答
101 浏览

python - 就地调整 numpy memmap 的大小

我想创建一个memmap约 4 GB 的 numpy,并时不时地附加几 GB 的新数据。

为什么以下resize不起作用?

该文件保持约 4 KB 的大小,并且未调整大小。

注意:np.require(..., requirements=['O'])似乎是强制性的,如果不存在,它会给出错误

ValueError:无法调整此数组的大小:它不拥有其数据

Resizing numpy.memmap arrays中所见。

0 投票
0 回答
67 浏览

python - 高效的 numpy memmap 使用

我有一个大的结构化二进制文件(2.1GB),每个数据包中有一段标头和所需数据,正在将其读入易失性存储器以加快访问速度。为此,我目前正在使用带有自定义数据类型的 numpy 的 memmap 工具来检索所需的数据集,使用下面显示的 cython 过程,

现在,理想情况下,我希望在此 IO 操作上花费尽可能少的时间,因为数据集的进一步处理在计算上非常大,并且有多个可用的此类文件集需要类似的处理。此 IO 操作占用了将近 40% 的代码执行时间。如果数据存在于同一磁盘的不同分区上,则该值会更高。

有没有更有效或更省时的方法来做到这一点?

0 投票
1 回答
204 浏览

tensorflow - memmap 数组到 pytorch 和梯度累积

处理后我有一个大型数据集(> 62 GiB),保存为两个 NumPy.memmap 数组,其中一个数据和另一个用于标签,数据集具有这些形状 (7390,60,224,224,3) 和 (7390) 并且没有洗牌所以我需要先洗牌。

现在我使用 tensorflow2 并将这段代码与我的生成器一起使用来管理 memmap 数组

这样我就可以在不通过洗牌和批处理将整个数据集加载到内存的情况下进行训练。

现在使用这个当前的模型和数据集,vram 不足以加载超过 2 个批次作为张量。而且我无法使用 2 的批量进行训练。

我想到了梯度累积,但我不能用 TF2 来做,我发现用 pytorch 很容易,但我找不到如何处理 memmap 数组,就像在 tensorflow 中使用生成器一样。

所以我需要知道如何从 pytorch 加载数据集,并在 pytorch 中进行相同的改组和批处理。

或者如果有人在 TF2 上有一个现成的GA代码

0 投票
1 回答
42 浏览

python - 使用 numpy.memmap 时磁盘写入过多

我已经使用numpy.memmap实现了一个文件支持的 HashTable 。它似乎运行正常,但是,我注意到在 Linux 上,KSysGuard 和 SMART 都报告了荒谬的 IO 写入量。大约是应该写入的数据量的 50 倍。我没有在其他操作系统上测试过这个。

这是创建内部存储器映射的代码

以下是应用哈希函数后将单个条目写入表的代码:

我添加了self.written变量来跟踪写入了多少字节,并确定函数是否被调用了太多次。

对于大约 300 万个条目,self.written最后报告大约 60 MiB,根据我的计算,这是有道理的,这意味着存储函数没有被过度调用。然而,KSysGuard 和 SMART (data_units_written) 报告程序总共写入了3 GiB 。我正在使用的 HashTable 设置为 100 MiB 并且没有损坏或任何东西,所以我怀疑它只是一遍又一遍地将相同的数据写入相同的位置。但我无法弄清楚这可能发生在代码中的哪个位置。

我不能 100% 确定写入 HashTable 文件是否发生,但是当我将它放入 ramdisk (tmpfs) 时,KSysGuard 和 SMART 没有报告磁盘写入。

我在 Debian Bullseye 上使用 Python 3.9.2 和 numpy 1.21.0。

如果有人能帮我解决这个问题,我将不胜感激。谢谢你。

0 投票
0 回答
59 浏览

python - 使用 pytorch 训练神经网络时使用 numpy memmap 的有效方法

我正在图像数据库上训练神经网络。我的图像是全高清 (1920 x 1080) 分辨率,但为了训练,我使用大小为 256x256 的随机裁剪。由于读取完整图像然后裁剪效率不高,我使用 numpy memmap 仅加载 256x256 裁剪图像。也就是说,我正在做类似下面的事情

由于将在每个时期加载相同的图像,因此最好在初始和每个时期加载所有 memmap,只需调用上面的第二行来获取裁剪后的图像?

PS:这两种方法我都试过了,我还没有真正发现它们之间有很大的区别。我的直觉是,在函数中加载所有 memmap__init__应该比在每个 epoch 一次又一次地加载 memmap 更好,但事实并非如此。如果您能解释为什么会发生这种情况,那也会对我有所帮助。

我问这个问题的原因是,即使这两种方法对我来说都是相似的,我想知道未来的最佳实践是什么。

0 投票
0 回答
14 浏览

python-3.x - 使用 numpy memmap 映射远程服务器上的文件会导致无效参数崩溃

我正在尝试使用memmap从一些二进制文件中获取数据。有时这些文件位于 Dropbox 服务器上,并且在首次打开时不会在本地同步。以前在这种情况下,调用memmap会导致它们同步并正常加载。非常慢,但最终奏效了。由于我更新numpy了 ,它现在反而崩溃了,出现“无效参数”错误以及与我所针对的文件关联的文件路径。知道为什么会这样,我能做些什么来让它使用旧的行为吗?

我从一些相关问题中收集到与 Dropbox 服务器的同步问题很常见。我需要解决的只是一个“不是我的问题”的问题吗?

0 投票
0 回答
28 浏览

python - 如何使用 `numpy` 读取 `mmap.mmap` 对象?

我知道如何读取一个巨大的二进制文件,numpy.memmap如下所示:

接下来,我尝试使用对象numpy来读取相同的文件mmap

目标文件在字节之后只有字节。而且,我不知道如何设置dtypenp.load.

如何使用numpy函数读取mmap.mmap对象?