当前位置: 首页 > news >正文

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

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

相关文章:

  • C语言经典算法100例
  • sql之left join、right join、inner join的区别
  • 洛谷——P1144 最短路计数
  • centos7 samba匿名访问设置
  • kafka基础知识点
  • 来来来!游戏场景风格暴露你的年纪
  • pandas模块学习笔记1--数据结构
  • Hadoop安装
  • VMware + JunOS + Linux 搭建安全测试平台
  • SecureCRT复制粘贴快捷键
  • hexo博客同步管理及迁移
  • WM_MOUSEWHEEL、WM_LBUTTONDOWN等父子窗口消息传递陷阱
  • 使用IntelliJ IDEA 配置Maven(入门)
  • 软件项目中的成本构成及估算方法【转】
  • windows下node配置npm全局路径(踩坑)
  • 《深入 React 技术栈》
  • 【刷算法】求1+2+3+...+n
  • Angular4 模板式表单用法以及验证
  • docker容器内的网络抓包
  • ES6语法详解(一)
  • fetch 从初识到应用
  • Javascript弹出层-初探
  • java小心机(3)| 浅析finalize()
  • js作用域和this的理解
  • Laravel 中的一个后期静态绑定
  • Linux链接文件
  • linux学习笔记
  • October CMS - 快速入门 9 Images And Galleries
  • Python爬虫--- 1.3 BS4库的解析器
  • Redux 中间件分析
  • vue-cli3搭建项目
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 从重复到重用
  • 你真的知道 == 和 equals 的区别吗?
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • Prometheus VS InfluxDB
  • 数据可视化之下发图实践
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (独孤九剑)--文件系统
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (接口封装)
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (三分钟)速览传统边缘检测算子
  • (十三)Maven插件解析运行机制
  • (未解决)macOS matplotlib 中文是方框
  • (转)winform之ListView
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • *setTimeout实现text输入在用户停顿时才调用事件!*