Я знаю, что этот вопрос задавался несколько раз 1 , 2 на GitHub.Тем не менее, мой вопрос отличается по нескольким ключевым причинам, поэтому, пожалуйста, не закрывайте сразу как дубликат.
Я тренирую несколько различных моделей в цикле, чтобы сравнить их производительность по различнымпериоды времени.Это выглядит примерно так:
for period in periods:
train_df, test_df = utils.split_train_test(
df,
period.min_train,
period.max_train,
period.min_test,
period.max_test
)
train_X, train_y, test_X, test_y = extract_features(train_df, test_df)
model_2_mlp = models.train_2_layer_mlp(train_X, train_y, verbose=0)
local_results['2_layer_mlp'] = model_perf.eval_keras(
model_2_mlp,
train_X,
test_X,
train_y,
test_y
)
model_5_mlp = models.train_5_layer_mlp_with_dropout(train_X, train_y,
verbose=0)
local_results['5_layer_mlp_dropout'] = model_perf.eval_keras(
model_5_mlp,
train_X,
test_X,
train_y,
test_y
)
...
# save local_results to a file
После нескольких итераций цикла tenorflow выдает ошибку OOM.Однако ни одна отдельная модель не исчерпывает GPU.Я даже могу перезапустить код на неправильной отметке времени и модели с поездом правильно.Только после длительного выполнения я получаю эту ошибку.
Можно ли каким-либо образом форсировать сборку мусора в графическом процессоре?
Конкретная ошибка:
tensorflow.python.framework.errors_impl.ResourceExhaustedError: OOM when allocating tensor with shape[28277,2000]
and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
[[{{node training_28/Adam/gradients/dense_93/MatMul_grad/MatMul_1}}]]
Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to R
unOptions for current allocation info.