国内TensorFlow Docker镜像源获取与TensorFlow Serving部署实践

一、安装docker:

官网或者找别的博客参考,安装好后软件应该会有一个新手指引。否则会让你安装WSL2什么的。

检查是否安装好:

docker国内tensorflow镜像源 docker tensorflow serving_tensorflow

键入命令后出现类似界面,说明成功了。

二、拉取tensorflow-serving镜像:

登录后复制

docker pull tensorflow/serving

这个会有下载进度条,下载完了也就成功了。

三、将模型文件转成saved_model格式

由于我每次训练的结果都是保存为.h5的权重文件,所以还需要进行转换,如果你本身就是通过tf.saved_model.save()进行保存的,那就不用转换。

转换代码(不通用,需要载入自己的模型)

登录后复制

import tensorflow as tf
from resnet50 import RESNET50



if __name__ == '__main__':

    classes_name = ['cat',"dog"]
    model = RESNET50(num_classes=len(classes_name))
    model.load_weights('logs/EP039_loss0.019-valoss0.295.h5')
    tf.saved_model.save(model, "test/1")
    
    

转换后生成的文件:1文件夹里面有2个文件夹和1个pd文件:

docker国内tensorflow镜像源 docker tensorflow serving_docker_02

四、通过docker运行tensorflow-serving进行部署模型

登录后复制

docker run -p 8501:8501 --mount type=bind,source=E:\paper\nets\resnet\test/,
target=/models/resnet -e MODEL_NAME=resnet -t tensorflow/serving

说明一下参数:

0:前面几个参数不用变 1:source模型保存的地方

docker国内tensorflow镜像源 docker tensorflow serving_tensorflow_03


文件夹
docker国内tensorflow镜像源 docker tensorflow serving_docker_04



这种,那么它就会每次启动时会自动去用最新的模型。

2:MODEL_NAME是你自己自定义的

3:target也是你自己自定义的,但是我建议models不要动,就后面的字段改成和MODEL_NAME一样就可以了

启动之后的情况

docker国内tensorflow镜像源 docker tensorflow serving_tensorflow_06

五、客户端进行curl访问,返回结果给客户端

官方给的命令是这样的:

docker国内tensorflow镜像源 docker tensorflow serving_自定义_07

但是实际生成中肯定是通过代码进行的,而且谁会取部署一个线性回归的模型啊。所以需要写这个命令对应的其他脚本,c/c++、java、python都是可以的,只是python处理图片比较简单,我就以python为例了,其他大佬有c/c++方面的重写,记得call我哈哈哈(c/c++应该要装opencv,也不知道难不难装):

登录后复制

import cv2
import numpy as np
import requests
import json
import time

classes_name = ['cat',"dog"]
input_shape = (224,224)

filename = "datasets/test/dog/dog.10009.jpg"
inputs = cv2.imread(filename)

""" 数据预处理 """
inputs = cv2.resize(inputs,input_shape).astype(np.float32)
inputs0 = np.array(inputs, dtype="float") / 255.0
inputs = np.expand_dims(inputs0,axis=0)

start = time.time()
""" REST API端口 """
url = 'http://localhost:8501/v1/models/resnet:predict'

data = json.dumps({'inputs':inputs.tolist()}) # 要求输入的数据是json格式
# print(data)
response = requests.post(url,data=data)
result = json.loads(response.content)
outputs = result['outputs'][0]
result_index = np.argmax(outputs)
print(f'预测结果是:{classes_name[result_index]}')
print(f'花费时间:{time.time()-start:.2f}s')

我本来以为字典里面的

docker国内tensorflow镜像源 docker tensorflow serving_tensorflow_08


docker国内tensorflow镜像源 docker tensorflow serving_自定义_09

是有讲究的,跟自己在构建模型时有关,跟那个时候的命名一致,没想到竟然直接是

docker国内tensorflow镜像源 docker tensorflow serving_tensorflow_08


docker国内tensorflow镜像源 docker tensorflow serving_自定义_09

,那更省事了。

输出:

docker国内tensorflow镜像源 docker tensorflow serving_docker_12


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空