使用TensorFlow Serving服务训练好的模型

tensorflow serving rest api

在之前的文章中我们建立、训练和保存了一个评论过滤的模型,以及使用 Curl 访问该模型(Python应用)。其实 TensorFlow 也提供了 REST 服务(TensorFlow Serving),可以通过 REST API 来使用训练好的模型。本篇文章就介绍这一方法。

首先需要安装 TensorFlow Serving 服务系统,命令如下:

###增加软件源
$ echo “deb http://storage.googleapis.com/tensorflow-serving-apt stable tensorflow-model-server tensorflow-model-server-universal” | sudo tee /etc/apt/sources.list.d/tensorflow-serving.list && \
curl https://storage.googleapis.com/tensorflow-serving-apt/tensorflow-serving.release.pub.gpg | sudo apt-key add –
###安装
$ sudo apt update
$ sudo apt-get install tensorflow-model-server

接下来到模型所在目录创建 “1” (版本号)子目录,把模型包含的文件和目录移到该子目录下,然后启动服务:

$ cd /work/model
$ mkdir 1
$ mv assets keras_metadata.pb saved_model.pb variables ./1/
$ cd ..
$ nohup tensorflow_model_server –rest_api_port=8089 –model_name=my_model –model_base_path=”/work/model” >server.log 2>&1
###看一下日志信息,确定启动正常
$ tail server.log

客户端代码,使用 REST API 访问 Tensorflow Model Server。服务端所使用的模型参看这篇文章

import json
import requests
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import TextVectorization

VOCAB_SIZE = 10000
SEQUENCE_LENGTH = 100

int2label = {0: "ham", 1: "spam"}

int_vectorize_layer = TextVectorization(
    max_tokens=VOCAB_SIZE,
    output_mode='int',
    output_sequence_length=SEQUENCE_LENGTH)

def int_vectorize_text(text):
  text = tf.expand_dims(text, -1)
  return int_vectorize_layer(text)

text = ["Hello World!"]
int_vectorize_layer.adapt(text)
X = int_vectorize_text(text)
X = np.array(X)
data = json.dumps({"signature_name": "serving_default", "instances": X.tolist()})
headers = {"content-type": "application/json"}
# 调用REST API
json_response = requests.post('http://localhost:8089/v1/models/my_model:predict', data=data, headers=headers)
# 获取预测结果
predictions = json.loads(json_response.text)['predictions']
print(int2label[np.argmax(predictions)])

发表评论

邮箱地址不会被公开。 必填项已用*标注