Если у вас есть хост с центральным процессором, вам следует учитывать не только размер модели, но также объем оперативной памяти, занятой вашими данными и всеми переменными в записной книжке Jupyter.Как вы, наверное, знаете, все эти переменные находятся здесь до перезапуска ядра.
Например, если вы загружаете свой набор данных следующим образом:
data = load_train_data(path)
index = np.arange(len(data))
trn_idx, val_idx = train_test_split(index, test_size=0.2)
# here we making a copy
trn_df, val_df = data.loc[trn_idx], data.loc[val_idx]
Тогда все эти переменные занимают некоторое место в вашей оперативной памяти.Вы можете попытаться освободить часть памяти, используя del
и явные вызовы сборщика мусора.
import gc
del data
gc.collect()
Этот пример составлен, но я думаю, у вас есть идея.Кроме того, вы можете попытаться контролировать использование памяти с помощью команды free
.
$ watch -n 0.1 free -mh
Затем вы можете отладить свой ноутбук, чтобы увидеть, когда память выходит за пределы.Вообще говоря, наличие огромных наборов данных и создание (возможно, непреднамеренных) копий данных может легко занять десятки ГБ ОЗУ.
Даже если на вашем компьютере установлен графический процессор, данные следует загружать вОЗУ, прежде чем он может попасть в память графического процессора.Поэтому всегда нужно отслеживать объем доступной памяти.
Вы также можете проверить этот пакет , который помогает немного автоматизировать процесс сбора мусора.AFAIK, пакет поддерживает только pytorch
, но разработан с учетом других особенностей.Возможно, вы сможете адаптировать идеи этого пакета под свои нужды.