当前位置: 首页 > 知识库问答 >
问题:

使用张量流服务来服务 Keras 模型

柯伟志
2023-03-14

Tensorflow 1.12发行说明指出:“Keras模型现在可以直接导出为SavedModel格式(tf.contrib.saved_model.save_Keras_mode()),并与Tensorflow服务一起使用。”。所以我试了一下-

我用一行代码导出了一个简单的模型。但是,Tensorflow服务不识别模型。我猜问题出在docker调用上,可能是模型定义中缺少了“signature_defs”。如果能提供关于缺失步骤的信息,我将不胜感激。

1.训练模型并将其导出到TF服务:

下面是基于Jason Brownlee的第一个NN的代码(由于其简单性而选择)

(培训数据,作为一个简短的CSV文件,在这里):

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.contrib.saved_model import save_keras_model
import numpy

# fix random seed for reproducibility
numpy.random.seed(7)

# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]

# create model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# Fit the model
model.fit(X, Y, epochs=150, batch_size=10)

# evaluate the model
scores = model.evaluate(X, Y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

# calculate predictions
predictions = model.predict(X)
# round predictions
rounded = [round(x[0]) for x in predictions]
print(rounded)

# Save the model for serving
path = '/TensorFlow_Models/Keras_serving/saved_model' # full path of where to save the model
save_keras_model(model, path)

2.设置Tensorflow服务器:

服务器可以通过docker设置,也可以自己构建。TF推荐docker (TF ref)。接下来,根据TF博客和TF服务教程:

  1. 安装 Docker(从此处)
  2. 获取最新的 TF 服务版本:

Docker 拉张量流/服务

docker run-p 8501:8501-NAME NNN-mount type = bind,source=SSS,target = TTT-e MODEL _ NAME = MMM-t tensor flow/serving

如果有人能证实,我会很高兴:

  • NNN—docker容器名称—例如,用于终止进程。可以任意设置(例如:mydocker)
  • MMM-模型的名称,似乎是任意设置的
  • SSS-模型所在的文件夹,完整路径
  • TTT-该设置为什么

3.客户端

服务器可以通过gRPC或RESTful API获取请求。假设我们使用RESTful API,可以使用curl访问模型(这里是一个TF示例)。但我们如何设置模型的输入/输出?是否需要签名文件(参考)?

总而言之,虽然如TF1.12发行说明中所述,“Keras模型现在可以直接导出为SavedModel格式(TF . contrib . saved _ model . save _ Keras _ model())并与Tensorflow Serving一起使用”,但要真正为模型服务还有一段路要走。我很乐意为完成这个想法。

共有2个答案

荆修明
2023-03-14

感谢您的问题,或多或少与我的tensorflow-serving签名进行异或链接

我完全同意你对TTT的怀疑

万俟财
2023-03-14

你们对NNN和SSS的看法都是正确的。NNN可以是任意的,如果未指定,docker将为其提供一个随机名称。

对于MMM,最好给它起个有意义的名字。

对于 TTT,这是关于 docker run 命令的一般情况,您可以参考 docker doc。这是在容器内映射(绑定)SSS 的位置,通常设置为 /models/$MODEL_NAME。如果进入此容器并打开 /models/$MODEL_NAME,您将看到版本文件夹,就像在 SSS 中一样。

RESTful API的输入与TensorFlow代码中模型的输入相同,在您的示例中是<code>X=dataset〔,0:8〕

如果在保存模型时没有定义签名,就像文档中的例子一样,那么在服务中就没有必要了。

 类似资料:
  • 问题内容: 我有一个使用Keras和Tensorflow作为后端训练的模型,但是现在我需要将我的模型转换为特定应用程序的张量流图。我尝试执行此操作并进行了预测以确保其正常工作,但是与从model.predict()收集的结果进行比较时,我得到了非常不同的值。例如: 返回: keras预测的值是正确的,但tf图的结果却不正确。 如果它有助于了解最终的预期应用程序,那么我将使用tf.gradients

  • 使用流程 使用ModelService的流程如下,首先初始化Xiaomi Cloud-ML客户端环境。 cloudml init 然后上传模型文件到FDS中,或者在TensorFlow代码中直接导出模型到FDS。 最后使用cloudml命令行工具提交创建模型服务即可,通过 -a 参数还可以实现同时加载多个模型版本等功能。 -u表示模型的fds路径,通过挂载fds bucket到/fds,再指定模

  • 我正在通过以下示例寻找一个用于服务器端流的客户端侦听器示例-https://grpc.io/docs/languages/java/basics/ 我已经按照文档-https://github.com/grpc/grpc/blob/master/doc/keepalive.md 所有的例子都表明,当向服务器发出请求时,服务器将作为异步或一元模型响应,或者客户端可以与新请求聊天。每次请求都必须发送到

  • 计算机程序可依据其瓶颈分为磁盘IO瓶颈型,CPU计算瓶颈型,网络带宽瓶颈型,分布式场景下有时候也会外部系统而导致自身瓶颈。 Web系统打交道最多的是网络,无论是接收,解析用户请求,访问存储,还是把响应数据返回给用户,都是要走网络的。在没有epoll/kqueue之类的系统提供的IO多路复用接口之前,多个核心的现代计算机最头痛的是C10k问题,C10k问题会导致计算机没有办法充分利用CPU来处理更多

  • 我花了几个小时试图设置Tensorflow-hub模块“通用句子编码器”的Tensorflow服务这里有一个类似的问题: 如何使用张量流服务使张量流中心嵌入可用? 我一直在Windows机器上这样做。 这是我用来构建模型的代码: 我已经到了运行以下行的地步: 给我以下结果: 然后我尝试跑步: 这给出了错误: 我曾尝试更改“text=[“what this is”]”部分的格式,但对我来说没有任何效

  • 限流是对稀缺资源访问时,比如秒杀,抢购的商品时,来限制并发和请求的数量,从而有效的进行削峰并使得流量曲线平滑。限流的目的是对并发访问和并发请求进行限速,或者一个时间窗口内请求进行限速从而来保护系统,一旦达到或超过限制速率就可以拒绝服务,或者进行排队等待等。 限流算法 计数器 采用计数器实现限流有点简单粗暴,一般我们会限制一秒钟的能够通过的请求数,比如限流 qps 为100,算法的实现思路就是从第一