我使用 python 中的 Tensorflow 1.2 在 GTX 1060 6gb 上训练 LSTM 。
在每个时代,我用这种方法保存模型:
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)
一切正常但在九个纪元之后,当我尝试使用此方法保存模型时,我得到 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 回溯(最近一次调用最后一次):文件" main.py",第32行,in 文件 " /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 [[节点:保存/保存V2 = 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, Variable_1 / Adam / _29,Variable_1 / Adam_1 / _31,beta1_power / _33, beta2_power / _35,rnn / basic_lstm_cell / bias / _37, RNN / basic_lstm_cell /偏置/亚当/ _39, rnn / basic_lstm_cell / bias / Adam_1 / _41,rnn / basic_lstm_cell / kernel / _43, RNN / basic_lstm_cell /内核/亚当/ _45, rnn / basic_lstm_cell / kernel / Adam_1 / _47)]]由op u' save / SaveV2'引起, 定义于:File" main.py",第28行,in lstm_sentence = lstm()File" /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()File" /home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/training/saver.py", 1170行,正在构建中 restore_sequentially = self._restore_sequentially)File" /home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/training/saver.py", 689行,正在构建中 save_tensor = self._AddSaveOps(filename_tensor,saveables)File" /home/alb3rto/anaconda2/envs/tesi/lib/python2.7/site-packages/tensorflow/python/training/saver.py", 第276行,在_AddSaveOps中 save = self.save_op(filename_tensor,saveables)File" /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)File" /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 [[节点:保存/保存V2 = 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, Variable_1 / Adam / _29,Variable_1 / Adam_1 / _31,beta1_power / _33, beta2_power / _35,rnn / basic_lstm_cell / bias / _37, RNN / basic_lstm_cell /偏置/亚当/ _39, rnn / basic_lstm_cell / bias / Adam_1 / _41,rnn / basic_lstm_cell / kernel / _43, RNN / basic_lstm_cell /内核/亚当/ _45, RNN / basic_lstm_cell /内核/ Adam_1 / _47)]]
我该如何解决?
答案 0 :(得分:0)
在GPU上遇到OOM
或ResourceExausted Error
时,我认为更改(减少)batch size
是首先尝试的正确选项。
对于不同的GPU,您可能需要基于GPU的不同批量大小 你有记忆。
最近我遇到了类似的问题,调整了很多不同类型的实验。
以下是question的链接(也包括一些技巧)。
但是,在减少批量大小的同时,您可能会发现训练速度变慢。因此,如果你有多个GPU,你可以使用它们。要查看您的GPU,您可以在终端上书写
nvidia-smi
它将显示有关您的gpu架的必要信息。