我将许多图像加载到内存中,因为在训练神经网络时,我需要经常对它们进行迭代以执行随机数据增强。我的机器有64GB的内存和超过60GB的可用空间。这台机器运行64位Linux和python3.7.4。
我的脚本一直运行到进程超过16GB。然后我看到这个错误消息:
cv2.error:OpenCV(3.4.2)/tmp/build/80754af9/OpenCV-suite\u 1535558553474/work/modules/core/src/alloc。cpp:55:错误:(-4:内存不足)无法分配18874368字节
[这是18MB]
在里面
函数“OutOfMemoryError”
cv2和/或python有内存限制吗?
a = np.zeros((16*1024*1024*1024,), dtype=np.uint8)+1
(工作并分配16GB)
a = np.zeros((17*1024*1024*1024,), dtype=np.uint8)+1
(崩溃)
有趣的是,我能够分配>16GB使用pytorch:
a = torch.ones((28*1024*1024*1024,), dtype=torch.uint8)
(工作正常,但尝试超过28GB时失败)
忘了提到我正在SLURM实例中运行所有的东西。但我不知道如何找出这是否是问题所在,因为我没有其他机器有这么大的内存。
编辑:在加载每个图像之前,我用psutil打印内存信息。就在它崩溃之前:
svmem(总计=134773501952,可用=11636516640,百分比=13.7,已用=17686675456,可用=11237098708,活动=18417344512,非活动=2524413952,缓冲区=176410624,缓存=4539428864,共享=87986176,板=371335168)