TensorFlow服务错误-找不到与提供的标签匹配的元图def:{服务}

问题描述 投票:0回答:2

我正在尝试还原TensorFlow的Saver对象(.ckpt。*),并将其转换为SavedModel对象(.pb),以便可以通过TensorFlow Serving进行部署。

这是我的转换方式:

    with tf.Session() as sess:

        # Restore the graph from (.meta .data .index)
        saver = tf.train.import_meta_graph(f"{checkpoint_path}/{meta_file_string}")
        saver.restore(sess, tf.train.latest_checkpoint(str(checkpoint_path)))


        # Convert into ".pb" using SavedModel API.
        model_path = f'{savedmodel_path}/1'
        builder = tf.saved_model.builder.SavedModelBuilder(model_path)

        builder.add_meta_graph_and_variables(
            sess, [tf.saved_model.SERVING],
            main_op=tf.tables_initializer(),
            strip_default_attrs=True)

        builder.save()
        print("Saved")

保存树时似乎工作正常:

$ tree 1
1
├── saved_model.pb
└── variables
    ├── variables.data-00000-of-00001
    └── variables.index

1 directory, 3 files

以及当我使用saved_model_cli:

$ saved_model_cli show --dir path/to/model/1
The given SavedModel contains the following tag-sets:
serve

但是,当我运行TensorFlow服务docker容器时,

$ docker run \
-p 8500:8500 \
-v path/to/model:/models/aaa \
--env MODEL_NAME=aaa \
--name aaa \
tensorflow/serving 

它抱怨找不到我添加的标签“ serve”:

2019-11-19 02:35:30.844163: I external/org_tensorflow/tensorflow/cc/saved_model/reader.cc:31] Reading SavedModel from: /models/aaa/1
2019-11-19 02:35:30.916952: I external/org_tensorflow/tensorflow/cc/saved_model/reader.cc:54] Reading meta graph with tags { serve }
2019-11-19 02:35:30.927640: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:311] SavedModel load for tags { serve }; Status: fail. Took 83527 microseconds.
2019-11-19 02:35:30.927781: E tensorflow_serving/util/retrier.cc:37] Loading servable: {name: aaa version: 1} failed: Not found: Could not find meta graph def matching supplied tags: { serve }. To inspect available tag-sets in the SavedModel, please use the SavedModel CLI: `saved_model_cli`

我做错了什么,如何解决?否则,我该如何更深入地研究这个问题?

我正在使用tensorflow 1.14.0。并使用docker image tensorFlow-serving:1.14.0-devel

tensorflow tensorflow-serving
2个回答
1
投票

您需要向构建器添加预测签名-

prediction_signature = tf.saved_model.signature_def_utils.predict_signature_def({"input": inputs}, {"output":output})

builder = saved_model_builder.SavedModelBuilder('exported_moddel/')

builder.add_meta_graph_and_variables(session,
                                     [tag_constants.SERVING],
                                    signature_def_map={"classification":prediction_signature})
builder.save()

您可以参考此笔记本以了解更多详细信息-https://github.com/CS-savvy/keras-preprocessing-inject/blob/master/keras%20inject.ipynb


0
投票

到目前为止,将tensorflow/serving图像替换为:latest版本。并且工作正常。

我的本地火车环境仍使用TensorFlow 1.14不知道为什么会这样。

© www.soinside.com 2019 - 2024. All rights reserved.