TFServing—AI模型服务部署框架(一)

TFServing是tensorflow的模型部署框架,工业界大部分企业都会选择tfserving工具,这篇文章将详细介绍tfserving的docker部署流程,支持热更新与模型版本自动管理,一旦部署成功,线上服务稳定运行,只需要集中关心线下模型训练。

1.镜像下载,版本分为cpu和gpu版本

Docker Hubhttps://hub.docker.com/r/tensorflow/serving/tagsTFServing—AI模型服务部署框架(一)_第1张图片

2:拉取镜像:

docker pull tensorflow/serving:2.8.4-gpu

TFServing—AI模型服务部署框架(一)_第2张图片

3.测试模型保存

tfserving只支持pb格式的模型文件,所以对于训练好的模型需要对格式进行一个转换。 这里直接加载tesorflow训练的分类模型用于测试,tensorflow 2.0以后模型默认保存格式为pb。

import numpy as np
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.efficientnet_v2 import decode_predictions
import  tensorflow as tf
def save_efficientnetv2m():
    model = tf.keras.applications.efficientnet_v2.EfficientNetV2M(
        include_top=True,
        classifier_activation='softmax',
        include_preprocessing=True
    )
    print(model.summary())
    model.save("./efficientv2m")

TFServing—AI模型服务部署框架(一)_第3张图片

 4.将保存的模型统一放在一个文件夹中,文件夹的格式如下

一定要如下格式存放文件。

imagecls为模型名称,1为模型版本

TFServing—AI模型服务部署框架(一)_第4张图片

 5.启动单个服务

sudo docker run -p 8500:8500 -p 8501:8501 --mount type=bind,source=/home/hexiong/tfmodels/imagecls,target=/models/imagecls -e MODEL_NAME=imagecls -t tensorflow/serving:2.8.4-gpu

6.grpc访问端口为5001,http访问端口为5000,grpc访问服务如下

import grpc
import time
from tensorflow_serving.apis import predict_pb2, prediction_service_pb2_grpc
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.efficientnet_v2 import decode_predictions
import numpy as np
import tensorflow as tf


options = [('grpc.max_send_message_length', 1000 * 1024 * 1024),
           ('grpc.max_receive_message_length', 1000 * 1024 * 1024)]
channel = grpc.insecure_channel("localhost:8500", options=options)
stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)
request = predict_pb2.PredictRequest()
request.model_spec.name = 'imagecls'
request.model_spec.signature_name = 'predict'

# 输入图片并进行请求
img = image.load_img("./images/test.png", target_size=(480, 480))
# print(img)
# print(img.shape)
# img = np.random.rand(28 * 28).reshape(-1, 28)
img = np.expand_dims(img, axis=0)
print(img)
request.inputs['input_1'].CopyFrom(tf.make_tensor_proto(img, tf.float32))
start = time.time()

result_future = stub.Predict.future(request, 10.0)  # 10 secs timeout

res = tf.make_ndarray(result_future.result().outputs['predictions'])

# print(res)

#取概率前三的结果
res = decode_predictions(res, top=3)

print(res)

以上就是单个模型tensorflow部署流程,到目前还有很多问题,比如模型的版本控制,模型更新,多模型部署和更新,服务状态监控,下一节将继续介绍tfserving模型部署的更多细节。

你可能感兴趣的:(tensorflow,tfserving,Python,人工智能)