当我尝试训练我的模型时,“内核似乎已经死了”错误。太大了吗?可能是什么问题?

问题描述 投票:2回答:1

这个问题的其他解决方案都没有对我有用。

我正在尝试在亚马逊Sagemaker实例ml.c4.8xlarge上使用15,000GB内存在Jupiter笔记本上训练模型。但是,当我开火车时,这个错误不断出现。模型如下:

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

模特太大了吗?我没有足够的空间来运行它还是可能是其他问题?

python-3.x keras jupyter-notebook amazon-sagemaker
1个回答
0
投票

如果你有一个只有CPU的主机,那么你不仅要考虑模型的大小,还要考虑数据占用的RAM量以及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]

然后所有这些变量占用RAM中的一些空间。您可以尝试使用del和显式垃圾收集器调用释放一些内存。

import gc
del data
gc.collect()

这个例子组成了,但我想你已经有了这个想法。此外,您可以尝试使用free命令监视内存使用情况。

$ watch -n 0.1 free -mh

然后,您可以调试笔记本以查看内存何时超出限制。一般来说,拥有庞大的数据集并制作(可能是无意的)数据副本很容易占用数十GB的RAM。


即使您的计算机上安装了GPU,也应将数据加载到RAM中,然后才能进入GPU内存。因此,总是需要跟踪仍然可用的内存量。

您还可以检查this package,它有助于自动化垃圾收集过程。 AFAIK,该软件包仅支持pytorch,但在开发时考虑了其他后端。也许您可以根据自己的需要调整此软件包背后的想法。

© www.soinside.com 2019 - 2024. All rights reserved.