Tensorflow模型部署服务器,并使用接口调用

项目需要在生产环境部署训练好的模型进行预测,通过查了相关资料整理了下整个搭建流程及应用。

首先,Tensorflow官方提供的tensorflow serving进行部署,同时,为了免去环境配置等麻烦操作,可借助docker容器。

一. 安装Docker

  • Centos7安装docker

二. 通过Docker拉取TensorFlow Serving镜像

  • 根据自己版本修改(我用的是2.2.0)
docker pull tensorflow/serving:2.2.0
  • 检查是否拉取成功
docker images

在这里插入图片描述

三. 将TensorFlow模型打包成PD格式文件

  • 打包函数
tf.saved_model.save(model, './model/')
  • 打包结果,按照如图放置【1为版本号】Tensorflow模型部署服务器,并使用接口调用_第1张图片

四. 将整个model文件上传至服务器并部署模型

  • 运行容器【注意修改source为model上传至服务器后的位置】
docker run -p 8501:8501 --mount type=bind,source=/home/hl/model,target=/models/hadoop -t tensorflow/serving:2.2.0 -e MODEL_NAME=hadoop --model_base_path=/models/hadoop
  • 运行成功截图
    Tensorflow模型部署服务器,并使用接口调用_第2张图片
  • 测试端口

http://192.168.152.111:8501/v1/models/model
Tensorflow模型部署服务器,并使用接口调用_第3张图片

至此模型已部署成功!

五. 编写简单程序通过HTTP调用模型服务

  • 程序代码
import requests
import json
import numpy as np

# json序列化问题解决
class NpEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, np.integer):
            return int(obj)
        elif isinstance(obj, np.floating):
            return float(obj)
        elif isinstance(obj, np.ndarray):
            return obj.tolist()
        else:
            return super(NpEncoder, self).default(obj)


if __name__ == '__main__':
    list = [0.012133333333, 0.983450847726511, 0.738351259436398, 690, 59, 2.3292634]
    list = np.array(list).reshape(1,6)
    data = json.dumps({"instances":list},cls=NpEncoder)
    # headers = {"content-type":"applicaiton/json"}
    response = requests.post("http://192.168.152.111:8501/v1/models/model:predict",data=data)
    print(response.text)
    embeddings = json.loads(response.text)['predictions']
    print(embeddings[0][0])
  • 运行程序
    Tensorflow模型部署服务器,并使用接口调用_第4张图片

成功获取到模型的预测结果!

你可能感兴趣的:(linux,大数据,python,tensorflow,人工智能,python)