【问题标题】:Tensorflow serving No versions of servable <MODEL> found under base pathTensorflow serving 在基本路径下找不到可服务 <MODEL> 的版本
【发布时间】:2018-01-14 15:25:41
【问题描述】:

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

冻结的图形目录有以下内容(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] 在基本路径 /serving/ssd_frozen/ 下找不到可服务 ssd 的版本 2017-08-07 10:22:44.892901: W tensorflow_serving/sources/storage_path/file_system_storage_path_source.cc:262] 在基本路径 /serving/ssd_frozen/ 下找不到可服务 ssd 的版本

...

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我知道我来晚了这个线程,但你能用他的初始命令输出命令的预期完整值吗?谢谢!
    • @contractorwolf 已经两年了,我不记得细节了,但我相信您不需要对上述命令进行任何修改即可使其正常工作。而且我也相信对象检测 API 应该解决这个问题。很抱歉没有提供很大帮助。
    • 无论如何感谢@XinyaoWang 的回复,我最终发现您的答案是正确的,但直到我玩弄并按照您的建议创建了一个编号文件夹时,我才完全理解它。然后它与上面的命令一起使用。非常感谢!
    【解决方案2】:

    对于新版本的 tf serving,如你所知,它不再支持以前由 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!')
    

    您可以在 tf serving 示例中找到上述代码的主要部分。 最后,它将以可以提供的格式生成 SavedModel。

    【讨论】:

      【解决方案3】:

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

      上面的答案已经解释了为什么在模型文件夹中保留版本号很重要。按照下面的链接,这里有不同的构建模型,你可以作为参考。

      https://github.com/tensorflow/serving/tree/master/tensorflow_serving/servables/tensorflow/testdata

      【讨论】:

      • 如果你能解释为什么这会有所帮助,这个答案的价值将会大大增加:) 例如,我可能会尝试一下,但仍然想知道为什么这样可以解决问题。
      • 上面的答案解释了为什么在模型文件夹中保留版本号很重要。下面的链接,如果你会看到,每个模型都有类似 00000123 github.com/tensorflow/serving/tree/master/tensorflow_serving/… 的版本
      【解决方案4】:

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

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

      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
      

      【讨论】:

        【解决方案5】:

        该错误消息也可能是由于 --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}
        

        【讨论】:

          猜你喜欢
          • 2017-04-14
          • 1970-01-01
          • 2017-07-15
          • 1970-01-01
          • 1970-01-01
          • 2017-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多