热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

浅析Google和Uber的深度学习“系统”

本文首发于硅谷程序汪,作者:王栋现在我关注的公众号大约有10个都在讲深度学习,不管是engineer还是datascientist都在学怎么用TensorFlow,PyTorch等

本文首发于硅谷程序汪,作者:王栋

现在我关注的公众号大约有10个都在讲深度学习,不管是engineer还是data scientist都在学怎么用TensorFlow,PyTorch等框架。

《浅析Google和Uber的深度学习“系统”》
《浅析Google和Uber的深度学习“系统”》

大家都能实现深度学习模型,但是想把这些模型应用到真正的产品当中并不是一件容易的事情。

TensorFlow这类框架对研究者来说已经很好了,但是生产过程中你还需要面对各种异常情况和部署时可能出现的问题。如果你想将深度学习应用到你的业务当中,那么一定需要一个能够不断进行改进的系统架构,并且及时的处理程序或数据异常。然而目前的深度学习框架仅仅是这个完整解决方案的一小部分。

幸运的是,最近一些大公司都开始介绍他们自己的机器学习平台架构,Uber发表了engineer blog介绍他们的系统Michelangelo(以下简称“米”),Google发表了他们的TFX架构。

今天我们就拿这两篇为样本,简单的谈谈深度学习系统的产品级实践。

Uber – Michelangelo

在Uber搭建Michelangelo之前,他们在部署机器学习模型时遇到了很多问题。

举几个例子,data scientists用很多不同的工具(R,Scikit-learn)建立模型,程序员也会写各种一次性模型。在Open Source界没有一个系统可以让他们重复试验他们的算法,并且适应他们的数据规模。

所以他们搭建了“米”,仔细看一眼这个“米”,其实严格来说并没有强调深度学习,而是像一个包含各种机器学习算法的大数据系统。

“米”建立在很多开源工具上,HDFS,Spark,Samza,Cassandra,MLLib,XGBoost和Tensorflow。

这些开源工具各司其职,HDFS存储着Uber所有的事务和记录数据,Kafka用来汇集Uber各项服务的日志信息,Samza用来进行流计算并且从中计算一些实时features,Cassandra是用来提供实时数据访问的工具,并且Uber开发了一系列自己的服务部署工具。

总的来看,Uber的机器学习系统架构有以下几个模块:

1. Manage data

2. Train models

3. Evaluate models

4. Deploy, make predictions and monitor

《浅析Google和Uber的深度学习“系统”》
《浅析Google和Uber的深度学习“系统”》

Michelangelo几处细节

我们跳过一些大数据的基本架构问题,着重看一下和机器学习更加相关的部分。

首先是对于数据和feature的管理,“米”将数据分为在线数据(online data)和离线数据(offline data)两部分分开管理,最后采用Hive作为feature store来实现不同team之间的数据分享。

根据Uber的文章描述,目前feature store里大约有10000个不同的学习特征,公司里的不同团队都在实时的增加新的特征。

每一个特征都会保存一些相应信息以便维护,比方说作者,描述,以及SLA。整个feature store有两种更新方式,一种是batch precompute批量处理,一种是通过Samza进行实时更新。

在模型方面,Uber设计了自己的DSL来对数据特征进行选取,变形,通过特定的DSL,“米”可以更好地进行模型的训练以及可视化。

目前支持的机器学习模型包括decision trees,linear和logistic models,k-means,time-series和deep neural networks。

我知道Facebook,Pinterest等公司也都开发了自己的DSL帮助机器学习开发者更好地关注在特征抽取和机器学习算法上,不用再写不擅长的系统代码。

在工业界另一个人人都关注的问题是机器学习模型的可复现性,所以“米”在存储模型配置,参数和评测上下了不少功夫。

在模型训练后都会有一个自动评测过程,所有的参数和一些Metadata都存在数据库中用来进行重新分析和部署,这些信息包括:模型的训练者,开始训练和结束训练时间,完整的模型配置,使用的训练测试集,每个特征的分布和重要性,模型的准确性,完整的模型参数和可视化信息。

《浅析Google和Uber的深度学习“系统”》
《浅析Google和Uber的深度学习“系统”》

这些关于“米”的设计思路初衷和Uber本身的业务很像,都希望人们能够更好的访问不同的机器学习模型,与他人分享知识以便提高整个团队的能力。

不管是“feature store”还是模型的重复实验都方便每一个团队分享他们学习得出的数据和模型。

Google TFX

Google的系统架构在业界一直以来都是领头羊的地位,他们有着深厚的深度学习基础,还有流行的TensorFLow框架,2017年在KDD他们发表了论文“TFX: A TensorFlow-based production scale machine learning platform”,介绍了他们内部的学习平台。

从大方向来看,Google论文的结构也分四部分:

1. Manage Data

2. Train Models

3. Evaluate Models

4. Model Serving

《浅析Google和Uber的深度学习“系统”》
《浅析Google和Uber的深度学习“系统”》

Google是一个非常重视engineering的公司,非常重视系统的可靠性,可用性。

Google在搭建机器学习平台的时候着重考虑以下几个方面:

- 平台的适应性,不同的学习任务都可以在平台上运行。

- 连续训练,很多训练任务非常复杂,我们需要在之前的模型上快速引入新数据进行训练优化。

