3.5Kпросмотров
29 июля 2024 г.
Score: 3.8K
Во первых снова здраствуйте, накатывает меня любовь к работе с какой-то непостоянной преодичностью. Во вторых, оказывается есть какой-то сайт Amazon Code Guru, что-то типа ответов мейл ру, но про программирование. В третьих, я там нашел ответ на неочевидный вопрос.
Уже в нескольких проектах у себя наблюдал странное поведение памяти на машине, она росла линейно, пока не кончалась эпоха, после чего потребление падало, так эта пила шла до самого конца.
Я все не мог понять в чем дело, но было не так интересно, потому что у машины был почти терабайт памяти, смысла парится не было, а тут машиинка поменялась и я стал вылетать в OOM. Оказалось дело в использовании питоновского List. Using DataLoader with num_workers greater than 0 can cause increased memory consumption over time when iterating over native Python objects such as list or dict. Pytorch uses multiprocessing in this scenario placing the data in shared memory. However, reference counting triggers copy-on-writes which over time increases the memory consumption. This behavior resembles a memory-leak. Using pandas, numpy, or pyarrow arrays solves this problem https://docs.aws.amazon.com/codeguru/detector-library/python/pytorch-data-loader-with-multiple-workers/#