Можно ли освободить ресурсы, выделенные GPU в Keras? - PullRequest
0 голосов
/ 18 июня 2019

Я знаю, что этот вопрос задавался несколько раз 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.

1 Ответ

1 голос
/ 18 июня 2019

Да, используйте keras.backend.clear_session(), чтобы удалить все модели из памяти, вы должны использовать это в конце каждой итерации цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...