利用Docker和阿里云容器服务轻松搭建TensorFlow Serving集群

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文是系列中的第二篇文章,将带您快速了解Tensorflow Serving的原理和使用,并利用阿里云容器服务轻松在云端搭建TensorFlow Serving集群。
+关注继续查看

screenshot

本系列将利用Docker和阿里云容器服务,帮助您上手TensorFlow的机器学习方案

本文是系列中的第二篇文章,将带您快速了解Tensorflow Serving的原理和使用,并利用阿里云容器服务轻松在云端搭建TensorFlow Serving集群。如果您需要学习TensorFlow请参考基于Docker的TensorFlow实验环境

TensorFlow Serving是Google开源的一个灵活的、高性能的机器学习模型服务系统,能够简化并加速从模型到生产应用的过程。它除了原生支持TensorFlow模型,还可以扩展支持其他类型的机器学习模型。

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

14745426285143
原图来自于 First Contact With TensorFlow

本机运行TensorFlow Serving示例

TensorFlow Serving也提供了Docker的方式来安装或使用,但是目前并没有提供官方镜像或者提供Dockerfile来进行自动构建。现在需要通过手工方式来构建TensorFlow Serving镜像。

为了简化部署,我提供了两个预构建的TensorFlow Serving的示例镜像来进行测试。

  • registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow-serving : TensorFlow Serving的基础镜像
  • registry.cn-hangzhou.aliyuncs.com/denverdino/inception-serving : 基于上述基础镜像添加Inception模型实现的服务镜像

我们利用Docker命令启动名为 “inception-serving” 容器作为TF Serving服务器

docker run -d --name inception-serving registry.cn-hangzhou.aliyuncs.com/denverdino/inception-serving

之后利用Docker命令以交互式方式启动 “tensorflow-serving” 镜像作为客户端,并定义容器link,允许在容器内部通过“serving”别名来访问“inception-serving”容器

docker run -ti --name client --link inception-serving:serving registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow-serving

在客户端容器,我们执行下面的脚本,可以方便地利用“inception-serving”服务来进行图像识别。

# persian cat
curl http://f.hiphotos.baidu.com/baike/w%3D268%3Bg%3D0/sign=6268660aafec8a13141a50e6cf38f6b2/32fa828ba61ea8d3c85b36e1910a304e241f58dd.jpg -o persian_cat_image.jpg

/serving/bazel-bin/tensorflow_serving/example/inception_client --server=serving:9000 --image=$PWD/persian_cat_image.jpg

# garfield cat
curl http://a2.att.hudong.com/60/11/01300000010387125853110118750_s.jpg -o garfield_image.jpg

/serving/bazel-bin/tensorflow_serving/example/inception_client --server=serving:9000 --image=$PWD/garfield_image.jpg

注:客户端代码 inception_client.py 通过"serving:9000"访问"inception-serving"容器提供的gRPC服务

Inception模型可以方便地把我们的猫咪正确分类
14745567973719

一个TensorFlow Serving服务节点的计算能力是有限的,在生产环境使用需要利用一个集群实现负载均衡和高可用。TensorFlow目前提供一个基于Kubernetes的集群部署原型,也在提供对其他容器编排技术的支持。

利用容器服务部署TensorFlow Serving分布式集群

阿里云容器服务提供了简单而强大的容器编排能力,可以方便地在云端部署和管理 TensorFlow Serving 集群,并利用阿里云SLB进行负载均衡。

我们可以用如下的docker-compose模板在阿里云上一键部署Serving分布式集群

version: '2'
services:
  serving:
    image: registry.cn-hangzhou.aliyuncs.com/denverdino/inception-serving
    ports:
      - 9000:9000
    labels: 
      aliyun.scale: "3"
      aliyun.lb.port_9000: tcp://inception-serving:9000

注:阿里云的扩展标签如下

  • aliyun.scale 指明需要3个容器实例提供 serving 服务
  • aliyun.lb.port_9000 指明通过名为"inception-serving"的SLB为容器的9000服务端口提供负载均衡

首先,我们需要创建一个负载均衡实例,然后编辑名称设置为"inception-serving"

14745535147047

然后添加监听端口TCP/9000,对应后端端口9000,如下

14745534583309

几分钟之后编排模板部署完毕,每个“serving”容器在宿主机上暴露了9000端口,相应节点被容器服务自动绑定到"inception-serving" SLB作为后端服务器。

14745545864179

我们可以从刚才本机创建的client容器中执行下面的命令将预测请求发送给阿里云上的云服务器,注:请将其中gRPC服务器地址换为负载均衡实例的地址。

/serving/bazel-bin/tensorflow_serving/example/inception_client --server=<SLB_IP>:9000 --image=$PWD/garfield_image.jpg

执行结果如下

D0922 14:31:39.463336540      31 ev_posix.c:101]             Using polling engine: poll
outputs {
  key: "classes"
  value {
    dtype: DT_STRING
    tensor_shape {
      dim {
        size: 1
      }
      dim {
        size: 5
      }
    }
    string_val: "tabby, tabby cat"
    string_val: "Egyptian cat"
    string_val: "tiger cat"
    string_val: "Persian cat"
    string_val: "lynx, catamount"
  }
}
outputs {
  key: "scores"
  value {
    dtype: DT_FLOAT
    tensor_shape {
      dim {
        size: 1
      }
      dim {
        size: 5
      }
    }
    float_val: 8.45185947418
    float_val: 7.37638807297
    float_val: 7.24321079254
    float_val: 7.21496248245
    float_val: 4.0578494072
  }
}

