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

时间:2017-08-07 10:37:51

标签: tensorflow deep-learning object-detection tensorflow-serving

我正在关注this教程,使用我的对象检测模型来使用Private Sub Worksheet_Change(ByVal Target As Range) ' Ne need to check Worksheet as the Hander is valid only for the Worksheet if target.row = 1 and target.column = 1 then Application.Run "AIMS_and_eFEAS_Report.AIMS_Criteria" end if End Sub 。我正在使用tensorflow object detection来生成模型。我使用this导出器创建了一个冻结模型(使用python脚本生成的冻结模型工作)。

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

  

变量/

     

saved_model.pb

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

variables

它总是告诉我

  

...

     

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

下找不到任何版本的可服务ssd      

...

5 个答案:

答案 0 :(得分:34)

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

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

答案 1 :(得分:9)

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

答案 2 :(得分:1)

我是在运行Ubuntu(而不是Docker)的个人计算机上执行此操作的。注意我在一个名为“服务”的目录中。这是我保存文件夹“ mobile_weight”的地方。我必须在“ mobile_weight”中创建一个新文件夹“ 0000123”。我的路径看起来像是服务-> mobile_weight-> 0000123->(变量文件夹和saved_model.pb)

tensorflow服务教程中的命令应如下所示(更改model_name和您的目录):

nohup tensorflow_model_server \
 --rest_api_port=8501  \
 --model_name=model_weight  \
 --model_base_path=/home/murage/Desktop/serving/mobile_weight >server.log 2>&1

所以我的整个终端屏幕如下:

murage@murage-HP-Spectre-x360-Convertible:~/Desktop/serving$ nohup tensorflow_model_server   --rest_api_port=8501   --model_name=model_weight   --model_base_path=/home/murage/Desktop/serving/mobile_weight >server.log 2>&1

答案 3 :(得分:0)

在-serving / model_name / 0000123 / saved_model.pb下创建一个版本文件夹

答案 4 :(得分:0)

该错误消息也可能由 --volume 参数的问题引起。

确保您的 --volume 安装实际上是正确的并指向模型的目录,因为这是一个“找不到模型”的一般错误,但它看起来更复杂。

如果在 windows 上只使用 cmd,否则很容易在 cygwin 或 gitbash 中意外使用 linux 文件路径和 linux 分隔符。即使文件结构正确,如果不使用 windows 绝对路径,也会出现 OP 的错误。

#using cygwin
$ echo $TESTDATA
/home/username/directory/serving/tensorflow_serving/servables/tensorflow/testdata

$ docker run -t --rm -p 8501:8501 -v "$TESTDATA/saved_model_half_plus_two_cpu:/models/half_plus_two" -e MODEL_NAME=half_plus_two tensorflow/serving
2021-01-22 20:12:28.995834: W tensorflow_serving/sources/storage_path/file_system_storage_path_source.cc:267] No versions of servable half_plus_two found under base path /models/half_plus_two. Did you forget to name your leaf directory as a number (eg. '/1/')?

然后使用相同的未更改文件结构但使用 Windows 文件分隔符的完整 Windows 路径调用相同的命令,并且它有效:

#using cygwin
$ export TESTDATA="$(cygpath -w "/home/username/directory/serving/tensorflow_serving/servables/tensorflow/testdata")"
$ echo $TESTDATA
C:\Users\username\directory\serving\tensorflow_serving\servables\tensorflow\testdata

$ docker run -t --rm -p 8501:8501 -v "$TESTDATA\\saved_model_half_plus_two_cpu:/models/half_plus_two" -e MODEL_NAME=half_plus_two tensorflow/serving 
2021-01-22 21:10:49.527049: I tensorflow_serving/core/basic_manager.cc:740] Successfully reserved resources to load servable {name: half_plus_two version: 1}