Tensorflow 资源耗尽但没有资源耗尽

Posted

技术标签:

【中文标题】Tensorflow 资源耗尽但没有资源耗尽【英文标题】:Tensorflow Resource exhausted without no resource exhausted 【发布时间】:2017-12-03 01:07:28 【问题描述】:

我正在 python 中使用 Tensorflow 1.2 在我的 GTX 1060 6gb 上训练 LSTM。。 p>

在每个 epoch 我都用这种方法保存模型:

def save_model(self,session,epoch,save_model_path):

    save_path = self.saver.save(session, save_model_path + "lstm_model_epoch_" + str(epoch) + ".ckpt")
    print("Model saved in file: %s" % save_path)

一切正常,但在九个 epoch 之后,当我尝试使用此方法保存模型时,我得到 ResourceExhaustedError

我在培训期间检查了我的资源,但没有资源耗尽。

我得到的错误如下:

2017-06-29 12:43:02.865845: W tensorflow/core/framework/op_kernel.cc:1158] 资源耗尽: 日志/example_0/lstm_models/lstm_model_epoch_9.ckpt.data-00000-of-00001.tempstate10865381291487648358 Traceback(最近一次调用最后一次):文件“main.py”,第 32 行,在 文件 “/home/alb3rto/Scrivania/Tesi/sentiment_classification/text_lstm/LSTM_sentence.py”, 第 306 行,在 train_lstm 文件中 “/home/alb3rto/Scrivania/Tesi/sentiment_classification/text_lstm/LSTM_sentence.py”, 第 449 行,在 save_model 文件中 “/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/training/saver.py”, 第 1472 行,在保存文件中 “/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/client/session.py”, 第 789 行,在运行文件中 “/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/client/session.py”, 第 997 行,在 _run 文件中 “/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/client/session.py”, 第 1132 行,在 _do_run 文件中 “/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/client/session.py”, 第 1152 行,在 _do_call 中 tensorflow.python.framework.errors_impl.ResourceExhaustedError: 日志/example_0/lstm_models/lstm_model_epoch_9.ckpt.data-00000-of-00001.tempstate10865381291487648358 [[节点:save/SaveV2 = SaveV2[dtypes=[DT_FLOAT,DT_FLOAT,DT_FLOAT, DT_FLOAT,DT_FLOAT,DT_FLOAT,DT_FLOAT,DT_FLOAT,DT_FLOAT,DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/SaveV2/tensor_names, save/SaveV2/shape_and_slices, Variable/_21, 变量/Adam/_23,变量/Adam_1/_25,变量_1/_27, 变量_1/亚当/_29,变量_1/亚当_1/_31,beta1_power/_33, beta2_power/_35, rnn/basic_lstm_cell/bias/_37, rnn/basic_lstm_cell/bias/Adam/_39, rnn/basic_lstm_cell/bias/Adam_1/_41, rnn/basic_lstm_cell/kernel/_43, rnn/basic_lstm_cell/kernel/Adam/_45, rnn/basic_lstm_cell/kernel/Adam_1/_47)]] 由 op u'save/SaveV2' 引起, 定义在:文件“main.py”,第 28 行,在 lstm_sentence = lstm() 文件“/home/alb3rto/Scrivania/Tesi/sentiment_classification/text_lstm/LSTM_sentence.py”, 第 18 行,在 init 文件中 “/home/alb3rto/Scrivania/Tesi/sentiment_classification/text_lstm/LSTM_sentence.py”, 第 117 行,在 build_lstm 文件中 “/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/training/saver.py”, 第 1139 行,在 init 中 self.build() 文件“/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/training/saver.py”, 第 1170 行,正在构建中 restore_sequentially=self._restore_sequentially)文件“/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/training/saver.py”, 第 689 行,正在构建中 save_tensor = self._AddSaveOps(filename_tensor, saveables) 文件“/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/training/saver.py”, 第 276 行,在 _AddSaveOps save = self.save_op(filename_tensor, saveables) 文件 "/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/training/saver.py", 第 219 行,在 save_op 中 张量)文件“/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/ops/gen_io_ops.py”, 第 745 行,在 save_v2 文件中 “/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py”, 第 767 行,在 apply_op 文件中 “/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/framework/ops.py”, 第 2506 行,在 create_op 中 original_op=self._default_original_op, op_def=op_def) 文件 "/home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", 第 1269 行,在 init 中 self._traceback = _extract_stack() ResourceExhaustedError(参见上面的回溯): 日志/example_0/lstm_models/lstm_model_epoch_9.ckpt.data-00000-of-00001.tempstate10865381291487648358 [[节点:save/SaveV2 = SaveV2[dtypes=[DT_FLOAT,DT_FLOAT,DT_FLOAT, DT_FLOAT,DT_FLOAT,DT_FLOAT,DT_FLOAT,DT_FLOAT,DT_FLOAT,DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/SaveV2/tensor_names, save/SaveV2/shape_and_slices, Variable/_21, 变量/Adam/_23,变量/Adam_1/_25,变量_1/_27, 变量_1/亚当/_29,变量_1/亚当_1/_31,beta1_power/_33, beta2_power/_35, rnn/basic_lstm_cell/bias/_37, rnn/basic_lstm_cell/bias/Adam/_39, rnn/basic_lstm_cell/bias/Adam_1/_41, rnn/basic_lstm_cell/kernel/_43, rnn/basic_lstm_cell/kernel/Adam/_45, rnn/basic_lstm_cell/kernel/Adam_1/_47)]]

我该如何解决?

【问题讨论】:

【参考方案1】:

当在 GPU 上遇到 OOMResourceExausted Error 时,我相信首先尝试更改(减少)batch size 是正确的选择。

对于不同的 GPU,您可能需要基于 GPU 的不同批量大小 你的记忆。

最近我遇到了类似的问题,做了很多调整来做不同类型的实验。

这是question 的链接(还包括一些技巧)。

但是,在减小批次大小的同时,您可能会发现训练速度变慢。因此,如果您有多个 GPU,则可以使用它们。要检查你的 GPU,你可以在终端上写,

nvidia-smi

它将向您显示有关您的 gpu 机架的必要信息。

【讨论】:

以上是关于Tensorflow 资源耗尽但没有资源耗尽的主要内容,如果未能解决你的问题,请参考以下文章

由于创建了大量分区,SQL 处理器耗尽了内部资源

混沌测试--资源耗尽类故障注入

php-cgi进程过多,导致系统资源耗尽

一次资源耗尽的教训

资源耗尽导致502

linux故障处理:磁盘资源耗尽故障