【问题标题】:How to deploy a Keras CNN Model to webservice?如何将 Keras CNN 模型部署到 Web 服务?
【发布时间】:2019-01-09 04:55:27
【问题描述】:

我目前正在尝试为 Web 服务部署 Keras 卷积神经网络。

我曾尝试将我保存的 keras hdf5 模型转换为 tensorflow.js 模型并进行部署,但它会减慢客户端应用程序的速度,因为该模型相对稳健,因此会占用客户端内存中的大量空间。

因此,我试图找出一种方法在云中部署模型并通过来自网络应用程序的带有图像的请求进行预测,然后接收包含预测张量的响应。我知道 gcloud 可能有一些类似的能力或特性,但我不确定如何开始。

基本上,我问的是是否有任何服务可以让我部署预训练和保存的卷积神经网络模型,我可以在请求中向该模型发送图像并使用该模型返回预测张量?

【问题讨论】:

  • 我们通常使用 Flask 为此类模型构建 api。假设您有一个需要加载到不同服务器的大型模型,通过在烧瓶中构建一个简单的 REST api,客户端应用程序可以使用图像发出请求,然后 api 将发送回响应。与模型相关的事情发生在 Flask 后端。

标签: python tensorflow request keras google-cloud-ml


【解决方案1】:

您可以导出经过训练的 Keras 模型并使用 TensorFlow Serving 提供服务。 TF Serving 允许托管模型并通过 gRPC 或 REST 请求调用它们。您可以部署一个带有接受图像的端点的烧瓶应用程序,将其包装为有效负载并通过requests 模块调用您的模型。

您将模型导出为可服务对象的代码如下所示:

import tensorflow as tf

# The export path contains the name and the version of the model
model = keras.models.load_model('./mymodel.h5')

# Feth the Keras session and save the model
with keras.backend.get_session() as sess:
    tf.saved_model.simple_save(
        sess,
        export_dir,
        inputs={'images': model.input},
        outputs={t.name:t for t in model.outputs})

这将存储 TF Serving 所需的文件。从此目录中,您可以按如下方式托管模型:

tensorflow_model_server --model_base_path=$(pwd) --rest_api_port=9000 --model_name=MyModel

您的请求将如下所示:

requests.post('http://ip:9000/v1/models/MyModel:predict', json=payload)

其中payload 是包含您的请求图像的字典。

【讨论】:

  • 你应该使用 tf.saved_model.simple_save():
  • 很好,我不知道,我会检查一下并更新我的答案。谢谢。
  • 当我尝试将模型导出为可服务模型时,我收到错误消息:“RuntimeError: Attempted to use a closed Session.”我该如何补救?
  • 您是否在笔记本中运行代码?您可以查看here 获取更多示例代码。
【解决方案2】:

如果您想要在 Google Cloud 上提供模型的点击部署解决方案,请考虑使用 Cloud ML Engine's Online Prediction service。首先,按照@sdcbr 回复中的说明导出您的SavedModel。将模型复制到 GCS,然后您只需创建模型和版本:

gcloud ml-engine models create "my_image_model"
gcloud ml-engine versions create "v1"\
    --model "my_image_model" --origin $DEPLOYMENT_SOURCE

或者,更简单的是,使用 Cloud Console 只需点击几下即可完成上述操作!

您将获得一个无服务器 REST 端点,其中包括身份验证和授权、自动缩放(包括缩放到零)以及日志记录和监控,而无需编写或维护一行代码。

【讨论】:

  • 请注意,对于图像模型,我们正在引入新硬件。要访问它,请发送电子邮件至 cloudml-feedback@google.com
  • 我的模型带有 .pb 文件和相关变量文件,保存在谷歌云存储中,并链接到 ml 引擎中的模型。如何查找发布请求的 URL 或实际使用模型进行预测?
  • 您可能会发现使用docs 中描述的客户端库是最简单的方法,尤其是获取身份验证令牌。直接回答是ml.googleapis.com/v1/project/MYPROJECT/models/MY_MODEL:predict
猜你喜欢
  • 2018-01-30
  • 1970-01-01
  • 2021-04-20
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 2022-11-04
相关资源
最近更新 更多