首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从 Google TFX 到 Kubeflow:容器化交付敏捷 AI 平台

从 Google TFX 到 Kubeflow:容器化交付敏捷 AI 平台

作者头像
IT大咖说
发布2018-10-23 14:41:26
2.1K0
发布2018-10-23 14:41:26
举报
文章被收录于专栏:IT大咖说IT大咖说

内容来源:2018 年 04 月 22 日,才云科技创始人兼CEO张鑫在“全球首发| Kubeflow Meetup 4.22 杭州场,开拓 AI 新视野”进行《从 Google TFX 到 Kubeflow:容器化交付敏捷 AI 平台》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:4367 | 11分钟阅读

摘要

Jeff Dean 不久以前,发表了名为 System for Machine Learning 的演讲,讲述了如何在系统层面提升机器学习的效率。而 Google 内部也在不久前推行其新一代容器化数据分析平台 TFX,让普通的 Google 工程师无需了解深入的 AI 理论也能在一周内打造 Youtube 级别的模型库。近期,Google 与 Caicloud 等合作伙伴更是联合推出了 Kubeflow 项目,希望打造开源版的 TFX。我们会分享如何利用 Kubernetes、TensorFlow 等技术打造一个敏捷的机器学习平台,并介绍 Kubeflow 项目的现状与未来。

获取嘉宾演讲视频及PPT,扫一扫下方二维码即可。

Why TFX beyond TensorFlow?

上图可能是大家在做数据分析时的生产系统全貌,其中黑色区域——TFCode是核心部分,是由算法科学家对经典算法进行配置或自研发所产生的算法部分。

如果我们跳出来看整个系统的全貌,就会发现在核心算法库之外还有很多需要解决的问题,比如对于数据的处理、对模型的训练等。在模型上线后还有很多和运维相关,和管理相关,和系统相关的一些环节,比如怎样可靠的服务一个模型,如何做线上的推理服务,在模型更新以后如何打造一个流水线帮助模型进行快速发布。

虽然TensorFlow提供了一个核心算法计算框架,但是在生产系统内其实我们还需要一整套的平台,做很多和系统和流程相关的工作。

在Google内部的产品被划分成了不同的部门,每个部门都有AI需求,不同产品部门的算法科学家团队哪怕用的是同一个工具,但是真正在生产级别使用的时候针对从数据采集到数据清洗,特征工程使用到模型上线的这一套流程,其实都有着他们自己定制的流水线。更麻烦的是很多人对于其中的很多操作都是通过写一些随机脚本方式进行管理,这就导致在一个公司内部不同产品线之间不同算法科学家之间造成了大量的浪费,而且使得模型和AI系统很难被移植。

而之所以要用TFX其实就是为了把AI流水线从针对某些场景某些业务特定写的脚本变成能够共享、可移植的通用平台。

TFX

TFX是集成数据、模型和服务模块的通用机器学习平台。

我们可以发现当Google准备推某项技术的时候,往往会做两件事,一是推一个开源项目,二是发一篇论文来为这个项目造势。TFX走的也是这样的模式,Kubeflow成了Google发力的重点,同时Google在2017的SIGKDD会议上发布的一篇论文正式介绍了他们在TFX上的一些工作进展。

上图就是在论文中介绍的TFX大概技术架构,最底层是共享资源层,往上是通用工具层,这一层解决的是除开TFCode之外的部分所面临的问题,包括监控、发布、模型管理、弹性伸缩等等都是在这一层实现。再往上层TFX被分为四个模块,第一个模块与数据相关,第二个模块与模型训练相关,第三个模块是训练完以后和模型serving相关,第四个是上线之后对模型的管理。

TFX数据模块

TFX数据模块主要分为4个部分,在数据导入后经常还需要对数据进行转化和清洗,但是在TFX中它将其中一些通用的部分给沉淀到平台内作为通用组件,上图展示的组件分别对应数据导入、数据分析、数据转化、数据验证。

数据分析

数据分析主要指处理填充到系统的每个数据集,并针对用户关系的数据特征,自动生成统计指标,典型的指标包括:样例中各特征的数值分布、包含/不包含某些特征的样例数量。针对不同类型的特征,需要提供不同的统计指标,对于连续特征,采用分位数、等宽直方图、平均值和标准差等;对于离散特征,采用top-k values by frequency、etc等。数据分析帮助用户快速洞察数据集的关键特征,并建立对数据集的整体印象,带来了丰富的数据可视化。

数据验证

数据验证主要指针对数据的完整性和有效性进行验证。用户需要提供一套多版本的schema,包含对数据属性的简洁描述。同时,数据模块支持分析样例数据后自动生成第一版的schema。典型的数据属性包括:特征数据类型、特征最小频数、特征出现频率、特征必要性、连续特征取值范围等等。数据验证能够帮助用户快速实现训练集合测试集的数据有效性验证,自动标注异常字段或特征,并提供修正建议。

数据验证的简单示例

