使用 tf.Estimator 创建的张量流服务的图形优化

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

上下文

我有一个基于 tf.estimator.DNNClassifier 的简单分类器,它通过意图标签获取文本和输出概率。 我能够训练将模型导出到可服务项,并使用 tensorflowserving 提供可服务项。 问题是这个服务太大(大约 1GB),所以我想尝试一些张量流图转换来尝试减少所服务的文件的大小。

问题

我了解如何获取

saved_model.pb
并使用 freeze_model.py 创建一个新的
.pb
文件,可用于调用变换。这些转换的结果(也是一个
.pb
文件)不是可服务的,不能与张量流服务一起使用。

开发者如何从:

saved model -> graph transforms -> back to a servable

文档表明这当然是可能的,但从文档来看,如何做到这一点一点也不直观。

我尝试过的

import tensorflow as tf

from tensorflow.saved_model import simple_save
from tensorflow.saved_model import signature_constants
from tensorflow.saved_model import tag_constants
from tensorflow.tools.graph_transforms import TransformGraph


with tf.Session(graph=tf.Graph()) as sess_meta:
    meta_graph_def = tf.saved_model.loader.load(
        sess_meta,
        [tag_constants.SERVING],
        "/model/path")

    graph_def = meta_graph_def.graph_def

    other_graph_def = TransformGraph(
        graph_def,
        ["Placeholder"],
        ["dnn/head/predictions/probabilities"],
        ["quantize_weights"])


    with tf.Graph().as_default():
        graph = tf.get_default_graph()
        tf.import_graph_def(other_graph_def)
        in_tensor = graph.get_tensor_by_name(
            "import/Placeholder:0")
        out_tensor = graph.get_tensor_by_name(
            "import/dnn/head/predictions/probabilities:0")

        inputs = {"inputs": in_tensor}
        outputs = {"outputs": out_tensor}

        simple_save(sess_meta, "./new", inputs, outputs)

我的想法是加载servable,从meta_graph_def中提取graph_def,转换graph_def,然后尝试重新创建servable。 这似乎是不正确的方法。

有没有一种方法可以在导出的可服务的图形上成功执行转换(以减少推理时的文件大小),然后使用转换后的图形重新创建可服务?

谢谢。

更新(2018-08-28)

发现 contrib.meta_graph_transform() 看起来很有希望。

更新(2018-12-03)

相关的 github 问题我打开了该问题,该问题似乎在详细的博客文章中得到了解决,该博文列在票证末尾。

python tensorflow tensorflow-serving tensorflow-estimator
2个回答
0
投票

运行张量流图转换后从 SavedModel 转为可服务的方法是使用 SavedModel Builder API。

首先,您需要创建一个 SavedModel Builder 对象,然后使用 SavedModel Builder API 重建刚刚转换的图形。

接下来,您需要将资产、签名和其他元数据添加回模型中。最后,您需要调用 SavedModel Builder API 的 save() 方法,该方法会将模型保存为可服务。

此 Servable 随后可与 Tensorflow 服务一起使用。


0
投票

加载 SavedModel 并提取图形定义 应用图形转换 重新创建可服务的 SavedModel

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