首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优化服务流程模型

如何优化服务流程模型
EN

Stack Overflow用户
提问于 2017-09-27 09:59:35
回答 2查看 914关注 0票数 1

我和凯拉斯一起训练了一个模特。现在我想通过Tensorflow服务部署它。因此,我以这种方式将其转换为SavedModel格式:

代码语言:javascript
复制
K.set_learning_phase(0)
    K._LEARNING_PHASE = tf.constant(0)
    # sess = K.get_session()
    if not os.path.exists(path):
        os.mkdir(path)
    export_path = os.path.join(
        tf.compat.as_bytes(path),
        tf.compat.as_bytes(str(get_new_version(path=path, current_version=int(version)))))
    print('Learning phase', K.learning_phase())
    print('Exporting trained model to', export_path)
    builder = tf.saved_model.builder.SavedModelBuilder(export_path)

    model_input = tf.saved_model.utils.build_tensor_info(model.input)
    model_output = tf.saved_model.utils.build_tensor_info(model.output)

    prediction_signature = (
        tf.saved_model.signature_def_utils.build_signature_def(
            inputs={'inputs': model_input},
            outputs={'output': model_output},
            method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME))

    with K.get_session() as sess:

        builder.add_meta_graph_and_variables(
            sess=sess, tags=[tf.saved_model.tag_constants.SERVING],
            signature_def_map={
                'predict':
                    prediction_signature,
            })

        builder.save()

我开始使用Tensorflow服务(通过apt安装安装了Tensorflow模型服务器)。但是我的模型的大小是376 MB (包括saved_model.pb和变量文件夹),预测时间非常长(大约每请求0.3秒),并且当rps增加时,延迟会减少。

所以,我想优化我的模型,有人知道一些技巧吗?

我在Keras的模型是用save_model(model)保存的。

EN

回答 2

Stack Overflow用户

发布于 2017-09-27 17:29:46

一些想法:

  1. 确保您没有在服务模型中留下任何队列(例如FIFOQueue)。这些经常用于培训以隐藏I/O延迟,但会损害服务性能。
  2. 考虑将多个推理请求一起批处理成对TF模型/图的单个调用。参见--启用批处理,通过-批处理参数_file进行调优。
  3. 除了这些技巧之外,您还必须了解模型本身的结构。也许其他人对此有深刻的见解。

-Chris (TF-服务团队)

票数 2
EN

Stack Overflow用户

发布于 2022-05-26 12:24:40

您可以使用OpenVINO优化您的模型。OpenVINO是为英特尔的硬件优化,但它应该与任何CPU一起工作。它自动优化您的模型,通过转换为中间表示(IR),执行图形剪枝和将一些操作合并到其他操作中,同时保持准确性。然后在运行时使用矢量化。

甚至还有OpenVINO模型服务器,它的行为非常类似于Tensorflow服务。

将Keras模型转换为OpenVINO非常简单,除非您有漂亮的自定义层。关于如何做到这一点的完整教程可以找到这里。下面是一些片段。

安装OpenVINO

最简单的方法是使用PIP。或者,您可以使用这个工具在您的情况下找到最佳方法。

代码语言:javascript
复制
pip install openvino-dev[tensorflow2]

使用模型优化器转换SavedModel模型

模型优化器是来自OpenVINO开发包的命令行工具。它将Tensorflow模型转换为IR,这是OpenVINO的默认格式。您还可以尝试FP16的精度,这将使您在不降低精度的情况下获得更好的性能(只需更改data_type)。在命令行中运行:

代码语言:javascript
复制
mo --saved_model_dir "model" --input_shape "[1, 3, 224, 224]" --data_type FP32 --output_dir "model_ir"

运行推理

转换后的模型可以由运行时加载,并为特定的设备进行编译,例如CPU或GPU (集成到CPU中,比如Intel HD Graphics)。如果你不知道什么是你最好的选择,只需使用汽车。

代码语言:javascript
复制
# Load the network
ie = Core()
model_ir = ie.read_model(model="model_ir/model.xml")
compiled_model_ir = ie.compile_model(model=model_ir, device_name="CPU")

# Get output layer
output_layer_ir = compiled_model_ir.output(0)

# Run inference on the input image
result = compiled_model_ir([input_image])[output_layer_ir]

免责声明:我在OpenVINO工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46444938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档