一篇文章读懂什么是机器学习平台
开篇给大家讲两个小故事:
2016年,一个日本青年工程师回到家乡的黄瓜农场,准备子承父业。种植黄瓜,种植黄瓜有一个重要流程就是分拣流程,需要按照黄瓜的卖相,把不同类型黄瓜按照大小、笔直、均匀、水嫩程度分拣到一起,卖给批发商,再把卖相不好的黄瓜拣到一起,低价处理,这个过程全靠人工。
这个工程师想用技术减轻人工劳动,他拍摄了约7000张黄瓜照片,传到谷歌云的机器学习平台,通过TensorFlow深度学习框架,训练模型去识别黄瓜,并对黄瓜按不同特质进行分类。在此基础上,他还做了一个黄瓜分拣机,再配合上自动传送带系统,可以将每根黄瓜识别出来后再传送至程序指定的箱子。这样,降低了分拣黄瓜过程中人工参与。
再给大家讲一个身边的例子:
我们公司需要开发一个能够识别农田中杂草的模型,且准确率要求在95%以上,然后公司随即为算法工程师提供了工作环境:一台GPU服务器和一台电脑,工程师需要进行对比不同的模型来完成需求,这两种模型分别是来自不同的深度学习框架:Caffe和TensorFlow。拿到GPU服务器后的第一件事就是对服务器的配置,登录机器,发现这是一台CentOS的系统,需要安装对应的官方显卡驱动,Nvidia专用的并行计算框架CUDA,以及针对深度神经网络的加速库cuDNN,必须版本匹配!然后,需要检查是否有对应版本的Caffe和TensorFlow框架,这样1天就过去了。发现本机没有对应的编程环境,重新搭建一套环境指不定会出啥问题,毕竟本机的系统和服务器可不一样。
所以选择上服务器开发,服务器黑盒子没有界面。需要在上面安装了Jupyter lab。全部完成之后需要有训练的数据,发现提供的杂草的数据照片没有打标,需要手动标注,一周时间打完标后,然后把训练用的数据搞到服务器上,数据探索、预处理,代码编写、测试写出了第一版,终于可以开始调参训练、优化了。模型开始训练。怎么知道模型训练的情况呢?需要把关键地方的日志进行了输出,同时配备了对应框架的可视化工具(Tensorboard),以此来观察模型的训练情况。但是为了防止出现异常,需要不时地去Check训练状态。几天过后,训练完成,找到了最合适的算法和参数,出来的模型准确度也符合预期,但是如何把这个模型发布成一个可供其他service调用的RESTful API(gRPC),如何保障部署服务的实时性、安全性、扩展性、AB Testing?
一、现在存在的问题
- 重复造轮子:特征工程、模型训练、模型在线预测都是各自研发,从零做起,算法的迭代效率低,用户代码基于单机脚本实现,处理环节长、耦合高,难以修改和扩展,长久以来可读性降低.
- 特征口径混乱:各个业务方重复开发特征,相同特征的统计口径也不一致,导致算法之间难以协同工作。
- 数据分散:同一业务下多个场景、同一场景下多个模型,在数据处理、模型训练等技术流程上类似,场景重复步骤和数据结果难以重复利用。
- 效率低下:算法人员和业务人员对分布式机器学习的开发存在技术壁垒,导致数据量和模型复杂度受单机资源限制。
- 进入门槛高:机器学习和深度学习的算法学习和搭建的门槛很高; 调参和对比算法效果费时费力。
- 维护成本高:机器环境配置不一,框架日新月异,维护各种算法框架的繁琐性高,管理运维成本高,场景不同导致存在周期训练、定时预估、实时预估等需求,对业务人员和算法人员的代码要求高,维护成本高。
二、机器学习平台和AI中台的关系
中台是相对于前台来说,中台可以为各各前端服务提供能力而互不干扰。AI中台就是企业内部可以为各个业务场景提供各种AI能力的平台,而机器学习平台是把数据工程师、算法工程师标注师等机器学习模型训练过程工程化流程化后的平台。机器学习平台更多的是服务于内部工程师,机器学习平台属于AI中台的一部分。
三、什么是机器学习平台
其实机器学习平台,就是伴随着AI工程化落地而来的概念,就是经过一系列的工程手段,最终集成落地到具体的应用中;或者选择合适的模型和算法,经过一些优化,使得它能解决现实世界中真实的问题,并产生我们所需要的价值。机器学习领域,最重要的三个环节如下图,包括数据处理,模型训练和服务部署,每一环节包含的内容很多,都可以单独拿出来做一个平台。
机器学习平台的服务的人群包括算法工程师、数据分析师,也包括业务研发工程师,我们希望通过构建高效的离线、实时预测服务,降低用户使用机器学习的成本,提高接入算法的效率,利用数据中台的优势促进数据和模型的规范和分享。机器学习平台通过端到端的建模流程,使企业用户实现机器学习的全生命周期管理。从端到端的流程来看,机器学习平台的功能可分为:
依据机器学习各个流程步骤,我们设计出机器学习平台的大的框架:
- 数据接入:支持多种类型数据的接入,包括音频、文本、图片、视频。
- 数据准备:包括数据清洗和数据探索,在数据清洗环节,机器学习平台一般具备数据融合、数据缺失处理、数据分类、打标签、数据异常处理、数据平滑等功能,在数据探索环节,机器学习平台具备单变量统计、多变量统计、聚类分析、相似度度量、密度检验等功能。
- 特征工程:支持特征构建、特征选择、特征降维、特征编码等特征工程必备流程,同时提供可视化的特征重要性评估功能,使用户可以快速发现模型中存在的问题。
- 模型训练:支持Notebook;模型建立后,平台提供可视化超参调整、超参搜索等功能,提高模型训练的效率。
- 模型部署:通过API接口,一键实现模型从开发环境到生产环境的部署,实现模型快速上线。
- 模型管理:模型部署到生产环境后仍需要进行监控和管理,以保证模型的准确率和及时更新,模型管理能够将生产环境中的模型与基线或之前的模型进行对比,确定模型效果。此外,很多平台还提供指标跟踪工具,提高模型效果的评估效率。
数据管理
原始数据,也叫做数据源,也就是机器学习的燃料。平台本身并不关心原始数据是如何被收集的,只关心数据存储的方式和位置。存储的方式决定了平台是否能支持此种数据的操作。存储的位置决定了平台是否有权限、有能力去读取到此数据。NFS和OSS一般用于存储非结构化数据,例如图片和视频。而HDFS和数据库里面存放的都是结构化、半结构化的数据,一般都是已经经过ETL处理过的数据。
数据标注
数据标注针对是的监督学习任务,目前机器学习的应用场景大多都是应用监督学习任务习得的。巧妇难为无米之炊,没有足够的标注数据,算法的发挥也不会好到哪儿去。对于标注这块。业务功能上来说,基本上可以当成是另一套系统了,我们可以把它叫做标注平台。
数据标注有两种,一种是人工标注; 另一种是使用已训练好的机器学习模型来标注,然后再辅以人工确定和修订。无论是使用哪种方式,最后都需要人工介入。数据标注结果的标准化、规范化则有一定的难度。因为不同的算法、框架可能需要不同的数据格式。而且还需要支持不同的需求,比如基本的针对图片的目标检测、目标分类、目标跟踪、语义分割等。
图像分类:给定一张图片,图像分类要回答的问题是这张图片中是否包含某类物体(比如牛);
目标检测:目标检测要回答的问题则是物体出现在图中的什么地方,即需要给出物体的外接矩形框,如图 1(b)所示。
目标跟踪:是在视频序列中的每帧图像中找到指定的目标对象运动位置。我们可以根据视频实时跟踪一个或多个目标元素。
语义分割:语意分割是对图像中的每一个像素进行分类,目前广泛应用于医学图像与无人驾驶等
在标注平台中,往往都是人工+模型混合使用的,整体流程如下:
在最开始可能没有模型来辅助进行标注,这个时候就需要人为手工介入,以此来训练出一个模型
当我们根据标注出的数据训练出不错的模型之后,就可以使用此模型来对新输入的数据做一个预标注的工作,然后再辅以人工确认和修订,如此反复迭代,随着输入数据的增多,当我们训练出的模型准确率达到一个很高的水准之后,需要人工操作的数据就会越来越少。以此减少人工成本费。
算法管理
算法工程师撰写算法,一般在Notebook中,Notebook本身功能并不复杂。实质上就是对Jupyter Notebook/JupyterLab等的包装。通常的做法是使用Kubernetes的Service,启动一个Notebook。用户可以在Notebook里面读取平台生成的数据集,写完代码后,还得支持提交分布式训练。算法撰写完成也可以做在线编辑,或者进行版本管理。
模型管理
模型训练平台一般都会集成Spark ML、XGBoost、TensorFlow等多种底层训练框架,和机器学习模型简单的有LR、SVM,树模型有GBDT、RF、XGB等,深度学习模型有RNN、DNN、LSTM、DeepFM等等。模型管理平台的目标就是提供统一的模型创建、训练、部署、切换、版本管理等解决方案,并为机器学习和深度学习模型提供高可用的线上预测服务。模型并不是训练好了就会一直使用,永不改变。它是在不断迭代、不断优化的,当然使用不同的版本来进行A/B Test也是很常见的需求。所以模型版本管理就显得很重要了。
同时,模型管理平台还收集各个服务节点的心跳上报信息,维护模型的状态和版本切换,确保所有节点上模型版本一致。
底层资源管理
在底层资源管理上,多数是引入容器云对模型任务进行统一调度、利用镜像打包模型代码提高可移植性、实现数据集的分布式存储以及采用网络加速分布式训练任务。可以解决了多张 GPU 卡之间的合理调度问题,使得分布式训练任务能优先满足机内总线和集群网络拓扑,训练效率和 GPU 线性性能得到提升。
租户管理
机器学习平台本视解决的就是数据和工程流的问题,自然设计到多角色,多租户情况,租户间权限、数据隔离、租户资源配额、任务优先级划分这些都是必不可少的,一般采用三级或者更多级别来实现。
四、如何评估机器学习平台
机器学习平台的主要在“功能、性能、安全、兼容性”这四个维度进行评估。
五、行业案例
阿里云PAI
阿里云PAI是目前国内应用范围最广泛的机器学习平台,也是国内技术能力公认最强的平台之一。
腾讯Ti-ML
腾讯推出其机器学习平台相对较晚,但其功能和定位和阿里云PAI即无二致。
第四范式先知
第四范式公司是专门做机器学习平台的AI技术与服务商,先知是国内曝光率最高的机器学习平台之一。
百度EasyDL
EasyDL是基于百度自主研发的深度学习平台飞桨结合业界先进的工程服务技术打造的简单易用的模型训练和服务平台。
九章云极
九章云极内置140+模块构成常用算法模块库,支持自定义编写。
京东neuCube
JDAI NeuFoundry覆盖从数据标注-模型开发-模型训练-服务发布-生态市场的人工智能开发全生命周期,并预置高净值的脱敏数据。
华为ModelArts
华为的机器开发平台基于自研MoXing深度学习框架,提升算法开发效率和训练速度。
六、写在结尾的话
对于一个机器学习平台。既然是平台就需要和好多外部做对接,那么统一的标准是最重要的,但是到目前为止,有许多东西是没有一个统一的标准的,比如数据标注结果的存储格式。有太多的框架,太多的环境,太多的版本。与之对应,不同框架最后生成的模型,也都是各不相同的。如果想要实现标准的模型压缩、发布,也是比较困难的一件事。分布式训练。这块目前正在快速发展中,还不是很成熟,需要一一淌下。但是标准只是早晚的事。
搭建一个平台并不是一件简单的事情,所需要的成本还是很高的,现在已经有的开源框架有可以解决大部分问题。当开源工具无法满足需求时,企业可以根据自己的开发能力来进行开发,但是也不是都需要搭建自己的机器学习平台,如果是一次性或者短期项目,可能采买是便宜的。如果需要长期使用,自建可能是比较划算的。开始做的时候可以先试验一些通用模型,然后再结合一些业务属性整体开发。总体来说就是一开始不需要花费大量力气在这件事情上,最好可以先试用,有效果的话再大量投入。
做产品的都知道做平台,最怕的是没有用户使用平台,或者不能通过平台产生真实业务价值,这才是最重要的。有某一业务场景在平台实现端到端产生价值,才能证明这个平台的价值,才能吸引其他用户来使用。平台搭建完成部分用户开始上来试用,然后提各种想法和需求;紧接着,会逐渐迁移部分功能上来试用,看看训练的情况等。同时,在这个阶段,就会需要各种适配用户原始的系统了,这个过程是个漫长的过程的。 需要持续投入,才会量变之后产品质变,但是需要保持足够的耐心。
七、名词解释
因为文章中存在大量行业名词,为了方便大家阅读,现将主要行业名词做了简单介绍。
机器学习算法
简称算法,指使用各类编程语言构建的算法,主要包括统计方法、传统机器学习算法、深度学习甚至某些数学规则等。比如无监督K均值聚类算法,有监督LR、随机森林、GBDT等算法,还有DNN、RNN深度学习等算法。
机器学习模型
简称模型,对具体业务强依赖,与业务强相关,用来对新数据进行直接预测的一系列算法参数的集合,通常需要和机器学习算法配合进行工作。
机器学习框架
机器学习运行时环境,是指能够直接提供机器学习算法编写、模型训练和模型应用的软件系统,如Tensorflow、MxNet等,这些框架会直接调度计算资源和存储资源,其运行机制和具体的业务场景无关。
Spark
Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLlib等子项目,Spark是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、腾讯、京东、携程、优酷土豆。
XGBoost
XGBoost是2014年2月诞生的专注于梯度提升算法的机器学习函数库,此函数库因其优良的学习效果以及高效的训练速度而获得广泛的关注。仅在2015年,在Kaggle竞赛中获胜的29个算法中,有17个使用了XGBoost库,而作为对比,近年大热的深度神经网络方法,这一数据则是11个。在KDDCup 2015 竞赛中,排名前十的队伍全部使用了XGBoost库。XGBoost不仅学习效果很好,而且速度也很快,相比梯度提升算法在另一个常用机器学习库scikit-learn中的实现,XGBoost的性能经常有十倍以上的提升。
TensorFlow
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。TensorFlow可被用于语音识别或图像识别等多项机器学习和深度学习领域,对2011年开发的深度学习基础架构DistBelief进行了各方面的改进,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。TensorFlow将完全开源,任何人都可以用。
PyTorch
PyTorch是一个很著名的支持GPU加速和自动求导的深度学习框架,在最近几年收到学术界的热捧,主要是因为其动态图机制符合思维逻辑,方便调试,适合于需要将想法迅速实现的研究者。
Hadoop
Hadoop是业界公认的一套行业大数据标准开源软件,在分布式环境下Hadoop能提供海量数据的处理能力。几乎所有主流厂商都围绕Hadoop技术开发工具、开源软件、商业化工具和技术服务。许多大型IT公司,如EMC、Microsoft、Intel、Teradata、Cisco都明显增加了Hadoop方面的投入。
hadoop擅长日志分析,facebook就用Hive来进行日志分析,2009年时facebook就有非编程人员的30%的人使用HiveQL进行数据分析;淘宝搜索中的自定义筛选也使用的Hive;利用Pig还可以做高级的数据处理,包括Twitter、LinkedIn 上用于发现您可能认识的人,可以实现类似Amazon.com的协同过滤的推荐效果。淘宝的商品推荐也是!在Yahoo!的40%的Hadoop作业是用pig运行的,包括垃圾邮件的识别和过滤,还有用户特征建模。
Jupyter Notebooks
Jupyter Notebooks 是一款开源的网络应用,我们可以将其用于创建和共享代码与文档。
其提供了一个环境,你无需离开这个环境,就可以在其中编写你的代码、运行代码、查看输出、可视化数据并查看结果。因此,这是一款可执行端到端的数据科学工作流程的便捷工具,其中包括数据清理、统计建模、构建和训练机器学习模型、可视化数据等等。
当你还处于原型开发阶段时,Jupyter Notebooks 的作用更是引人注目。这是因为你的代码是按独立单元的形式编写的,而且这些单元是独立执行的。这让用户可以测试一个项目中的特定代码块,而无需从项目开始处执行代码。很多其它 IDE 环境(比如 RStudio)也有其它几种方式能做到这一点,但我个人觉得 Jupyter 的单个单元结构是最好的。
Notebook
Notebook 概念最初由 Mathematica 及 Matlab 等以数学为中心的学术型平台提出,目前在 Python、R 以及 SAS 社区当中非常流行。所谓 Notebook,其本质在于记录数据研究结果,并允许用户面向不同源数据加以运行,从而简化结果的可重复性。良好的 Notebook 应充当一种共享式协作环境,数据科学家小组可以在这里协同工作,并利用不断发展的数据集进行模型迭代。尽管,Notebook 不能算是代码开发的理想环境,但却能够为数据的协作、探索以及可视化提供强有力的支持。事实上,如果拥有足够的访问权限对接清洁数据,那么数据科学家们将毫不犹豫地利用 Notebooke 快速浏览大型数据集。
TensorBoard
TensorBoard是TensorFlow的一组web组件,用来监控TensorFlow的运行过程或可视化计算图。
TensorBoard目前支持5种可视化:标量、图片、音频、直方图、计算图。
KubeSphere
KubeSphere 是在 Kubernetes 之上构建的以应用为中心的多租户容器管理平台,支持部署和运行在任何基础设施之上,提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时,极大减轻开发、测试、运维的日常工作的复杂度,旨在解决 Kubernetes 本身存在的存储、网络、安全和易用性等痛点。帮助企业轻松应对敏捷开发、自动化运维、应用快速交付、微服务治理、多租户管理、监控日志告警、服务与网络管理、镜像仓库等业务场景。
pandas
pandas是数据科学家用于探索和操作数据的主要工具 大多数人在他们的代码中将pandas缩写为pd. 我们一般这么来使用pandas库中最重要的部分是DataFrame。 DataFrame包含你可以认为是表的数据类型。 这类似于Excel中的工作表或SQL数据库中的表。 pandas提供了强大的功能来操作此类数据类型。
#作者#
老张。AI产品经理,专注于自然语言处理和图像识别领域。现智能保险创业公司合伙人,希望与人工智能领域创业者多多交流。
本文
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!