Linux服务器上的Numpy内存错误,但不是Mac

时间:2015-09-22 17:51:52

标签: python linux macos numpy

我知道有大量的numpy内存错误主题,所以我希望我没有重复任何内容。我正在尝试使用np.zeros((500000,10000))创建一个np数组。这在我的Mac上使用16G内存工作正常,但在具有28G内存的Linux服务器上,它会立即失败Memory Error。我已经验证我运行的是64位版本的Ubuntu和Python,而我是在Numpy 1.9.3上。我在系统之间注意到的唯一区别(除了显而易见的)是在运行ulimit -a时我得到:

Linux:max locked memory (kbytes, -l) 64

Mac:max locked memory (kbytes, -l) unlimited

这可能是我无法运行此命令的原因吗?如果没有,是否还有一些其他配置选项?

1 个答案:

答案 0 :(得分:3)

我最好的猜测是:

  1. Mac有一个交换,允许比你看到的RAM分配更多内存。
  2. 在实际使用内存之前,Mac没有意识到数组不适合内存。因此,数组实际上不适合内存,但在使用该内存之前你不会知道它。
  3. 我的第一个猜测基于这样一个事实:在64位中,你的阵列将占用500位* 10000 * 8 = 32位的20GB RAM 20GB,因此阵列不适合你的内存。可能存在交换以解释丢失的内存。

    我的第二个猜测基于this link,其中解释了np.zeros在第一次访问该内存之前不会在内存中实际分配零。我已经在我的linux(Ubuntu)计算机上测试过,np.zeros可以使用增加的数组,直到达到我的RAM限制。然后,即使它实际上没有分配内存,我也会收到内存错误。

    创建矩阵后(增加足够的大小以清除内存使用情况):

    a = np.zeros((50,10))
    

    您可以通过在矩阵的每个单元格中存储零来检查所需的实际内存:

    a[:,:] = 0.0
    

    或强制操作以便访问并分配内存:

    a = a + a
    

    在执行此检查时跟踪计算机的内存使用情况,以了解何时分配内存。