Модель использует более 350 гигабайт оперативной памяти, но я не понимаю, почему это происходит и как я должен уменьшить это число?

#python #memory #ram

Вопрос:

На самом деле я не уверен, что это подходящее сообщество SE для публикации, но я начинаю.

В настоящее время я тренирую модель и провожу оценку после каждой эпохи. Данные, которые я использую, довольно большие (файл JSON для обучения составляет около 5,1 Г), поэтому я разделяю файлы обучения и разработки на файлы размером примерно 900 м каждый.

Я заметил, что сервер, на котором я нахожусь, часто сталкивается с ошибками памяти при выполнении оценки (на сервере около 370 Г оперативной памяти, но моя программа использует все это). Способ, которым я в настоящее время выполняю оценку, заключается в том, что у меня есть список, содержащий образцы прогнозирования за пределами всего цикла for, и для каждого образца для каждого файла, который я добавляю в список. Кстати, этот вывод отправляется на процессор через output.detach().cpu() .

Я попытался проверить размер каждого выходного образца с помощью sys.getsizeof , и один образец составляет около 640 байт. Чтобы представить это в перспективе, модель, которую я использую, составляет около 48 байт.

Каждый файл dev содержит около 60 000 образцов, а всего 10 файлов. Надеясь, что мои расчеты верны, это означало бы, что весь список будет 10 * 60,000 * 640 = 384 000 000 байт, или 384 миллиона.

Мне это совсем не кажется таким большим, и мне интересно, почему используется 370 г оперативной памяти. Я помню, что даже раньше работал с целым дампом Википедии, и даже тогда использовалось только около 100 г оперативной памяти. Возможно, я что-то неправильно понимаю или чрезмерно упрощаю?

Решение, которое я придумал, состоит в том, чтобы просто выполнить расчет оценки для каждого файла (т. Е. Получить истинное положительное количество), а не сохранять все в списке более высокого уровня; таким образом, я могу просто рассчитать баллы позже.