MemoryError:无法为形状(725000、277、76)和数据类型 float64 的数组分配 30.4 GiB

Posted

技术标签:

【中文标题】MemoryError:无法为形状(725000、277、76)和数据类型 float64 的数组分配 30.4 GiB【英文标题】:MemoryError: Unable to allocate 30.4 GiB for an array with shape (725000, 277, 76) and data type float64 【发布时间】:2021-01-04 01:04:24 【问题描述】:

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

【问题讨论】:

【参考方案1】:

考虑到您提供的数据集的尺寸 (725000 x 277 x 76) 及其数据类型 (float64 - 8 字节),您似乎需要 (至少) 在 @ 987654325@ GB 将数据集加载/存储在 RAM 中。

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

【讨论】:

谢谢。这很有帮助。如何计算所需的总 GB? 您需要将725000x277x76float64s 存储在 RAM 中,因此大约有 150 亿个 float64s。每个 float64 占用 64 位/8 字节,因此您需要约 1220 亿字节。因为 1 GiB 是 1024 MiB,1 MiB 是 1024 KiB,1 KiB 是 1024 字节,经过一些除法,你最终得到 ~114 GiB。

以上是关于MemoryError:无法为形状(725000、277、76)和数据类型 float64 的数组分配 30.4 GiB的主要内容,如果未能解决你的问题,请参考以下文章

大型数据集的一种热编码

大数据的增量 PCA

BigQuery 代码因使用 pandas python 客户端库的 MemoryError 而失败

如何在没有 MemoryError 的情况下将 183,223,040x4 矩阵重塑为 140 个尺寸为 1145x1145 的矩阵?

multiprocessing.Pool.map引发MemoryError

R中的MemoryError而read.xlsx