Подача тензорного потока <model> найденный по базовому пути
Я следовал этому руководству, чтобы использовать tensorflow serving
используя мою модель обнаружения объектов. Я использую обнаружение объекта тензорного потока для генерации модели. Я создал замороженную модель, используя этот экспортер (сгенерированная замороженная модель работает с использованием скрипта Python).
Каталог замороженных графов имеет следующее содержимое (ничего в каталоге variables
)
переменные /
saved_model.pb
Теперь, когда я пытаюсь обслуживать модель с помощью следующей команды,
tensorflow_model_server --port=9000 --model_name=ssd --model_base_path=/serving/ssd_frozen/
Это всегда показывает мне
...
tenorflow_serving/model_servers/server_core.cc: 421] (Re-) добавление модели: ssd 2017-08-07 10: 22: 43.892834: W tenorflow_serving/sources/storage_path/file_system_storage_path_source.cc: 262] Нет версий обслуживаемого ssd, найденных в разделе базовый путь/обслуживание /ssd_frozen/2017-08-07 10: 22: 44.892901: Wensorflow_serving/sources/storage_path/file_system_storage_path_source.cc: 262] Версии обслуживаемого ssd не найдены в базовом пути/Обслуживание /ssd_frozen/
...
Ответы
Ответ 1
У меня была такая же проблема, причина в том, что при экспорте вашей модели обнаружения объект api не присваивает версию вашей модели. Тем не менее, для работы с тензорным потоком требуется присвоить номер версии вашей модели обнаружения, чтобы вы могли выбирать различные версии своих моделей для обслуживания. В вашем случае вы должны поместить свою модель обнаружения (файл.pb и папку переменных) в папку: /serve/ssd_frozen/1/. Таким образом, вы присвоите свою модель версии 1, и функция tensorflow автоматически загрузит эту версию, поскольку у вас есть только одна версия. По умолчанию функция tensorflow будет автоматически обслуживать последнюю версию (то есть наибольшее количество версий).
Обратите внимание, что после создания папки 1/путь model_base_path по-прежнему необходимо установить в --model_base_path =/serve/ssd_frozen/.
Ответ 2
Как вы знаете, для новой версии tf-обслуживания он больше не поддерживает формат модели, который раньше экспортировался с помощью SessionBundle, а теперь SavedModelBuilder.
Полагаю, лучше восстановить сессию из вашего старого формата модели, а затем экспортировать ее с помощью SavedModelBuilder. Вы можете указать версию вашей модели с ним.
def export_saved_model(version, path, sess=None):
tf.app.flags.DEFINE_integer('version', version, 'version number of the model.')
tf.app.flags.DEFINE_string('work_dir', path, 'your older model directory.')
tf.app.flags.DEFINE_string('model_dir', '/tmp/model_name', 'saved model directory')
FLAGS = tf.app.flags.FLAGS
# you can give the session and export your model immediately after training
if not sess:
saver = tf.train.import_meta_graph(os.path.join(path, 'xxx.ckpt.meta'))
saver.restore(sess, tf.train.latest_checkpoint(path))
export_path = os.path.join(
tf.compat.as_bytes(FLAGS.model_dir),
tf.compat.as_bytes(str(FLAGS.version)))
builder = tf.saved_model.builder.SavedModelBuilder(export_path)
# define the signature def map here
# ...
legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')
builder.add_meta_graph_and_variables(
sess, [tf.saved_model.tag_constants.SERVING],
signature_def_map={
'predict_xxx':
prediction_signature
},
legacy_init_op=legacy_init_op
)
builder.save()
print('Export SavedModel!')
Вы можете найти основную часть кода выше в примере. Наконец, он сгенерирует SavedModel в формате, который может быть обслужен.
![enter image description here]()
Ответ 3
Создайте папку с версиями в папке Like - serve/model_name/0000123/сохраненный_модель .pb
Ответ выше уже объяснил, почему важно сохранить номер версии в папке модели. Перейдите по ссылке ниже, здесь у них разные наборы встроенных моделей, вы можете взять ее в качестве справки.
https://github.com/tensorflow/serving/tree/master/tensorflow_serving/servables/tensorflow/testdata