如何解决 keras 上的错误“分配超过 10 的系统内存”?
Posted
技术标签:
【中文标题】如何解决 keras 上的错误“分配超过 10 的系统内存”?【英文标题】:How can I solve error "allocation exceeds 10 of system memory" on keras? 【发布时间】:2019-06-06 02:08:09 【问题描述】:我在 Keras 上使用 Tensorflow 后端制作了一个 CNN,我的训练集有 144 个示例,但每个示例的大小为 3200*101。我的 CNN 非常基础,仅用于学习,batch_size 为 2(我尝试将其从 32 减少,但没有任何改进)。一层 CNN 层、一层展平层和一层密集层用于输出(11 类)。当我安装模型时,我的笔记本电脑显示“分配(一个大数字)超过 10 个系统内存”然后冻结,即使没有运行 1 个 epoch。我不能“压缩”这些例子,它们中的每一个都必须有这个大小。我在我的 CPU(我没有 GPU)、8 gb 内存、1 tb 磁盘上运行模型。我能做什么?
Psdt:抱歉英语不好,我还在学习。并感谢您的任何回答!
更新编辑:只是添加更多信息。
对于示例,我的火车集的形状为 (144, 3400, 101, 1),而标签的形状为 (144,11) 我的模型是这样的:
model.add(Conv2D(8, kernel_size=6, activation='linear', input_shape=(3400,101,1), batch_size=2))
model.add(Flatten())
model.add(Dense(11, activation='softmax'))
model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=100)
【问题讨论】:
对于该输入大小,您可能希望拥有一台具有更多 RAM 的计算机。 8 GB 可能还不够。 根据您添加的信息很难回答您的问题。添加更多关于它的信息,比如模型架构的代码,层输入的维度是多少。这可能不是内存问题,但可能是您向其提供数据的方式。 我刚刚更新了我的问题,添加了输入尺寸和模型 【参考方案1】:在 Keras 的普通前馈网络中使用非常长的输入编码时,这看起来与我遇到的错误相同。我一直在使用词嵌入,没有问题,但现在我在输入中添加了额外的功能,我得到了和你一样的错误。 您需要启用更多内存以供脚本使用。 在 kubernetes 中对我有用的是增加我的 pod 的 yml 文件中的内存:
spec:
containers:
- name: yourname
image: yourimage
command: yourcommand
args: yourargs
resources:
limits:
nvidia.com/gpu: 1 # requesting 1 GPU
memory: 100Gi
它最初是 8G,在我介绍附加功能之前它已经工作了。
如果您不使用 docker 和 K8s,则可以在 tensorflow 会话中执行此操作,而不是:
config.gpu_options.allow_growth = True
在 Keras 中,我认为应该是:
import tensorflow as tf
from keras import backend as K
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
config.log_device_placement = True
session = tf.Session(config=config)
K.set_session(session)
# do your ML task
K.get_session().close();
将batch_size
减少到 1 可能会解决问题。
通常,此错误只是一个警告,即使作业冻结,如果您让它继续运行,它也可能会完成。如果这项工作被终止了(就像我的工作一样),那么你肯定需要给它更多的内存,而 GPU 服务器可能比你的笔记本电脑更好。您还可以确保您使用的是float32
而不是float64
,因为这样会使用双倍的内存。此外,据我所知,此错误通常出现在 Adam 优化器中,因此您使用 SGD 的事实意味着问题可能不在您的优化过程中。
【讨论】:
【参考方案2】:sudo swapoff /swapfile
sudo rm /swapfile
sudo fallocate -l 32G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
swapon -s
以上步骤产生 32G 交换空间。然后运行您的深度学习代码。我的很好用。
我的笔记本电脑规格是 HP 430 g2 4G 内存 + 500 G SSD
【讨论】:
以上是关于如何解决 keras 上的错误“分配超过 10 的系统内存”?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 wine 数据集中解决 Keras 神经网络实现中的错误
在 Keras 中使用自定义步骤激活函数会导致“'tuple' object has no attribute '_keras_shape'”错误。如何解决这个问题?
在谷歌 colab 中使用带有 TPU 的 Keras 调谐器搜索方法时如何解决“从空列表中弹出”错误?