Ошибка "Ядро, кажется, умерло", когда я пытаюсь тренировать свою модель.Это слишком большой?В чем может быть проблема? - PullRequest
0 голосов
/ 19 февраля 2019

Ни одно из других решений этого вопроса для меня не сработало.

Я пытаюсь тренировать модель на ноутбуке Jupiter на экземпляре amazon Sagemaker ml.c4.8xlarge с 15 000 ГБ памяти.Однако эта ошибка продолжает появляться, когда я бегу поездом.Модель выглядит следующим образом:

model = Sequential()
model.add(Embedding(vocab_size, 200, input_length=max_length))
model.add(GRU(units=400,  dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(800, activation='sigmoid'))
model.add(Dense(400, activation='sigmoid'))
model.add(Dense(200, activation='sigmoid'))
model.add(Dense(100, activation='sigmoid'))
model.add(Dense(50, activation='sigmoid'))
model.add(Dense(20, activation='sigmoid'))
model.add(Dense(10, activation='sigmoid'))
model.add(Dense(5, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))

Со следующей сводкой: enter image description here

Не слишком ли велика модель?У меня недостаточно места для его запуска или это может быть какая-то другая проблема?

1 Ответ

0 голосов
/ 19 февраля 2019

Если у вас есть хост с центральным процессором, вам следует учитывать не только размер модели, но также объем оперативной памяти, занятой вашими данными и всеми переменными в записной книжке 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, но разработан с учетом других особенностей.Возможно, вы сможете адаптировать идеи этого пакета под свои нужды.

...