首页 文章

使用Tensorflow服务提供Keras模型

提问于
浏览
2

Tensorflow 1.12 release notes表示:"Keras models can now be directly exported to the SavedModel format(tf.contrib.saved_model.save_keras_model()) and used with Tensorflow Serving" . 所以我试了一下 -

我使用单行导出了一个简单的模型 . 但是,Tensorflow服务无法识别模型 . 我想问题出在docker调用上,并且可能在模型定义中缺少'signature_defs' . 我会感谢有关缺失步骤的信息 .

1. Training and exporting the model to TF serving

这是基于Jason Brownlee的first NN的代码(由于它的简单性而选择)

(训练数据,作为简短的CSV文件,是here):

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. Setting up Tensorflow Server

服务器可以通过docker或自己的构建来设置 . TF建议使用泊坞窗(TF ref) . 在此之后,基于TF blogTF Serving Tutorial

  • 安装Docker(来自here

  • 获取最新的TF服务版本:

docker pull tensorflow / serving

  • 使用此模型激活TF服务(TF ref):

docker run -p 8501:8501 --name NNN --mount type = bind,source = SSS,target = TTT -e MODEL_NAME = MMM -t tensorflow / serving&

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

  • NNN - 泊坞窗容器名称 - 例如,用于终止进程 . 它可以任意设置(例如:mydocker) .

  • MMM - 模型的名称,似乎是任意设置的 .

  • SSS - 模型所在的文件夹,完整路径 .

  • TTT - What should be this set to ?

3. the client

服务器可以通过gRPC或RESTful API获取请求 . 假设我们使用RESTful API,可以使用curl(here is a TF example)访问模型 . 但是我们如何设置模型的输入/输出? SignatureDefs需要(ref)吗?

All in all ,而"Keras models can now be directly exported to the SavedModel format(tf.contrib.saved_model.save_keras_model()) and used with Tensorflow Serving",如TF1.12发行说明中所述,有一种方法可以实际为模型服务 . 我很乐意完成这个想法 .

2 回答

  • 0

    感谢您提出的问题,或多或少与我的问题有关tensorflow-serving signature for an XOR

    我完全补充你对TTT的怀疑

  • 2

    你对NNN和SSS都是正确的 . NNN可以是任意的,如果没有指定,docker会给它一个随机的名字 .

    对于MMM,最好给它一个有意义的名字 .

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

    RESTful API的输入与TensorFlow代码中模型的输入相同,在您的示例中为 X = dataset[:,0:8] .

    如果在保存模型时没有定义签名,如the example in doc,那么就没有必要进行服务 .

相关问题