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 上遇到 OOM
或 ResourceExausted Error
时,我相信首先尝试更改(减少)batch size
是正确的选择。
对于不同的 GPU,您可能需要基于 GPU 的不同批量大小 你的记忆。
最近我遇到了类似的问题,做了很多调整来做不同类型的实验。
这是question 的链接(还包括一些技巧)。
但是,在减小批次大小的同时,您可能会发现训练速度变慢。因此,如果您有多个 GPU,则可以使用它们。要检查你的 GPU,你可以在终端上写,
nvidia-smi
它将向您显示有关您的 gpu 机架的必要信息。
【讨论】:
以上是关于Tensorflow 资源耗尽但没有资源耗尽的主要内容,如果未能解决你的问题,请参考以下文章