我正在将许多图像加载到内存中,因为在训练神经网络时,我需要经常迭代它们来执行随机数据增强。我的机器有64 of的内存和超过60 of的可用。该机器运行64位Linux和Python3.7.4。
我的脚本一直运行到进程超过16 My为止。然后我看到了这个错误消息:
错误: OpenCV(3.4.2)/tmp/build/80754af9/opencv-suite_1535558553474/work/modules/core/src/alloc.cpp:55:错误:(-4:内存不足)未能分配18874368字节--这是函数'OutOfMemoryError‘中的18 in
cv2和/或python是否存在内部内存限制?
我还用numpy尝试了以下几种方法:
a = np.zeros((16*1024*1024*1024,), dtype=np.uint8)+1(作品及分配16 and )
a = np.zeros((17*1024*1024*1024,), dtype=np.uint8)+1(撞车)
因此,我认为这是一个python或numpy问题,因为cv2在内部使用numpy。
有趣的是,我能够使用py手电筒分配>16 to:
a = torch.ones((28*1024*1024*1024,), dtype=torch.uint8)(工作,但当我尝试超过28 try时失败)
忘记提到我正在运行SLURM实例中的所有内容。但我不知道如何找出这是否是问题所在,因为我没有其他的机器有这么大的内存。
编辑:在加载每个图像之前,我使用psutil打印内存信息。这是在它崩溃之前:
svmem(total=134773501952,available=116365168640,percent=13.7,used=17686675456,free=112370987008,active=18417344512,inactive=2524413952,buffers=176410624,cached=4539428864,shared=87986176,slab=371335168)
发布于 2019-10-22 12:50:52
这个问题与Python和/或OpenCV无关。我的ulimit -v设置太低了。运行ulimit -v unlimited解决了这个问题。
https://stackoverflow.com/questions/58278558
复制相似问题