64GB可用,超过16GB时cv2 / python崩溃

时间:2019-10-08 00:04:08

标签: python opencv cv2

我正在将许多图像加载到内存中,因为在训练神经网络时,我需要经常对其进行迭代以执行随机数据增强。我的机器有64GB的内存,可用空间超过60GB。该机器运行64位Linux和Python 3.7.4。

我的脚本一直运行到进程超过16GB为止。然后我看到此错误消息:

  

cv2.error:OpenCV(3.4.2)/tmp/build/80754af9/opencv-suite_1535558553474/work/modules/core/src/alloc.cpp:55:错误:(-4:内存不足)无法分配18874368字节 [这是18MB]   函数'OutOfMemoryError'

cv2和/或python是否有内部内存限制?

我也用numpy尝试了以下方法:

a = np.zeros((16*1024*1024*1024,), dtype=np.uint8)+1

(工作并分配16GB)

a = np.zeros((17*1024*1024*1024,), dtype=np.uint8)+1

(崩溃)

所以我认为这是python或numpy问题,因为cv2内部使用了numpy。

有趣的是,我可以使用pytorch分配> 16GB:

a = torch.ones((28*1024*1024*1024,), dtype=torch.uint8)

(可以,但是当我尝试超过28GB时失败)

忘了提到我正在SLURM实例中运行所有内容。但是我不知道如何找出问题所在,因为我没有其他机器拥有如此大的内存。

编辑:加载每个图像之前,我使用psutil打印内存信息。这是在崩溃之前的提示:

  

svmem(总计= 134773501952,可用= 116365168640,百分比= 13.7,已使用= 17686675456,空闲= 112370987008,活动= 18417344512,不活动= 2524413952,缓冲区= 176410624,缓存= 4539428864,共享= 87986176,slab = 371335168) / p>

1 个答案:

答案 0 :(得分:1)

该问题与Python和/或OpenCV无关。我的ulimit -v设置太低。运行ulimit -v unlimited可解决问题。