TensorFlow Serving 是一个用于机器学习模型 serving 的高性能开源库。它可以将训练好的机器学习模型部署到线上,使用 gRPC 作为接口接受外部调用。更加让人眼前一亮的是,它支持模型热更新与自动模型版本管理。这意味着一旦部署 TensorFlow Serving 后,你再也不需要为线上服务操心,只需要关心你的线下模型训练。

TensorFlow Serving的典型的流程如下:学习者(Learner,比如TensorFlow)根据输入数据进行模型训练。等模型训练完成、验证之后,模型会被发布到TensorFlow Serving系统服务器端。客户端提交请求,由服务端返回预测结果。客户端和服务端之间的通信采用的是RPC协议。

安装方式

1)使用Docker安装

使用TensorFlow服务的最简单,最直接的方法是通过 Docker镜像

提示:这也是让TensorFlow服务支持GPU的最简单方法

2)使用APT安装

TensorFlow服务模型服务器二进制文件有两种变体:

tensorflow-model-server:完全优化的服务器,使用一些特定于平台的编译器优化,如SSE4和AVX指令。这应该是大多数用户的首选选项,但可能不适用于某些旧机器。

tensorflow-model-server-universal:使用基本优化编译,但不包括特定于平台的指令集

apt-get remove tensorflow-model-server

可以使用以下命令升级到tensorflow-model-server的较新版本:

apt-get upgrade tensorflow-model-server

3)从源头构建

从源代码构建的推荐方法是使用Docker。TensorFlow服务Docker开发映像封装了构建自己的TensorFlow服务版本所需的所有依赖项。

安装过程(在Kubernetes中部署):

一 导出Inception模型:

克隆Tensorflow服务

克隆TensorFlow服务源到本地计算机:

git clone https://github.com/tensorflow/serving
cd serving

清除我们的本地模型目录,以防我们已经有一个

rm -rf ./models/inception

导出初始模型

在这里,可以采用不同的方式进行模型导出,主要有bazel和pip两种构建方式,这里以pip为例。

导出Inception模型:

python tensorflow_serving/example/mnist_saved_model.py models/mnist

查看导出模型:

ls models/inception

二 上传Docker镜像

首先,我们$USER/inception_serving使用Container Registry格式和项目名称标记镜像

docker tag $USER/inception_serving /library/inception_serving:v2.0

接下来我们将镜像推送到docker私有仓库

docker push /library/inception_serving:v2.0

三 创建Kubernetes部署和服务

部署由Kubernetes部署inception_inference控制的3个服务器 副本组成。副本由Kubernetes服务外部暴露 。

我们使用示例Kubernetes config inception_k8s.yaml创建它们 。
inception_k8s.yaml文件如下:

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

name: inception-deployment

spec:

replicas: 3

template:

metadata:

labels:

app: inception-server

spec:

containers:

- name: inception-container

image: ***/library/inception_serving:v2.0

ports:

- containerPort: 8500

---

apiVersion: v1

kind: Service

metadata:

labels:

run: inception-service

name: inception-service

spec:

ports:

- port: 8500

targetPort: 8500

selector:

app: inception-server

type: NodePort

kubectl create -f tensorflow_serving/example/inception_k8s.yaml
安装完成后输出:
deployment "inception-deployment" created
service "inception-service" created

要查看部署和pod的状态,请执行以下操作:

$ kubectl get deployments
NAME                    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
inception-deployment 3 3 3 3 5s

$ kubectl get pods

NAME                         READY     STATUS    RESTARTS   AGE
inception-deployment-bbcbc   1/1       Running   0          10s
inception-deployment-cj6l2   1/1       Running   0          10s
inception-deployment-t1uep   1/1       Running   0          10s
要查看服务的状态:
$ kubectl get services

NAME                    CLUSTER-IP       EXTERNAL-IP       PORT(S)     AGE
inception-service 10.239.240.227 104.155.184.157 /TCP 1
一切都可能需要一段时间才能启动和运行。
$ kubectl describe service inception-service

Name:           inception-service
Namespace: default
Labels: run=inception-service
Selector: run=inception-service
Type: LoadBalancer
IP: 10.239.240.227
LoadBalancer Ingress: 104.155.184.157
Port: <unset> /TCP
NodePort: <unset> /TCP
Endpoints: <none>
Session Affinity: None
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
1m 1m {service-controller } Normal CreatingLoadBalancer Creating load balancer
1m 1m {service-controller } Normal CreatedLoadBalancer Created load balancer

四 查询模型

我们现在可以从本地主机的外部地址查询服务。

已成功部署Inception模型作为Kubernetes中的服务!

五 主要问题和注意事项:

安装的过程中典型的问题如下:

1) K8s安装中出现的问题:

The connection to the server 192.168.170.132: was refused - did you specify the right host or port?

