jpa*_*avs 16 python linux macos numpy
我知道有大量的numpy内存错误主题,所以我希望我没有重复任何东西.我正在尝试使用创建一个np数组np.zeros((500000,10000))
.这在我的Mac上使用16G的内存工作正常,但在具有28G内存的Linux服务器上它立即失败Memory Error
.我已经验证我正在运行64位版本的Ubuntu和Python,而我正在使用Numpy 1.9.3.我在系统之间注意到的唯一区别(除了显而易见的)是在运行时ulimit -a
我得到:
Linux的: max locked memory (kbytes, -l) 64
苹果电脑: max locked memory (kbytes, -l) unlimited
这可能是我无法运行此命令的原因吗?如果没有,是否有其他配置选项我不见了?
我最好的猜测是:
我的第一个猜测是,在 64 位中,您的数组将占用 500000*10000*8= 40GB RAM,在 32 位中则需要 20GB,因此该数组不适合您拥有的内存。可能会进行交换来弥补丢失的内存。
我的第二个猜测基于此链接,其中解释了 np.zeros 在第一次访问内存之前不会在内存中实际分配零。我在我的 Linux (Ubuntu) 计算机上进行了测试,np.zeros 可以处理不断增加的数组,直到达到 RAM 限制。然后,即使它实际上没有分配内存,我也会收到内存错误。
创建矩阵后(增加足够的大小以明确内存使用情况):
a = np.zeros((50,10))
Run Code Online (Sandbox Code Playgroud)
您可以通过在矩阵的每个单元格中存储零来检查实际所需的内存:
a[:,:] = 0.0
Run Code Online (Sandbox Code Playgroud)
或者强制执行操作以便访问并分配内存:
a = a + a
Run Code Online (Sandbox Code Playgroud)
执行此检查时跟踪计算机的内存使用情况,以了解内存何时分配。