Если вы когда-либо видели, как память вашего графического процессора постоянно увеличивается во время обучения, хотя размер вашего пакета никогда не меняется, причина почти всегда одна и та же: накопление потерь или метрических тензоров непосредственно в списке Python вместо отсоединения этих...
Если вы когда-либо видели, как память вашего графического процессора постоянно увеличивается во время обучения, хотя размер вашего пакета никогда не меняется, причина почти всегда одна и та же: накопление потерь или метрических тензоров непосредственно в списке Python вместо их предварительного отсоединения. Каждый добавляемый вами тензор по-прежнему несет в себе граф вычислений, поэтому PyTorch сохраняет каждую промежуточную активацию в памяти на протяжении всего выполнения. Исправление заключается в одном изменении: замените loss.append(loss) на loss.append(loss.detach().item()), и граф освобождается сразу после каждого обратного прохода. Это небольшая привычка, но это одна из наиболее распространенных причин, по которой задания по обучению, которые должны удобно помещаться в памяти, в конечном итоге заканчиваются сбоем в течение нескольких часов. Если вы отлаживаете подобную утечку, стоит проверить torch.cuda.memory_summary(), прежде чем предполагать, что вам нужен более мощный графический процессор. Подробнее о правильном масштабировании рабочих нагрузок PyTorch: найм разработчиков PyTorch.