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

    xiaoxiao2025-11-12  9

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

    第一篇:打造TensorFlow的实验环境 第二篇:轻松搭建TensorFlow Serving集群 - 本文第三篇 打通TensorFlow持续训练链路 第四篇 利用Neural Style的TensorFlow实现,像梵高一样作画 第五篇 轻松搭建分布式TensorFlow训练集群(上)

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

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

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

    原图来自于 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=268;g=0/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模型可以方便地把我们的猫咪正确分类

    一个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"

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

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

    我们可以从刚才本机创建的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

    最新回复(0)