我仍然是深度学习领域的新手,可以从互联网学习所有内容,例如堆栈溢出,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使用情况的
我不确定下面的代码是否会引起问题,每当我的神经网络包括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