- 简单的配置和工具,帮助每一个程序员快速上手,方便共享知识。

- 产品级的可靠性和扩展性,在Google的级别,每一个功能每一秒都在经历成千上万次测试,可靠性,扩展性异常重要。

下面就让我们简单阅览一下TFX的一些要点,看看Google是如何划分问题重要性和设计的。

TFX的设计要点

TFX论文里最先提到的就是“Machine learning models are only as good as their training data”,所以系统的第一部分就在描述如何分析数据。

第一,TFX提供了一系列工具帮助用户理解数据。在数据进入系统后,TFX会对特征的数值分布,分位数,均值,标准差进行统计。这个功能可以帮助程序员快速了解数据的形状,同时给连续训练和持续部署提供帮助。

其次,TFX提供了很多特征变换方法,节省了很多工程师的工作量。模型本身会记住这些变换过程,以便能够在训练和测试时达到一致的效果。

第三,TFX会对数据进行非常严格的异常检测。他们设计了一个schema文件,包含数据中出现的特征,每一个特征的类型,出现分布,数值分布等等。他们会对模型的训练测试数据,在线数据根据schema进行检查,预防异常。

这个想法来自于设计程序语言时,编译器对变量类型进行静态检查。在推行异常检测的过程中,TFX团队遇到了一定的阻力,因为提供schema会有很多额外工作,但是经过几次意外后,很多engineer team都愿意推行自动检测。

有了数据,接下来要考虑的就是模型本身。

这一方面TFX主要强调了“Warm-Starting”,也就是用别的任务训练出的泛化能力较强的特征,面向某一个问题再进行针对性训练。

另一方面模型设计也强调使用抽象的比较好的API框架,拿TensorFlow来说就是他们的Estimators。

采用高级框架可以让程序变得更加容易编写,并且容错性较强,比较不太容易出现训练和测试时数据转换,目标函数不一致的情况。

《浅析Google和Uber的深度学习“系统”》
《浅析Google和Uber的深度学习“系统”》

TFX文章的最后就是模型的验证和部署过程,这两部分考虑的不仅仅是模型的准确性,还有性能,异常处理等多方面的指标。

要说一个模型“好”,我们需要检查它是不是safe to serve,会不会是系统过载,CPU或者RAM占用过高,另外会不会运行出错奔溃。

其次才是检查模型是不是有更好的“prediction quality”,这既需要在离线数据集上进行测试,又需要在canary环境上进行在线测试,收集实时反馈。

在产品上,TFX对模型效率和服务框架做了不少改进。

文中举了两个例子,一个是对模型进行“软隔离”,帮助多个用户对多个模型同时进行部署而不互相影响。另一方面他们对模型的序列化做了性能优化,这一个特殊的protocol buffer可以将性能提高2~5倍。

小结

阅读Uber和Google的机器学习平台架构可以帮助自己更好的理解构建公司内部平台时可能面对的难点和解决方案。

与TensorFlow这样的深度学习框架相比,Uber和Google的架构更多的强调了如何管理和共享学习特征和模型。

除此之外,Google的平台还花了很大精力保证数据的质量和一致性,测试的自动化和稳定性,部署的稳定性和性能,这思路就好像传统软件工程中提到的Test Driven Development。

持续部署,自动回滚和恢复功能,这些都是软件工程常见的问题,现在被引入到先进的机器学习系统实践当中。

作为一个普通程序员,我个人认为机器学习不是让专家用Python和一个深度学习框架搭建模型,然后扔给开发团队进行实践和测试。

我们需要的是端对端的研究和开发过程,每一个用户都能方便的使用,我也期待有朝一日自己能参与到搭建这样的系统过程中去。

阅读材料:

Michelangelo:
Meet Michelangelo: Uber’s Machine Learning Platform

TFX: A TensorFlow-Based Production-Scale Machine Learning Platform

TensorFlow Serving:
https://www.tensorflow.org/serving/

Hidden Technical Debt in Machine Learning Systems:
https://papers.nips.cc/paper/5656-hidden-technical-debt-in-machine-learning-systems.pdf

Google and Ubers Best Practices for Deep Learning:
https://medium.com/intuitionmachine/google-and-ubers-best-practices-for-deep-learning-58488a8899b6

了解更多北美CS求职信息,欢迎关注我们的官方微信号:来Offer网

如有问题或需要咨询课程,请添加来Offer小助手:laiofferhelper3 为好友进行咨询


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了解决Facebook脸书面试题中插入区间的方法,通过模拟遍历的方式判断当前元素与要插入元素的关系,找到插入点并将新区间插入。同时对算法的时间复杂度和空间复杂度进行了分析。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • OCR:用字符识别方法将形状翻译成计算机文字的过程Matlab:商业数学软件;CUDA:CUDA™是一种由NVIDIA推 ... [详细]
  • 知识图谱表示概念:知识图谱是由一些相互连接的实体和他们的属性构成的。换句话说,知识图谱是由一条条知识组成,每条知识表示为一个SPO三元组(Subject-Predicate-Obj ... [详细]
  • 3年半巨亏242亿!商汤高估了深度学习,下错了棋?
    转自:新智元三年半研发开支近70亿,累计亏损242亿。AI这门生意好像越来越不好做了。近日,商汤科技已向港交所递交IPO申请。招股书显示& ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
author-avatar
豪哥仔137600
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有