技术标签: tensorflow MLOps docker
花了半天的时间调通了在Win11 系统下,如何利用docker + tensorflow serving 实现模型部署。记录一下。
1. 安装docker
桌面版网址:Docker Desktop - Docker
安装过程中可能会出现一些问题,我这里参考了 Docker 简介和安装 - Docker 快速入门
2. 利用Docker 安装 tensorflow serving
docker pull tensorflow/serving
3. 这里是准备模型有两种方法
先说第一种方法
(1)直接官网拉取 tensorflow serving 给的例子 ,代码如下
mkdir -p \tmp\tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving
第一行 这里建立一个 tem的文件 下面的子文件夹是 tfserving , 注意这里我用的windows 系统 ,所以是斜杠 \ 。
第二行 找到建立的文件路径
第三行 下载官方的 tensorflow/serving 注意这里面如果没有 git 工具 可以自己下载一个 并且设置好环境变量 网上资料很多 我这里就不写了
(2)
docker run -p 8501:8501 --mount type=bind,source=C:/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,target=/models/half_plus_two -e MODEL_NAME=half_plus_two -t tensorflow/serving '&'
这步输入后得到了
这时候再打开一个cmd 命令窗口,输入 下面的代码
(3)
curl -XPOST http://localhost:8501/v1/models/half_plus_two:predict -d "{\"instances\":[1.0, 2.0, 5.0]}"
结果为 :
这是官方的方法。
第二种 自己建立了一个模型 。
(1)自己训练一个简单的模型
import pathlib
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
xn = np.array([-1, 0, 1, 2, 3, 4, 5, 6])
yn = np.array([-3, -1, 1, 3, 5, 7, 9, 11])
# single neuron
models = tf.keras.models.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])
models.compile(optimizer='sgd', loss='mean_squared_error')
models.fit(xn, yn, epochs=500)
export_dir = 'DL_Model_Save'
tf.saved_model.save(models, export_dir) # 存放了一个原始训练的 DL 模型
这时候DL_Model_Save 文件下面是这样的
但是这里面没有版本信息, 所以需要改一下 在 DL_Model_Save 文件下面 建立一个文件下 叫做
我 assets variables saved_model.pb 放到0001文件夹下面
这里面之所以这样做是因为一定要一个类似版本信息,否则会报错 :
Did you forget to name your leaf directory as a number (eg. '/1/')?
(2) 剩下的基本和方法1 一样但是需要改一些路径
docker run -p 8501:8501 --mount type=bind,source=C:/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/DL_Model_Save,target=/models/DL_Model_Save -e MODEL_NAME=DL_Model_Save -t tensorflow/serving '&'
红色地方是与上面第一种方法不同的地方,可以看到就是改了一些路径。
(3)再打开一个cmd 文件 输入
curl -XPOST http://localhost:8501/v1/models/DL_Model_Save:predict -d "{\"instances\":[[1],[2]]}"
注意这里面json 数据的格式稍微有点不同 因为是训练模型时候不太一样。
最终得到结果 :
文章浏览阅读2.3k次。在Java 6版本之后JVM在class文件中引入了栈图(StackMapTable)。作用为了提高JVM在类型检查的验证过程的效率栈图结构位于Code属性(指Classfile的Code属性)的属性表( attributes table)结构中。在字节码的Code属性中最多包含一个StackMapTable属性。在Java 7版本之后把栈图作为字节码文件中的强制部分。 本来程序员是不..._stackmaptable
文章浏览阅读280次。实验3 程序流程设计——选择结构程序设计淮海工学院计算机科学系实验报告书课程名:《 C语言程序设计A 》题 目: 实验2 程序流程设计—— 选择结构程序设计班 级: 软嵌151学 号: 2015123349姓 名: 陈正宁实验内容或题目编写一个程序,输入一个字母,若为大写字母,将其转换为小写字母后输出,否则原样输出..._c语言选择结构的应用实训目地
文章浏览阅读517次。工作学习中经常遇到中断相关的issue,我一般会从 中断源 (ic)-- 驱动层 -- SDK 逐层分析。往往解决的比较快。举一个例子,下面给出分析过程。问题描述: 开机过程中指纹driver有大量异常中断触发log 问题分析: 首先,我们要确定的是,这些异常中断是怎么来的。有以下三种case。 1.软件误报2.cpu主动发出的信号3.指纹sensor发出的信号 针对软件误报,只需要 cat ..._sensor采集中断
文章浏览阅读82次。很多人知道斧子很牛,但就是用不好,所以好多人练了一段时间就放弃了,其实斧子练习有一些问题是需要注意的,下面就结合一下我个人练习斧子的经验,和大家分享一下,希望能对大家的练习提供一些帮助。1.拿起斧子要有信心和决心因为斧子有无视头盔的特点,所以面对其他武器,不应该有任何畏惧的心理(当然不能傻傻的向前冲然后白白送死),就像阿卡选手一样,要有一击毙命的信心和决心,因为在刀战战场上,心态很重要。有一个好的...
文章浏览阅读176次。开始前需要先准备好fdfs的环境https://blog.csdn.net/weixin_44834666/article/details/105686059一、安装py3Fdfs包pip install py3Fdfs二、编辑py文件from fdfs_client.client import Fdfs_client, get_tracker_conf# 创建客户端 client...._fastdfs python 上传
文章浏览阅读1.8k次,点赞2次,收藏5次。1.创建表空间create tablespace [表空间名:例如{newszgcp}]datafile [表空间所在地址:例如{'D:/StudySoft/OrServer/admin/orcl/newszgcp'}]size [表空间大小:100M ]autoextend on next [扩展:50M ] maxsize unlimited; 2.创建用户create..._plsql删除创建的用户
文章浏览阅读1.8w次,点赞4次,收藏37次。28款GitHub最流行的开源机器学习项目(一):TensorFlow排榜首 readygo 浏览 673 2016-04-18 20:31:12机器学习开源githubTensorFlow摘要现在机器学习逐渐成为行业热门,经过二十几年的发展,机器学习得到了十分广泛的应用,如:数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、DNA序列测_github 学习开源项目分类集合
文章浏览阅读65次。今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题。为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用。呵呵以下三段代码是我的全部代码,朋友们如果想用,直接复制即可。第一个类:MailSenderInfo.javapackage com.util.mail;/** * 发送邮件需要使用的基本信息 *auth...
文章浏览阅读68次。external testing strategy the service integration testintroduce VCRClient Unit Tests Why an Adapter?Testing for Error CasesSmoke Tests and VCR Options 冒烟测试!
文章浏览阅读3.5k次。下载 > 信息化 > 其它 > 基于蒙特卡罗法的二维随机裂隙模拟Matlab程序 ..._matlab处理离散元问题
文章浏览阅读463次。学习Java,他们都说很easy。作为一名刚从斯康星大学麦迪逊分校计算机科学系毕业的大学生,我通过一些编程课程认识了很多使用Java的朋友。现在很多学校都在从别的编程语言(大多是C ++)转教Java,一项于2014年7月所做的研究表面截至调查时间为止,39个顶级美国CS项目已经有22个使用Java作为入门课程。那么,到底是什么使得Java能从众多的教学语言中脱颖而出?纵观各个方面,我们发_怎么宣传编程语言
文章浏览阅读543次。构造方法/对象的创建步骤/static关键字/继承方inal法的重写/Final构造方法概述和格式A:构造方法的概述和格式 创建对象,给对象中的成员进行初始化B:构造方法格式特点 a:方法名与类名一样 b:没有返回值类型,连void都没有 c:没有具体的返回值构造方法的重载及注意事项A:案例 构造方法的重载B:构造方法注意事项 a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。 b:如果我们给出了有参数的构造方法,系统将不再提供默认的无参构造方法。_1)在student类中创建多个重载的构造方法,包括无参的构造方法、一个参数的构造方法