低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

TensorFlow Serving 1.0 的技术细节在 Google I/O 大会上公布

2017 年 9 月 21 日

在上个月的 Google I/O 大会上,Google发布了TensorFlow Serving 的首个主要版本。Noah Fiedel 对其中的一些新特性做了详细的介绍,并给出了他对该项目未来发展的一些看法。

TensorFlow Serving 1.0 的特性包括:多种批量处理(Batching)选项;一个用于生命周期管理的模型管理器;为同一模型的多版本同时提供服务;支持子任务;数据源定义标准化,用于可插拔、可调用的模型存储。

Fiedel 报告针对的是数据科学与工程场景,这一应用场景时常是云山雾罩的,相对于软件工程的最新发展,尤其是在可移植性、可再生性和弹性等关键的非功能性需求上,依然要落后十到二十年。但是对于模型的可重生性和可移植性而言,配置和元数据仍然正在被标准化,在软件工程中出现的一些最佳实践,依然尚未融入到机器学习的普适工业标准中。

TensorFlow Serving 的目标就是要解决其中的一些挑战,并将标准化作为其核心编程模型和平台发展的一部分。

Fidel 在报告中指出,TensorFlow 社区中的一个核心挑战,是如何将模型从磁盘上取出并被服务调用,进而实现为可重生流水线的一部分。TensorFlow Serving 允许用户原生地推出同一模型的多个版本,并同时地运行它们,而且可在不额外使用独立 CI/CD 工具的情况下还原更改。

TensorFlow Serving 1.0 将会在小版本上与所有的 TensorFlow 的发布保存同步,同时也通过 apt-get 提供得到维护的 Debian 软件包。

TensorFlow Serving 具有三个主要组件。第一个组件是一系列的 C++ 软件库,支持使用标准的“保存并导出”格式保存和加载 TensorFlow 模型。第二个组件是一个通用的“配置驱动”核心平台,提供了与其它机器学习平台在某种层次上的互操作性,但是报告中并未对此做详细介绍。核心平台中打包了可执行的二进制和托管服务,其中二进制使用了据估计最优的默认设置,并经实践得以改进。第三个组件是通过 Cloud ML 所提供的一些商业选项。

核心平台关注的是低延迟的请求和响应时间,以及更优的计算时间分配。对于 GPU/TPU 和 CPU 密集型任务,TensorFlow Serving 使用独立的线程库对请求做小批量(mini-batching)处理,提供了更少的往返调用,以及更高效的资源分配。

软件库是经过优化的,主要针对使用“读取- 拷贝- 更新”(read-copy-update)模式的高性能处理、服务器启动时的模型快速加载以及引用计数(reference count)指针。软件库为指针提供了容错,以追踪指定时刻一个模型在图模型中的执行状态。

TensorFlow Serving 提供非阻塞的模型加载和推理服务,这是通过独立的线程池处理的。具有队列的小批量(Mini-batching)处理是 TensorFlow Serving 中的一个重要概念。其中,异步请求被一并小批量处理,并传递给一个 TensorFlow Session,由该 Session 去协调 Manager 处理请求。推理请求也被一并小批量处理,以降低延迟。请求处理使用 ServableHandle 实现,ServableHandle 是一个指向特定客户请求的指针。

SessionBundle 模型格式已被弃用,取而代之的是新的 SavedModel 格式。TensorFlow Serving 中引入了 MetaGraph 这一概念,其中包括处理器架构的信息,经训练的模型将运行在该处理器架构上。MetaGraph 包含了模型的词汇、嵌入(Embedding)、训练权重及其它一些模型参数。SavedModel 对象由 MetaGraphs 组成,设计为可移植的并且可调用的工件(Artifact)。SavedModel 抽象可用于训练、部署服务(Serving)和离线评估,并可在新的 CLI 上运行。SignatureDef 是 SavedModel 的一个组件,帮助实现图模型中各层的标注(Annotate) 和特征化。

TensorFlow Serving 提供了数据源(Source)库的 API,并为模型类型提供了 SourceAdapter。Source 模块为 SavedModels 发射出 Loader,并估计内存需求情况。Source API 发射元数据到 Manager 模块,由 Manager 模块为模型加载数据,并加载该模型本身。Fiedel 指出,通过封装通用代码模式为一个用于注入(Injection)的配置文件,新的 ServerCore 实现将模板(Biolerplate)的代码行数(LOC,Line Of Code)从约 300 行减少到 10 行。

新的 Inference API 为通用用例提供了多个可重用的组件。其中,Predict 组件用于预测配置和部署服务(Serving),Regress 组件用于回归模型,Classify 组件用于分类算法,Multi-inference 组件用于将 Regress 组件和 Classify 组件的 API 组合在一起使用。

