将训练检查点导出到生产 - 需要白痴指南

Exporting training checkpoint to production - idiot's guide required

我有一个正确的母马。
我在尝试将培训信息设置为可以部署到生产服务器的状态时遇到了真正的困难。
我关注了this tutorial (which was very granular and perfect for me). I exported the checkpoint to a frozen inference graph and used the test script to see that it worked really quite well。我在某处读到这些冻结的推理图不适合生产,需要将其导出到 'SavedModel'。 我花了好几个小时寻找解决方案/指南,但找到了很多不同的答案——有些已成功导出到“1/saved-model.pb 1/Variables”model 文件夹结构。
很兴奋,我给自己弄了一个数字海洋账户,制作了一个 Ubuntu 虚拟机,预装了 Docker 并设置了以下容器:
- Bitnami/tensorflow-serving
- Bitnami/tensorflow-inception

然后我用 docker-compose 启动它们,启动一些共享目录等。使用示例 model (inception-v3),我可以让这个系统正常工作传入 jpg 时很好。
当我尝试为导出的 model 提供服务时,问题出现了,我遇到了很多我真的不理解的错误,并且无法在线找到解决方案。当尝试从 docker cli 运行 它时,我得到了一些(我怀疑)network errors。 当我尝试使用包 tensorflow-serving-node-client (which is probably some variation of what I will use to relay my requests from Firebase) comes back complaining about 'tensors' and 'signatures' 设置 NodeJS 服务器时。

我通常很擅长解决问题,但不幸的是,由于缺乏睡眠、时间和特别好的阅读能力,我在这方面真的做得很差。我知道我的基础知识在整个主题上似乎不尽如人意,这就是我解决问题的失败之处。

我非常怀疑我没有正确导出检查点,因此很难提供它,但是从我一直在搜索的所有 YouTube 视频和博客文章中(一个多星期)只解释到将培训设置为远离或从您导出 model 并想要提供服务的那一点。如果我理解正确的话,似乎有某种市场在解释中间位。我确实按照this official guide,但是当它全部导出时,所有内容都是空的~4kb文件,这显然是不对的。

有没有人能给我指出正确的方向,让我知道在哪里可以找到简明可靠的指南?我可以停止用头撞墙的那一点将是惊人的。我什至在工作中问过一些 'data scientists',他们只是告诉我他们从未听说过它,只是使用 R 和 Excel...

发送帮助。

提前致谢,
卢克

ps。对不起,长度。我敢肯定它会被一些人扼杀 mod - 我是一个有点冗长的解释者。

我不一定认为冻结的图表不利于服务,至少我不明白为什么会这样,但这可能只是我。我会尽力提供帮助,但不能保证什么。

1) 冻结图基本上是一个转换后的 savedModel,所有权重都设置为常量而不是变量,因此无法训练。这意味着你应该在某处有一个 savedModel。

2) 如果你不这样做,让我们先将冻结的图形加载到会话中,然后再对其进行转换。

def load_frozen_model(path_to_model):
    path_to_model = check_path(path_to_model, mode="frozen")
    with tf.gfile.GFile(path_to_model, "rb") as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())

    with tf.Session() as sess:
        tf.import_graph_def(graph_def, name="")
        return sess

builder = tf.saved_model.builder.SavedModelBuilder(saved_model_path="non existing 
                                                                     folder")
session = load_frozen_model("path/to/something.pb")

# create tensorboard logs, run with $ tensorboard --log_dir path_to_log_folder
# check for the names of the input and output you need.
tf.summary.FileWriter(path_to_existing_folder, session.graph)

input_tensor = session.graph.get_tensor_by_name("name_you_need:0")
output_tensor = session.graph.get_tensor_by_name("name_you_need:0")
input_tensor_info = tf.saved_model.utils.build_tensor_info(input_tensor )
output_tensor_info = tf.saved_model.utils.build_tensor_info(output_tensor )
signature = tf.saved_model.signature_def_utils.build_signature_def(
             inputs={'input_image': input_tensor_info},
             outputs={'final_result': output_tensor_info},
             method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME)

# save as SavedModel
builder.add_meta_graph_and_variables(session,
                                         [tf.saved_model.tag_constants.SERVING],
                                         signature_def_map={'serving_default': 
                                                            signature})
builder.save()

3) 您可以通过以下方式加载保存的模型:

def load_saved_model(path_to_model):
    with tf.Session() as sess:
        tf.saved_model.loader.load(sess, [tag_constants.SERVING], path_to_model)
        return sess

4) 我不确定这个错误 "details: 'input tensor alias not found in signature: images. Inputs expected to be in the set {inputs}.' }" 应该抱怨什么,但可能是您没有正确定义签名或者您没有正确指定输入。

如果我没有提供您正在寻找的答案,那么我很抱歉,但我认为这可能是您的问题。不过,我对这些 http 错误一无所知,也不知道实际使用服务器为您的模型提供服务,我通常倾向于使用其他东西。 如果你 运行 出错了,我们可以一起调试,我只是把这段代码写出来,没有在你的模型上测试它。