Подтвердить что ты не робот

Загрузка SavedModel намного медленнее загрузки контрольной точки tf.train.Saver

Я изменил с tf.train.Saver на формат SavedModel, что удивительно означает, что загрузка моей модели с диска намного медленнее (вместо пары секунд требуется несколько минут). Почему это и что я могу сделать, чтобы быстрее загрузить модель?

Я использовал это:

# Save model
saver = tf.train.Saver()
save_path = saver.save(session, model_path)

# Load model
saver = tf.train.import_meta_graph(model_path + '.meta')
saver.restore(session, model_path)

Но теперь я делаю это:

# Save model
builder = tf.saved_model.builder.SavedModelBuilder(model_path)
builder.add_meta_graph_and_variables(session, [tf.saved_model.tag_constants.TRAINING])
builder.save()

# Load model
tf.saved_model.loader.load(session, [tf.saved_model.tag_constants.TRAINING], model_path)
4b9b3361

Ответ 1

что я могу сделать, чтобы загрузить модель быстрее?

Вернитесь к tf.train.Saver, так как ваш вопрос не показывает мотивацию использования SavedModelBuilder и дает понять, что истекшее время имеет для вас значение. В качестве альтернативы MCVE, в котором воспроизводится проблема синхронизации, позволит другим сотрудничать с вами при профилировании, диагностике и устранении любой проблемы с производительностью.

Ответ 2

Я никоим образом не специалист в Tensorflow, но если бы я должен был предположить, почему это происходит, я бы сказал, что:

  • tf.train.Saver(), сохраняет полный метаграф. Поэтому вся информация, необходимая для выполнения любых операций, содержащихся в вашем графике, уже существует. Для того, чтобы загрузить модель, нужно выполнить весь тензорный поток, вставить мета-график в график по умолчанию/текущий график, и вам хорошо идти.
  • С другой стороны, SavedModelBuilder(), за сценой, создает языковое агностическое представление ваших операций и переменных. Это означает, что метод загрузки должен извлекать всю информацию, а затем воссоздавать всю операцию и переменные из предыдущего графика и вставлять их в график по умолчанию/текущий.

В зависимости от размера вашего графика воссоздание всего, что содержалось в нем, может занять некоторое время.

Относительно второго вопроса, как сказал @J H, если нет причин для использования одной стратегии над другой, и время имеет сущность, то просто отправляйтесь с самым быстрым.