TensorFlow 2.0 - эффективность распределения ресурсов - PullRequest
0 голосов
/ 15 октября 2019

Я использую TensorFlow 2.0 и у меня есть вопросы по производительности по поводу Tensor освобождения. Я делаю вывод о большом наборе данных, используя керасы. Входные данные, которые я предоставляю, Dataset, которые возвращают «мини-пакеты» записей. Поскольку это быстрее, я объединяю многочисленные мини-пакеты для вызова predict_on_batch для большего количества записей одновременно. Упрощенная версия моего кода выглядит следующим образом:

K.set_learning_phase(0)
batches_preds = []
minibatches = []

for i_minibatch,minibatch in enumerate(iter(my_dataset)):
    minibatches.append(minibatch)
    if (i_minibatch % minis_per_batch == 0):
        batch = tf.concat(minibatches, 0)
        batch_preds = model.predict_on_batch(batch).numpy().flatten()
        batches_preds.append(batch_preds)
        minibatches = []

if len(minibatches) > 0:
    batch = tf.concat(minibatches, 0)
    batch_preds = model.predict_on_batch(batch).numpy().flatten()
    batches_preds.append(batch_preds)

preds = np.hstack(batches_preds)

Я пытаюсь улучшить производительность этого процесса. Интересно, что если я time на различных шагах, то шаг, на котором я повторно инициализирую minibatches в пустой список, занимает большой процент времени. Я предполагаю, что фактическая работа, проделанная TensorFlow на этом шаге, представляет собой некоторую комбинацию обеспечения того, что Tensor s, на которые больше нет ссылок, безопасны для освобождения, и затем освобождения их.

У меня есть два вопроса по этому поводуПоведение:

  1. Является ли освобождение Tensor по своей сути дорогостоящим? Почему это занимает так много времени?
  2. В TensorFlow 2.0 есть ли способ, которым я могу вручную освободить Tensor, чтобы я мог анализировать производительность операции и, возможно, пропустить ненужные проверки безопасности?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...