BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Dylan Raithel 关注 9 他的粉丝 ,译者 盖磊 关注 2 他的粉丝 发布于 2017年9月22日. 估计阅读时间: 7 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

在上个月的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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT