ResourceExhaustedError仅在model.predict

时间:2020-08-18 19:59:15

标签: python tensorflow keras lstm

herehere相同的问题,但没有好的答案。

我仍然是深度学习领域的新手,可以从互联网学习所有内容,例如堆栈溢出,Medium,youTube和Github。我正在研究通过将post将德语翻译成英语来学习神经机器翻译。 code非常简洁,易于遵循。但是,我一直遇到ResourceExhaustedError问题,这仅在model.predict()流程中发生。在预测过程中,GPU内存使用率会一直增加,直到内存不足为止,但在训练过程中不会耗尽内存。我不明白为什么会这样。这对我来说毫无意义。请注意,当我运行model.predict(trainX)时也会同时运行内存,其中trainX是训练过程中使用的确切训练数据。无论我如何设置batch_size,它仍然会耗尽内存。我在Ubuntu 20.04上使用GTX1050 Ti 4GB Nvidia图形卡。

这是我现在正在运行的代码:

# build NMT model
def build_model(in_vocab, out_vocab, in_timesteps, out_timesteps, units):
    model = Sequential()
    model.add(Embedding(in_vocab, units, input_length=in_timesteps, mask_zero=True))
    model.add(LSTM(units))
    model.add(RepeatVector(out_timesteps))
    model.add(LSTM(units, return_sequences=True))
    model.add(Dense(out_vocab, activation='softmax'))
    return model

model = build_model(deu_vocab_size, eng_vocab_size, deu_length, eng_length, 2)
rms = optimizers.RMSprop(lr=0.001)
model.compile(optimizer=rms, loss='sparse_categorical_crossentropy', metrics=["accuracy"])

filename = 'model.h1.24_jan_19'
checkpoint = ModelCheckpoint(filename,
                             monitor='val_loss',
                             verbose=1,
                             save_best_only=True,
                             mode='min')

history = model.fit(trainX,
                    trainY.reshape(trainY.shape[0], trainY.shape[1], 1),
                    epochs=1,
                    validation_split=0.2,
                    callbacks=[checkpoint],
                    verbose=1)

# Make Predictions
preds = model.predict(trainX)
# model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding (Embedding)        (None, 8, 2)              20802     
_________________________________________________________________
lstm (LSTM)                  (None, 2)                 40        
_________________________________________________________________
repeat_vector (RepeatVector) (None, 8, 2)              0         
_________________________________________________________________
lstm_1 (LSTM)                (None, 8, 2)              40        
_________________________________________________________________
dense (Dense)                (None, 8, 6295)           18885     
=================================================================
Total params: 39,767
Trainable params: 39,767
Non-trainable params: 0 

我注意到运行 model.predict(trainX[:?])在前100、1000、2000和5000种情况下都可以正常工作,但是GPU内存使用率一直在增加,直到耗尽内存为止。看来GPU内存在每批之后从未释放过。有人可以帮我吗?让我知道为什么在预测过程中会发生这种情况以及如何解决?这是GPU使用情况的enter image description here

我不确定下面的代码是否会引起问题,每当我的神经网络包括LSTM,RNN等时,我都必须进行以下设置,否则会引发UnknownError错误。

GPU = tf.config.list_physical_devices("GPU")
tf.config.experimental.set_memory_growth(GPU[0],enable=True)
UnknownError:  [_Derived_]  Fail to find the dnn implementation.
     [[{{node cond_17/then/_0/CudnnRNNV3}}]]
     [[sequential/lstm/StatefulPartitionedCall]] [Op:__inference_train_function_8188]

Function call stack:
train_function -> train_function -> train_function

0 个答案:

没有答案