现在 TensorFlow Serving 还支持 Multi-headed inferencing。Multi-headed inferencing 是新出现于机器学习领域中的一个研究热点,试图解决存在并发一致请求的问题。通过去除被识别为错误的或重复的请求,Mutil-headed Inferencing 可进一步提高小批量处理(Mini-batch)的效率。 一些产生错误的数据源所生成的输入量非常大,并且代价高昂。具有对这样数据源的弹性,有助于阻止资源消费和数据质量上的负面级联效应。

Google 推荐使用针对 GCP 客户做了优化的静态二进制,以更好地利用对 gRPC 函数默认设置的最优估计。为使用户可尽快上手 TensorFlow Serving ,1.0 版本还提供了 Docker 镜像以及 K8 教程。

查看英文原文: TensorFlow Serving 1.0 Release Detailed at Google I/O

2017 年 9 月 21 日 19:001831
用户头像

发布了 376 篇内容, 共 94.6 次阅读, 收获喜欢 217 次。

关注

评论

发布
暂无评论
发现更多内容

图解分析:Kafka 生产者客户端工作原理

码农架构

Java 程序员 kafak 架构·

重磅发布 | 3.4K Star可视化神器来啦

百度开发者中心

工具 可视化 #飞桨#

安卓开发在线!Android面试吃透这一篇就没有拿不到的offer!大厂内部资料

欢喜学安卓

android 程序员 面试 移动开发

开发Kafka消费者客户端需要注意哪些事项?

码农架构

重磅发布 | 2021年OpenAtom XuperChain开源技术路径

百度开发者中心

百度 #区块链#

IDEA永久注册码来了!!!(支持2020.3.1版本)

程序员生活志

IDEA

公安重点人员动态管控系统开发方案,情报研判平台搭建

WX13823153201

架构师训练营大作业(二)

Geek_f06ede

天天向上跑分模式介绍开发

luluhulian

Elasticsearch 搜索结果解析

escray

elastic 七日更 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

产品经理:一款用户全量会话轨迹管理产品是怎么炼成的?

博睿数据

即构发布 LCEP 低代码互动平台产品 RoomKit,实现互动房间0代码搭建

ZEGO即构

做了6年的Android,Jetpack-MVVM-高频提问和解答,看看这篇文章吧!

欢喜学安卓

android 程序员 面试 移动开发

目前的区块链IPFS矿机模式交易系统开发的简单解析

v16629866266

使用logstash作为docker日志驱动收集日志

LanLiang

Docker Logstash 日志系统

架构师训练营大作业

Geek_f06ede

一款基于 Web 的通用数据管理工具(转载)

CloudQuery社区

数据库 运维 开发工具 dba 数据管理工具

工业绿色哪家强?3D可视化盾构机构建隧道,推动设备预测性运维

一只数据鲸鱼

物联网 数据可视化 绿色交通 绿色工业 盾构机

电子书下载|2020 年云原生年货小红书来啦!

阿里巴巴云原生

容器 微服务 开发者 云原生 k8s

怎么理解Kafka消费者与消费组之间的关系?

码农架构

Java 大数据 程序员 架构

5分钟让你理解K8S必备架构概念,以及网络模型(上)

云流

大数据 架构

CSS开发过程中的20个快速提升技巧

华为云开发者社区

CSS

程序员成长第四篇:程序员的职业天花板

石云升

28天写作 2月春节不断更 职场天花板

深度集成 Flink: Apache Iceberg 0.11.0 最新功能解读

Apache Flink

flink

关于京东技术,你想了解的都在这里丨征文活动获奖及优秀专栏推荐

京东科技开发者

京东 征文大赛

2021版阿里Java亿级并发设计手册:基础+数据库+缓存+消息队列+分布式+维护+实战

Java架构追梦

Java 阿里巴巴 面试 系统架构 亿级并发

Kafka 发送消息过程中拦截器的用途?

码农架构

Java kafka 程序员 架构·

双非学历5年开发,45天吃透Github星标百万的Java全栈思维导图内容,成功斩获百度50W年薪Offer

程序员小毕

Java 架构 面试 分布式 微服务

并发队列:PriorityBlockingQueue和DelayQueue案例使用

叫练

并发编程 队列 优先级队列 条件队列 并发队列

零基础实现Java直播(二):实现流程

ZEGO即构

【JS】事件委托

学习委员

JavaScript 前端 js 2月春节不断更

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

TensorFlow Serving 1.0的技术细节在Google I/O大会上公布-InfoQ