【问题标题】:Python: Memory error on google compute enginePython:谷歌计算引擎上的内存错误
【发布时间】:2020-02-29 12:01:40
【问题描述】:

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

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

得到

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

MemoryError: Unable to allocate 234. MiB for an array with shape (10000, 32, 32, 3) 和数据类型 float64

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

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


这是用于cs231n's assignment 2,用于将 CIFAR-10 加载到内存中。

【问题讨论】:

    标签: python linux google-compute-engine


    【解决方案1】:

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

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

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

    z = bytearray(245760000)
    

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

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

    再一次,重新考虑您是否真的需要那么多空间,以及是否确实需要那么大的数组,而不是对如何存储所有数据更有创意。

    【讨论】:

    • 是的,我需要它在内存中,因为它是 cifar-10 数据集。如果它留在磁盘上,训练将非常缓慢。无论如何,重置机器解决了它。不知道是什么原因造成的。
    猜你喜欢
    • 2017-05-26
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2013-12-05
    • 2018-05-11
    相关资源
    最近更新 更多