Я загружаю много изображений в память, потому что мне нужно очень часто повторять их, чтобы выполнить произвольное увеличение данных при обучении нейронной сети. Моя машина имеет 64 ГБ памяти и доступно более 60 ГБ. На машине установлена 64-битная версия Linux и Python 3.7.4.
Мой сценарий работает до тех пор, пока процесс не превысит 16 ГБ. Затем я вижу это сообщение об ошибке:
cv2.error: OpenCV (3.4.2) /tmp/build/80754af9/opencv-suite_1535558553474/work/modules/core/src/alloc.cpp:55: ошибка: (-4: недостаточно памяти) Не удалось выделить 18874368 байт [это 18 МБ] в функции 'OutOfMemoryError'
Есть ли ограничение внутренней памяти для cv2 и /или python?
Я также попробовал следующее с numpy:
a = np.zeros((16*1024*1024*1024,), dtype=np.uint8)+1
(работает и выделяет 16 ГБ)
a = np.zeros((17*1024*1024*1024,), dtype=np.uint8)+1
(падает)
Так что я думаю, что это проблема с питоном или numpy, поскольку cv2 использует numpy для внутреннего использования.
Интересно, что я могу выделить> 16 ГБ, используя pytorch:
a = torch.ones((28*1024*1024*1024,), dtype=torch.uint8)
(работает, но не удается, когда я пытаюсьболее 28 ГБ)
Забыл упомянуть, что я запускаю все внутри экземпляра SLURM. Но я не знаю, как выяснить, в этом ли проблема, потому что у меня нет другого компьютера с таким объемом памяти.
РЕДАКТИРОВАТЬ: Перед загрузкой каждого изображения я печатаю информацию о памяти, используя psutil. Это прямо перед сбоем:
svmem (всего = 134773501952, доступно = 116365168640, процентов = 13,7, используется = 17686675456, свободно = 112370987008, активно = 18417344512, неактивно = 2524413952, буферы = 176410624,кэшированный = 4539428864, общий = 87986176, slab = 371335168)