E0922 14:31:41.027554353      31 chttp2_transport.c:1810]    close_transport: {"created":"@1474554701.027514401","description":"FD shutdown","file":"src/core/lib/iomgr/ev_poll_posix.c","file_line":427}

我们的加菲猫就妥妥地被识别出来了。

总结

利用阿里云容器服务我们可以在云端快速测试、部署深度学习应用,让机器学习不再高冷。阿里云为机器学习提供了丰富的基础设施,从弹性计算、负责均衡到对象存储,日志、监控等等。容器服务可以优雅地将这些能力整合起来,释放深度学习应用的威力。

同时TensorFlow Serving 非常适于持续训练和基于真实数据动态调整的多重模型,可以和阿里云容器服务的DevOps能力结合起来将简化和模型优化的测试发布流程。

阿里云容器服务还会和高性能计算(HPC)团队一起配合,之后在阿里云上提供结合GPU加速和Docker集群管理的机器学习解决方案,在云端进一步提升机器学习的效能。

想了解更多容器服务内容,请访问 https://www.aliyun.com/product/containerservice

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
机器学习/深度学习 存储 数据可视化
搭建docker版TensorFlow
搭建docker版TensorFlow
205 0
|
机器学习/深度学习 算法 搜索推荐
TensorFlow(1):使用Docker镜像搭建TensorFlow环境
TensorFlow(1):使用Docker镜像搭建TensorFlow环境
500 0
|
机器学习/深度学习 人工智能 并行计算
在Docker Compose上使用GPU运行TensorFlow
容器化和AI是目前开发的大趋势。理想情况下,容器化可以将环境无缝迁移,将配置环境的成本无限降低:但是在容器中配置CUDA并运行TensorFlow一向是个难题。对于初学者以及没有深度学习工作站的用户,AWS和Azure推出了带独立显卡的云服务:但是按需实例价格不便宜,竞价式实例价格公道然而虚拟机不能重启,导致不能按需挂载硬盘并保存工作状态,用户需要编写大量代码时刻对虚拟机进行监控并对结果进行异地保存。Deep Systems对这个问题进行了研究并给出了很好的建议。 用户首先需要配置 CUDA:Deep Systems推荐使用runtime 安装,以免在升级后污染依赖环境。 安装 Dock
379 0
|
机器学习/深度学习 TensorFlow API
Tensorflow serving with docker
本次教程的目的是带领大家看下如何用 Docker 部署深度学习模型的 第一步我们需要 pull 一个 docker image
141 0
|
TensorFlow 算法框架/工具 Docker
tensorflow serving docker
背景介绍  TensorFlow Serving 是一个用于机器学习模型 serving 的高性能开源库。它可以将训练好的机器学习模型部署到线上,使用 gRPC 作为接口接受外部调用。更加让人眼前一亮的是,它支持模型热更新与自动模型版本管理。
3596 0
|
机器学习/深度学习 TensorFlow 算法框架/工具
构建Tensorflow RDMA的Docker镜像
RDMA是一个远程通讯技术,它通过Kernel bypass等方式降低数据传输中的延迟和CPU消耗。 在分布式训练中,由于多个Worker之间或者Worker和Paramater Server 之间需要大量传输模型变量。当GPU到达一定数量后,受制于网络带宽以及TCP协议的延迟,通讯往往会成为计算性能的瓶颈,而在分布式训练中使用RDMA技术能够非常明显地提高训练速度。 #### Tenso
3583 0
|
TensorFlow 算法框架/工具 Docker
docker环境下安装tensorflow
下载tensorflow 镜像并运行 [root@Ieat1 ~]# docker run -d --name tensorflow -it -p 8888:8888 tensorflow/tensorflow ff716bcb8642e258eb7...
1655 0
|
算法框架/工具 计算机视觉 Docker
基于 TensorFlow 、OpenCV 和 Docker 的实时视频目标检测
本文将介绍如何在 Docker 容器中使用 Tensorflow Object-detection API 来执行实时(网络摄像头)和视频的目标检测。
4253 0
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用TensorFlow,GPU和Docker容器进行深度学习
数据科学家使用GPU来提高TensorFlow的计算速度,但GPU价格昂贵,也需要对其所占用的资源进行认真的管理。本文将带你来一起解决这一问题。
8024 0
|
机器学习/深度学习 TensorFlow 算法框架/工具
阿里云弹性AI服务 -- 基于Docker和EGS一键创建高性能Tensorflow分布式训练
Tensorflow是目前使用最为广泛的深度学习框架之一,但是目前搭建分布式多机多卡训练比较困难,而且Tensorflow原生的分布式的性能很差。为了解决这个问题,我们创建了一个容器镜像:registry.
4709 0
相关产品
容器镜像服务
容器服务Kubernetes版
推荐文章
更多