首页 文章

Tensorflow服务在基本路径下找不到可维护<MODEL>的版本

提问于
浏览
12

我正在按照this教程使用我的对象检测模型使用 tensorflow serving . 我正在使用tensorflow object detection来生成模型 . 我使用this exporter(使用python脚本生成的冻结模型 works )创建了一个冻结模型 .

冻结的图形目录具有以下内容( variables 目录中没有任何内容)

variables / saved_model.pb

现在,当我尝试使用以下命令提供服务时,

tensorflow_model_server --port=9000 --model_name=ssd --model_base_path=/serving/ssd_frozen/

它总是告诉我

... tensorflow_serving / model_servers / server_core.cc:421](重新)添加模型:ssd 2017-08-07 10:22:43.892834:W tensorflow_serving / sources / storage_path / file_system_storage_path_source.cc:262]没有可维护的版本在基本路径下找到的ssd / serving / ssd_frozen / 2017-08-07 10:22:44.892901:W tensorflow_serving / sources / storage_path / file_system_storage_path_source.cc:262]在基本路径/ serving / ssd_frozen /下找不到可服务ssd的版本 . .

2 回答

  • 4

    我有同样的问题,原因是因为对象检测api在导出检测模型时不会分配模型的版本 . 但是,tensorflow服务要求您指定检测模型的版本号,以便您可以选择要提供的不同版本的模型 . 在您的情况下,您应将检测模型(.pb文件和变量文件夹)放在文件夹:/ serving / ssd_frozen / 1 /下 . 通过这种方式,您可以将模型分配给版本1,并且tensorflow服务将自动加载此版本,因为您只有一个版本 . 默认情况下,tensorflow服务将自动提供最新版本(即最大数量的版本) .

    注意,在创建1 /文件夹之后,仍需要将model_base_path设置为--model_base_path = / serving / ssd_frozen / .

  • 23

    对于新版本的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

相关问题