首页 > 解决方案 > Python:谷歌计算引擎上的内存错误

问题描述

在谷歌计算引擎上,我运行以下命令:

z = np.zeros((10000, 32, 32, 3))

并得到

----> 1 z = np.zeros((10000, 32, 32, 3)) 中的 MemoryError Traceback (最近一次调用最后一次)

MemoryError: Unable to allocate 234. MiB 用于形状为 (10000, 32, 32, 3) 且数据类型为 float64 的数组

这看起来像当前的操作系统配置阻止我分配大数据块,这对我来说似乎很奇怪。

如何获得需要分配的内存?


这是针对cs231n 的任务 2,用于将 CIFAR-10 加载到内存中。

标签: pythonlinuxgoogle-compute-engine

解决方案


我的猜测是您尝试创建的数组对于谷歌计算机引擎来说可能太大了。这样想:

您正在尝试为 10000*32*32*3=30,720,000 个单元格大小的 4d 数组分配内存,这很多!考虑到 python 中 flaot64 的标准大小为 8,即使用单个命令分配 245,760,000 字节(245MB)的数据!

您可以使用以下命令分配具有相似大小的字节数组:

z = bytearray(245760000)

但我不完全知道你用这个做什么,所以我不知道这是否会对你有帮助。

即使有解决方案可以在 google 计算机引擎上分配这么多内存,我还是敦促您考虑是否真的需要那么多空间。例如,如果您仍然需要这么大的数组,但每个单元格的值是 0 或 1,则可以将其设为二进制数组,其空间将减少 64 倍。

同样,重新考虑您是否真的需要那么多空间,以及是否确实需要那么大的数组,而不是更有创意地存储所有数据。


推荐阅读