内存错误:无法为形状为 (725000, 277, 76) 和数据类型 float64 的数组分配 30.4 GiB

问题描述 投票:0回答:2

它给出了内存错误,但内存容量从未达到。我的 SSH 上有 60 GB 的内存,完整的数据集进程消耗 30 我正在尝试用 k-fold 训练自动编码器。如果没有 k 倍,训练效果很好。原始数据集包含 hdf5 中的 250,000 条数据。 对于 K-fold,如果我使用的总数据少于 100000,它就可以工作。 我已经将其转换为 float32 但仍然不起作用。 我也尝试过 echo 1 但会自动杀死 python 程序

python-3.x memory-management out-of-memory hdf5 k-fold
2个回答
8
投票

考虑到您提供的数据集的尺寸(

725000
x
277
x
76
)及其数据类型(float64 -
8
字节),看来您(至少)需要大约
114
GB 将数据集加载/存储在 RAM 中。

克服此限制的解决方案是:1)通过 hyperslab 选择读取一定量的数据集(例如当时 1 GB 的数据块)并将其加载/存储在内存中,2)处理它,3)重复该过程(即转到步骤 1),直到数据集完全处理完毕。这样,您就不会耗尽 RAM 内存。


0
投票

在这里遇到类似的问题。 “numpy._core._exceptions._ArrayMemoryError:无法为形状为 500000000 的数组分配 3.58 GiB” 我的电脑有 16G 内存,但无法为阵列分配 3.58G。这似乎是连续内存管理问题“NumPy 需要一个连续的内存块来分配数组。即使您的系统有足够的总内存,它也可能没有足够大的单个连续块来满足请求”。 也许尝试在 numpy 中使用内存映射数组: data = np.memmap('data.dat', dtype='int64', mode='w+', shape=(500000000,)) 或者将数据集分成更小的块并单独处理它们。

© www.soinside.com 2019 - 2024. All rights reserved.