问题产生的原因主要集中在:

  ① 在该安装过程中需要翻墙,有些组件由于网络问题安装的不完整,导致出现此类错误,同时,这样的问题是最难排查的,已经安装的组件显示是正常的,由于安装的的组件较多,新手一时间难以排查出没有成功启动的组件。

  ② 已经成功安装的组件由于某种操作导致服务关闭,安装过程中遇到了此类问题,短时间内很难解决,当时haproxy和keepalived没有完全启动,执行
  启动服务: systemctl restart haproxy
  检查服务状态:systemctl status haproxy|grep Active
  keepalived操作同上

  ③ 使用的 ~/.kube/config文件不对,需要切换到正确的账户后再执行该命令:

2)
docker私有仓库的镜像上传和下载的问题:

由于官方组件下载需要翻墙的原因,模型成功导出后,要上传到自己的私有镜像库才能直接在k8s中创建pod并应用,这需要自己的私有镜像库。

Tensorflow Serving介绍及部署安装的更多相关文章

  1. Tensorflow Serving Docker compose 部署服务细节(Ubuntu)

    [摘要] Tensorflow Serving 是tf模型持久化的重要工具,本篇介绍如何通过Docker compose搭建并调试TensorFlow Serving TensorFlow Servi ...

  2. Apache Ignite 学习笔记(一): Ignite介绍、部署安装和REST/SQL客户端使用

    Apache Ignite 介绍 Ignite是什么呢?先引用一段官网关于Ignite的描述: Ignite is memory-centric distributed database, cachi ...

  3. tensorflow 模型保存与加载 和TensorFlow serving + grpc + docker项目部署

    TensorFlow 模型保存与加载 TensorFlow中总共有两种保存和加载模型的方法.第一种是利用 tf.train.Saver() 来保存,第二种就是利用 SavedModel 来保存模型,接 ...

  4. 基于TensorFlow Serving的深度学习在线预估

    一.前言 随着深度学习在图像.语言.广告点击率预估等各个领域不断发展,很多团队开始探索深度学习技术在业务层面的实践与应用.而在广告CTR预估方面,新模型也是层出不穷: Wide and Deep[1] ...

  5. TensorFlow Serving简介

    一.TensorFlow Serving简介 TensorFlow Serving是GOOGLE开源的一个服务系统,适用于部署机器学习模型,灵活.性能高.可用于生产环境. TensorFlow Ser ...

  6. Tensorflow 模型线上部署

    获取源码,请移步笔者的github: tensorflow-serving-tutorial 由于python的灵活性和完备的生态库,使得其成为实现.验证ML算法的不二之选.但是工业界要将模型部署到生 ...

  7. Tensorflow serving的编译

    Tensorflow serving提供了部署tensorflow生成的模型给线上服务的方法,包括模型的export,load等等. 安装参考这个 https://github.com/tensorf ...

  8. Tensorflow Serving 模型部署和服务

    http://blog.csdn.net/wangjian1204/article/details/68928656 本文转载自:https://zhuanlan.zhihu.com/p/233614 ...

  9. docker部署tensorflow serving以及模型替换

    Using TensorFlow Serving with Docker 1.Ubuntu16.04下安装docker ce 1-1:卸载旧版本的docker sudo apt-get remove ...

随机推荐

  1. HDU 1210 Eddy's 洗牌问题(找规律,数学)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1210 Eddy's 洗牌问题 Time Limit: 2000/1000 MS (Java/Other ...

  2. js读取跨域webapi传送回来的cookie 要点

    1.webapi 返回cookie时,httpOnly=false 2.webapi 接收Origins 不能为* 3.js端 请求时,withCredentials必须: true   //`wit ...

  3. c# 任务超时执行组件

    最近整理下各类框架,学习一下欠缺的东西.因为前一年开发过java服务端,知道java有很多开源框架,但是毕竟起来也很累. 现在转回头从新审视c#,很基础,没有开源框架,因为以前它不开源,所以少,不用比 ...

  4. 微信小程序学习笔记(一)

    1.目录及文件构成 1.1 根目录下 ** app.js 是小程序的脚本代码,用来监听并处理小程序的生命周期函数.声明全局变量. ** app.json 是对整个小程序的全局配置,配置小程序是由哪些页 ...

  5. Angularjs基础(七)

    AngularJS表单 AngularJS表单时输入控件的集合HTML控件 一下HTML input 元素被称为HTML 控件: input 元素 select元素 button元素 textarea ...

  6. NEC html规范

    HTML规范 - 整体结构 HTML基础设施 文件应以“<!DOCTYPE ......>”首行顶格开始,推荐使用“<!DOCTYPE html>”. 必须申明文档的编码cha ...

  7. TCP三次挥手四次握手

    三次握手: 客户端发起: 1.向服务器端发送报文SYN=1,ACK=0;客户端进入SYN-SEND状态. 2.服务端收到SYN=1,ACK=0的请求报文,向客户端返回确认报文SYN=1,ACK=1,服 ...

  8. display:flex 布局之 骰子

    代码部分 html <body> <div class="box"> <div class="a a1"> <span ...

  9. AES加密工具

    public class AES { /** * 加密 * * @param content * 需要加密的内容 * @param password * 加密密码 * @return */ publi ...

  10. WebSocket协议 8 问

    WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持.它使用方面.应用广泛,已经渗透到前后端开发的各种场景中. 对http一问一答中二式流程 ...