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

本文涉及的产品
容器镜像服务 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

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
7天前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
11天前
|
NoSQL MongoDB 数据库
使用 docker 快速搭建开发环境的 mongodb 服务
本指南介绍如何使用 Docker 和 Docker Compose 部署 MongoDB 和 Mongo Express。首先,通过 Docker 命令分别启动 MongoDB(镜像 `mongo:7.0.14`)和 Mongo Express(镜像 `mongo-express:1.0.2-20-alpine3.19`),并配置环境变量确保两者能正确连接。接着,提供了一个 `docker-compose.yaml` 文件示例,包含 MongoDB 数据卷、健康检查及服务依赖配置,简化多容器管理。
90 1
|
12天前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
18天前
|
弹性计算 人工智能 资源调度
DeepSeek大解读系列公开课上新!阿里云专家主讲云上智能算力、Kubernetes容器服务、DeepSeek私有化部署
智猩猩「DeepSeek大解读」系列公开课第三期即将开讲,聚焦阿里云弹性计算助力大模型训练与部署。三位专家将分别讲解智能算力支撑、Kubernetes容器服务在AI场景的应用实践、以及DeepSeek一键部署和多渠道应用集成,分享云计算如何赋能大模型发展。欲观看直播,可关注【智猩猩GenAI视频号】预约。 (239字符)
|
9天前
|
人工智能 Kubernetes Serverless
阿里云向全球客户推出创新容器计算服务ACS,可降低算力成本高达55%
阿里云向全球客户推出创新容器计算服务ACS,可降低算力成本高达55%
|
10天前
|
弹性计算 监控 持续交付
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
|
11天前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
3月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
424 55
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤
本文介绍了 TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤,包括数据准备、模型定义、损失函数与优化器选择、模型训练与评估、模型保存与部署,并展示了构建全连接神经网络的具体示例。此外,还探讨了 TensorFlow 的高级特性,如自动微分、模型可视化和分布式训练,以及其在未来的发展前景。
450 5
|
4月前
|
机器学习/深度学习 人工智能 TensorFlow
基于TensorFlow的深度学习模型训练与优化实战
基于TensorFlow的深度学习模型训练与优化实战
188 3

相关产品

  • 容器计算服务