上图展示的是一个简单示例,假设现在需要预测某个公司的市值,首先就需要拿取到历史数据,在这里是以往所有上市公司的市值以及这些公司所包含的特征。有了数据之后我们还想要限制公司的类型,比如只需要企业服务和游戏类型的公司,这时在训练模型之前就要保证获取的数据中只包含这两类公司。TFX为此提供了这样的一套schema,它定义了每个输入的数据都必须包含所在行业,并且限制了行业类型,当有不符合条件的数据进入后就可以根据schema发现问题并显示提示。

TFX模型模块

Model trainer的设计目的是自动化生产级别模型和训练流水线。以我个人经验来说选模型其实一方面是基于经验另一方面是基于运气,在选定模型后,其内部还会有很多参数需要调整,很多时候很难一下子就选对模型。所以这个时候就需要有一个流水线帮助我们进行模型并行训练,以及针对不同参数持续训练。

Model Evaluation是迭代训练并提升模型性能的交互流程中的重要一环,它的设计目标是评价一个新模型的性能等各项指标。同时,它提供离线计算如AUC和cost-weighted error等评价指标的功能。用户如果对线下模型满足那么就可以直接将其发布到生产环境,并在线上进行A/B测试,最终根据线上业务的评价指标决定是否升级模型。

在Evaluation流程通过后,正式更新模型前,Model Evaluation会对模型高效性和系统稳定性进行验证环节。通过比较新模型与基线模型或线上模型的各项指标决定是否更新模型。

TFX服务模块

模型与一般的服务一样在线上同样要保证稳定、高可用、弹性等。TFX的服务模块以TensorFlow Serving为基础,实现了一个生产环境级的模型服务解决方案,设计遵循灵活性、可拔插和可配置的特点。它支持多个模型组合为一个完备服务进行发布,也能够管理一个模型服务的多个版本,同时还可以在保存服务架构和API不变的情况下,更新线上模型和运行环境,使得模型的在线学习和增量学习成为可能。

但是,仅仅用开源的TensorFlow Serving并不能满足实际的应用场景和用户需求,为了享受AI模型应用的好处,生产环境级别的模型服务,应当具备以下几个重要能力:多租户隔离、横向扩展、低延时、高性能、可靠性、鲁棒性。

TFX Runs on Borg

TFX的底层是运行在Borg上的,Borg是Google内部容器的集群管理平台。至于为什么在Borg上运行这个问题,其实前面已经提到过部分原因。

因为无论是机器学习还AI都不仅仅是一个算法框架,除此之外还要涉及到配置管理、流程管理、资源分配等等各方各面,这才是构建一个可落地的生产级的机器学习平台所需要的。

总结起来就是机器学习需要模块化、可移植、可扩展。而将TFX跑在Borg上,就是希望通过容器集群Borg来解决这些问题。

Composability

上图展示的就是机器学习的整个流水线,首先就是数据流入,接着对数据进行分析,之后对数据进行转化,转化之后是数据验证,然后将数据进行拆分。

面对怎么多的模块我们所希望的是用一种非常模块化的系统将整个流水线给串起来,这样的话如果要对流水线中的某个模块进行修改的时候就不会影响到其他的部分。这就是可扩展性,也是非常重要的一个特性,因为一个大公司内不同产品线的流程框架可能是一样的,只是针对不同的问题其中的某些环节所用的算法不同,这个时候模块化的优势就充分的体现出来。

Portability

可移植性在往上软件层讲的是在一个地方开发的应用或模型应用到其他地方后可以迅速部署,针对机器学习业务来说更多的是向下对于硬件方面的问题,讲的是模型不管在什么样的硬件体系下都可以运行,不用考虑模型到底是针对GPU还是CPU。

而当我们使用容器或Kubernetes这样的一些方法来承载机器学习任务的时候,它可以提供底层硬件的加速、分布式的训练和Serving的管理以及快速的软件发布,除此之外不管是在网路层面、调度层面还是在存储层面都可以去为上层的机器学习任务做很多的优化和管理。

Why kubeflow

通过上面的介绍,可能有朋友会有疑问,既然有了TensorFlow和Kubernetes以及Docker,通过这些已经能够很好的解决问题,那为什么还需要kubefolw呢?

其实这因为要想在K8s上使用机器学习并不简单,还需要使用者了解各方面的事情,比如要了解容器、了解如何封装、Kubernetes的存储方案、如何做符合应用的部署等等。

为了解决这样的问题,所以社区里才有了Kubeflow这样的项目。Kubrflow希望用容器的方式交付一个敏捷开发的机器学习平台。Kubeflow将Kubernetes和机器学习整合解决了机器学习所面临的三个问题,通过容器镜像打包的方式或Kubernetes的快速部署可以快速的替换前面提到的流水线中的任意一环,以此解决可扩展性;通过容器的可移植性以及Kubernetes对底层不同设备的抽象可以保证某一地方的模型在kubeflow上的任意地方都可以运行。

Kubeflow作为一个新兴的项目其实还远未达到TFX这样的级别,目前kubeflow在整个环节中主要聚焦到上图所示的几个模块,分别是分布式训练、模型验证、模型发布后的可扩展运行。

Kubeflow现状

上图是GitHub上kubeflow项目的现状,它下面有很多的代码仓库,可以说这个项目本身也是模块化的。kubeflow到目前为止已经有了65位贡献者,3000+的start以及700个commits。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT大咖说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档