gpt4 book ai didi

python - 写入 NumPy 内存映射仍会加载到 RAM 内存中

转载 作者:太空狗 更新时间:2023-10-29 21:19:58 25 4
gpt4 key购买 nike

我正在通过 IPython Notebook 测试 NumPy 的 memmap,代码如下

Ymap = np.memmap('Y.dat', dtype='float32', mode='w+', shape=(5e6, 4e4))

如您所见,Ymap 的形状非常大。我正在尝试像稀疏矩阵一样填充 Ymap。我没有使用 scipy.sparse 矩阵,因为我最终需要用另一个密集矩阵对它进行点积,这肯定不适合内存。

无论如何,我正在执行一系列很长的索引操作:

Ymap = np.memmap('Y.dat', dtype='float32', mode='w+', shape=(5e6, 4e4))
with open("somefile.txt", 'rb') as somefile:
for i in xrange(5e6):
# Read a line
line = somefile.readline()
# For each token in the line, lookup its j value
# Assign the value 1.0 to Ymap[i,j]
for token in line.split():
j = some_dictionary[token]
Ymap[i,j] = 1.0

这些操作以某种方式快速耗尽了我的 RAM。我认为内存映射基本上是一个核外的 numpy.ndarray。我错了吗?为什么我的内存使用量疯狂飙升?

最佳答案

(非匿名的)mmap 是文件和 RAM 之间的链接,粗略地保证当 mmap 的 RAM 已满时,数据将被分页到给定的文件而不是交换磁盘/文件,当您 msyncmunmap 时,RAM 的整个区域都会被写入文件。操作系统通常遵循惰性策略。磁盘访问(或 eager wrt.RAM):只要适合,数据就会保留在内存中。这意味着具有大 mmap 的进程将尽可能多地消耗 RAM,然后再将剩余内存溢出到磁盘。

所以你是对的,np.memmap 数组是一个核外数组,但它会尽可能多地获取 RAM 缓存。

关于python - 写入 NumPy 内存映射仍会加载到 RAM 内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20713063/

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