【问题标题】:Python Process using only 1.6 GB RAM Ubuntu 32 bit in Numpy ArrayPython 进程在 Numpy 数组中仅使用 1.6 GB RAM Ubuntu 32 位
【发布时间】:2013-07-20 07:10:37
【问题描述】:

我有一个学习人工神经网络的程序,它需要一个二维 numpy 数组作为训练数据。我要使用的数据数组的大小约为 300,000 x 400 浮点数。我不能在这里使用分块,因为我使用的库 (DeepLearningTutorials) 将单个 numpy 数组作为训练数据。

当此进程的 RAM 使用量约为 1.6Gb 时,代码显示 MemoryError(我在系统监视器中检查过),但我的总 RAM 为 8GB。另外,系统是 Ubuntu-12.04 32-bit。

我检查了或其他类似问题的答案,但在某处它说没有什么比为你的 python 程序分配内存更重要,而在某处答案不清楚如何增加进程内存。

一个有趣的事情是我在不同的机器上运行相同的代码,它可以毫无问题地使用几乎 1,500,000 x 400 浮点数的 numpy 数组。基本配置类似,只是另一台机器是64位的,而这台机器是32位的。

有人可以给出一些理论上的答案,说明为什么会有这么大的差异,或者这是我的问题的唯一原因吗?

【问题讨论】:

    标签: python numpy ubuntu-12.04 32-bit


    【解决方案1】:

    32 位操作系统最多只能处理 4gb 的内存,而 64 位操作系统可以利用更多的内存(理论上 1680 万兆兆字节)。由于您的操作系统是 32 位的,因此您的操作系统只能利用 4gb,因此您的其他 4gb 没有使用。

    另一台 64 位机器没有 4gb 内存限制,因此它可以利用所有已安装的内存。

    这些限制来自这样一个事实,即 32 位机器只能存储 32 字节的内存地址(指针),因此计算机可以识别 2^32 个不同的可能内存位置。同样,64 位机器可以识别 2^64 个不同的可能内存位置,因此它可以寻址 2^64 个不同的字节。

    【讨论】:

    • 在 32 位上,Windows 和 Linux 都不会给任何进程 4GB,2/3GB 更像。请参阅 SO 上的其他问题,以获取将其推向最大的确切数字和技巧。 4GB 是机器总地址空间的大小。另请参阅PAE。 IMO 2 GB/进程是最大的问题(或缺乏对 PAE 的内核/硬件支持)
    猜你喜欢
    • 1970-01-01
    • 2010-10-02
    • 2020-09-26
    • 2010-11-10
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2022-06-14
    相关资源
    最近更新 更多