Подача тензорного потока <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