Spark 团队开源全流程机器学习平台:MLflow

Spark 和 Mesos 的核心作者兼 Databrick 首席技术专家 Matei Zaharia 宣布推出开源机器学习平台 MLflow,这是一个能够覆盖机器学习全流程(从数据准备到模型训练到最终部署)的新平台,旨在为数据科学家构建、测试和部署机器学习模型的复杂过程做一些简化工作。Matei 表示,研究工作主要围绕着 ——

如何为开发者提供类似谷歌 TFX、Facebook FBLearner Flow 等平台类似的好处,但是要以开放的方式——不仅在开源的意义上开放,而且是可以使用任何工具和算法的意义上开放

的想法展开。

每个做过机器学习开发的人都知道机器学习的复杂性,除了软件开发中常见的问题之外,机器学习还存在很多新的挑战。作为一家大数据解决方案公司,Databricks 与数百家使用机器学习的公司合作,所以能够清楚地了解他们的痛点,比如工具太过复杂、难以跟踪实验、难以重现结果、难以部署模型。由于这些挑战的存在,机器学习开发必须变得与传统软件开发一样强大、可预测和普及。为此,很多企业已经开始构建内部机器学习平台来管理机器学习生命周期。例如,Facebook、谷歌和优步分别构建了 FBLearner Flow、TFX 和 Michelangelo 来进行数据准备、模型训练和部署。但这些内部平台存在一定的局限性:典型的机器学习平台只支持一小部分内置算法或单个机器学习库,并且被绑定在公司内部的基础设施上。用户无法轻易地使用新的机器学习库,或与社区分享他们的工作成果。

Databricks 认为应该使用一种更好的方式来管理机器学习生命周期,于是他们推出了 MLflow,一个开源的机器学习平台。MLflow 的 alpha 版本包含了三个组件:

其中,MLflow 的跟踪组件支持记录和查询实验数据,如评估度量指标和参数。MLflow 的项目组件提供了可重复运行的简单包装格式。最后,MLflow 的模型组件提供了用于管理和部署模型的工具。

GitHub地址项目 GitHub 地址

机器学习库选型

选择一个机器学习(ML)库来解决预测问题,是个说起来容易做起来难的事情 —— 可选择性太多了。每一个库对于它擅长的特定问题都有着良好的特性与优势。 即使对于在机器学习和数据科学领域具有相当经验的人来说,逐个检查所有不同的方案也是一种煎熬。Mayukh Bhaowal —— Salesforce Einstein 的产品管理总监,负责自动化机器学习;向我们分享了关于机器学习库的最重要的五个特征,科研工作者可以在决定使用哪个库时进行参考。

1.编程模式

大多数机器学习库,在高级设计模式中分为两个模式:符号式(Symbolic)和命令式(Imperative)。

  • 在符号式程序中,科研工作者可以从功能上定义复杂的数学计算,而无需实际执行。它通常采用计算图的形式。你把所有的东西放在一起,并用抽象的方式把它们连接起来,当把真值作为输入数据传进去时,它才会真正实现计算。这种模式的最大优点是可组合性和抽象性,从而使开发人员能够专注于更高层次的问题。效率是另外一大优势,因为将这些函数并行化执行相对来说容易一些。Apache Spark 的 ML 库,Spark MLlib 以及任何基于 Spark 的库,比如 Microsoft 的 MMLSpark 和 Intel 的 BigDL,都遵循这种模式。有向无环图(DAG)是计算图的表示形式。符号式编程机器学习库的其他例子有CNTK,具备静态计算图;Caffe2,使用网络结构类Net(操作符 Operator 的计算图);H2O.ai;以及Keras。
  • 在命令式编程中,一切都是先执行的。你写下一行代码,当编译器读取这行并执行它时,就会发生真实的数值计算,然后移到下一行代码。这种风格使得创建模型原型更容易,因为它往往更灵活,更容易调试,易于排除故障。 Scikit-learn 是一个流行的 Python 库,属于这个类别。其他库,如 auto sklearn 和 TPOT 是 Scikit-learn 的高阶抽象层,也遵循这种范式。 PyTorch 是另一种支持动态计算图的主流选择,动态计算图让整个计算流程是命令式的。

显然,这两种方法互有胜负,究竟选择哪种好,是随着用例不同而不同的。命令式编程非常适合研究,因为它天然支持更快速的原型设计 —— 允许重复迭代,试错和和快速反馈循环 —— 而符号式编程更适合于生产环境的应用。

有一些库结合了这两种方法,创建了一种混合风格。最好的例子是 MXNet,它允许符号式编程中的回调函数中插入命令式代码,或者把符号式编程作为命令式程序的一部分。另一个更新的发展是来自 Google 的 TensorFlow 的 Eager Execution。尽管最初,它只是一个具备符号式计算范式的 Python 库(一个张量的静态计算图),但是 Eager Execution 并不需要一个图,而且可以立即执行。

  • 符号式:Spark MLlib,MMLSpark,BigDL,CNTK,H2O.ai,Keras,Caffe2
  • 命令式:scikit-learn,auto sklearn,TPOT,PyTorch
  • 混合式:MXNet,TensorFlow

2.机器学习算法

监督学习,无监督学习,推荐系统深度学习是我们所采用的机器学习算法中常见的分类。我们需要再次强调,应用场景(用例)将决定使用哪个库最好。例如,如果科研工作者正在进行大量自定义的图像处理,如果其他条件相同的话,Caffe2 将是一个不错的选择。它是 Caffe 的进化版,Caffe 一开始把 CNN 应用于图像分类。 CNTK 将是自然语言处理的一个合理选择,因为 CNTK 框架诞生于微软的语言服务部门。另一方面,如果大多数用例是监督学习和非监督学习,Spark MLlib,scikit-learn,H2O.ai 和 MMLSpark 也都是很好的选择,因为它们支持大量的监督和非监督算法。除此之外, Spark MLlib,H2O.ai 和 Mahout 还通过提供协作过滤算法对推荐系统提供支持。

随着深度学习(DL)的兴起,许多较老的库现在已经显得力不从心。 TensorFlow 是首批向数据科学家提供深度学习的计算库之一。今天,我们还有很多其他的专注于深度学习的框架可以选择,其中包括PyTorch,Keras,MXNet,Caffe2,CNTK 和 BigDL。还有其他一些算法库支持 DL 算法,但 DL 不是它们的主要功能,比如 MMLSpark(用于图像和文本学习)和 H2O.ai(通过 Deepwater 插件提供对 DL 的支持)。

  • 有监督和无监督:Spark MLlib,scikit-learn,H2O.ai,MMLSpark,Mahout
  • 深度学习:TensorFlow,PyTorch,Caffe2(用于处理图片),Keras,MXNet,CNTK,BigDL,MMLSpark(用于处理图片和文字),H2O.ai(通过 Deepwater 插件提供支持)
  • 推荐系统:Spark MLlib,H2O.ai(通过 Sparkling Water 插件提供支持),Mahout

3.硬件和性能

计算性能是为科研项目选择合适的库的关键标准之一。这一项对于专精于 DL 算法的库更为重要,因为它们往往是计算密集型的。

推动 DL 开发的最大趋势之一是 GPU 的进步,以及 GPU 提供了对大型矩阵运算的支持。所有 DL 库(如TensorFlow,Keras,PyTorch 和 Caffe2)都支持 GPU,不过许多通用库(如 MMLSpark,H2O.ai 和Apache Mahout)也提供了对 GPU 的支持。CNTK 和 MXNet 拥有自动化多 GPU 和多服务器支持,允许用户进行快速地进行跨多个 GPU 的分布式训练,而且无需任何配置。然而,TensorFlow 由于比其他的 DL 平台计算速度慢,而得到了一些负面评价。作为一种弥补,TensorFlow 在其新的定制 AI 芯片 Tensor Processing Unit(TPU)上大肆宣传。其缺点是,TPU 是非商品化的硬件,只能与 TensorFlow 一起工作,这导致了供应商锁定的现象。

Caffe2,MXNet 和 TensorFlow 同时也因对移动计算支持而脱颖而出。所以,如果科研项目需要在移动设备上进行机器学习训练,那它们就会是你最好的选择。

关于性能方面值得一提的是,大部分基于 Spark 构建的库都能够依靠内存缓存中间数据,靠这一点利用Spark 进行并行集群计算,使本质上需要『迭代』的机器学习算法运行得更快。 Apache Mahout 是一个例外,它直到最近才支持 Hadoop MapReduce,并且要进行对计算而言开销很大的磁盘 I / O 操作,因此它对于迭代算法来说速度较慢。 Mahout 现在在 Spark,H2O.ai 和 Apache Flink 上增加了对Scala语言的支持。 BigDL 在Spark 的生态系统中使用 CPU 实现 DL 的方法是一种新颖的方式,与传统的利用 GPU 加速的 DL 库有所不同,BigDL 使用英特尔的 MKL 和多线程编程。

  • CPU:Spark MLlib,scikit-learn,auto sklearn,TPOT,BigDL
  • GPU:Keras,PyTorch,Caffe2,MMLSpark,H2O.ai,Mahout,CNTK,MXNet,TensorFlow
  • 移动计算:MXNet,TensorFlow,Caffe2

4.可读性

ML 软件与传统软件的区别在于,其预测行为本身或产出的结果不是那么可预期的。与基于规则的引擎不同,这种软件能不断学习到新的规则。深度学习面临的最大挑战之一,是如何持续不断地建立对机器学习应用的信任和信心。为什么预测影响因子 X 有更高的可能性转化客户,而影响因子 Y 在转化率方面引入的可能性较低?数据集中驱动算法进行某些预测的数据模式是什么?我们能否将机器学习模型的这种洞察力转化为商业行动?

对这个问题的其他衍生问题包括,计算图执行时对算法评价指标的可视化,观察数据流并对它们进行优化,手工模型和/或调试模型质量。

这是一个在机器学习中相对不成熟的领域,只有少数库试图解决这个问题。 H2O.ai 推出了机器学习可解释性,解决了这个问题的某些方面。 TensorFlow 有一个称为 TensorBoard 的可视化工具,它帮助数据科学家理解、优化和调试大量的深度神经网络。Keras 也通过其自身的模型可视化解决了这个问题。

虽然这些都是朝着正确方向的很好的步骤,但是为了鼓励 ML 被更广泛的接纳,可解释性领域还需要我们投注更多的新学,让机器学习更加透明,减少它的黑盒性。

  • 可读性:TensorFlow(TensorBoard),H2O.ai(机器学习可解释性),Keras(模型可视化)

5.自动化机器学习

可以这样说:机器学习中最大的创新领域之一,就是自动化的机器学习。真实世界中的机器学习不仅仅是构建模型,还涉及到构造数据管线,其中包括 ETL,特征工程,特征选择,模型选择(包括超参数调优),模型更新和模型部署。

工作流程中的许多步骤在各种应用和数据集处理中都是通用的,并且往往有重复的倾向,这就意味着存在对流程进行优化和自动化的机会。除此以外,某些工作流程特别需要数据科学和机器学习方面的直觉和领域知识,比如特征工程或深度模型调优。这些领域对于无法获得博士学位的人来说难以进入。实现许多步骤的自动化,可以加快数据科学家的工作效率,能够帮助他们在几个小时而不是几个月内帮助构建机器学习应用。

Auto sklearn,TPOT 和 H2O.ai 就是建立在这个前提下的,而且针对的是有监督分类问题。Auto sklearn 使用了贝叶斯优化进行自动化模型选择和超参调整。 TPOT 正在使用遗传算法编程进行超参调整。 TPOT 和 H2O.ai 都包含了几种不同级别的特征工程自动化。 MMLSpark 针对图像和文本的特征,具备自动化模型选择,以及一定程度的自动化特征工程。

无论是从广度(数据管线中的不同阶段自动化)还是深度(单一一个数据处理阶段上的智能自动化)上,这类工具可以说是供不应求。

  • 超参数调整:auto sklearn(贝叶斯优化),TPOT(遗传编程)
  • 有限的自动特征工程:TPOT,H2O.ai,MMLSpark

其他注意事项

尽管机器学习模型在可用前需要在数据集上进行训练,但是在某些情况下,我们可以访问全球通用的数据集。比如,像 ImageNet 这种通用图像数据集,完全足够用于建立一个通用的图像分类模型,这也被称为预训练的模型。这样的模型可以作为插件来引入,这意味着不需要数据或者训练。 MMLSpark,CNTK,TensorFlow,PyTorch,Keras 和 BigDL 都为通用分类任务提供预训练的模型。值得注意的是,这样的模型对于定制化用例是没有用的。

例如,一个通用的图像分类模型,如果需要从作物田地的航拍图像中对农作物的类型进行分类的话,效果就会很差,但是它能很好地将猫与狗分类。这是因为,尽管 ImageNet 中存在农作物相关的图像,但是对于特定种类的作物,以及患上不同疾病的作物的训练数据是不足的,而那些数据可能刚好是化肥公司所关心的。

CNTK 附带一些方便的功能,如数据集自动化随机提取,以及实时在线训练。尽管 MMLSpark 是一个Scala 库,但它支持自动生成其他语言,也就是 PythonR 的接口。

  • 预训练模型:MMLSpark,CNTK,TensorFlow,PyTorch,Keras,BigDL
  • 实时培训:CNTK
  • 多语言支持:MMLSpark 支持从Scala自动生成 Python / R 的接口

小结

将 ML 构建到科学研究项目中时,有多种 ML 库供科研工作者选择。尽管可能没有一个完美的选择,但考虑上述因素,有助于确保科研项目的特定需求选择最佳解决方案。对于拥有数千家企业客户的企业公司来说,还有许多市场尚未涉足的其他挑战 ——

标签泄漏,也被称为数据泄漏,一直是 ML 库的致命弱点。这一点的发生是由于存在未知的业务流程,导致用于模型训练的数据集具有代表实际标签的字段。检查数据是否存在泄漏,并将泄露的字段从数据中删除是得到理想模型的关键。

多租户是另一个关键点 —— 我们如何共享机器学习平台和资源,为多个用户提供服务,每个用户都有自己独特的数据集,并导致完全不同的模型被训练?随着数据/模型规模的不同,这个问题也不同。随着行业继续面临这样的挑战,一个完整、详尽开发的自动 ML 解决方案,虽然现在暂时不存在,在将来可能被证明是成功的关键。

大数据企业级仿真科研教学实践环境

大数据工程实践系统环境
工程实践系统环境 —— 大数据企业级仿真科研教学实践环境

大数据企业级仿真科研教学实践环境,是跨象乘云公司专门为高校教师与学生定制化的设计的企业级大数据项目开发综合环境,可供大数据专业学生或项目开发小组完成大数据全生命周期的工程实践及实验操作。厂家工程师在工程实践系统环境内部,对应相关课程模块教学与实验需求,预装包含:系统环境,功能连接中间件,应用数据库,SQL 结构化大数据数据库,NoSQL 非结构化数据库,教学用示例数据资源,以及面向专业类开发,管理,调优等功能组件及应用软件,满足相关教学与实验所需的应用场景。完整的大数据生态部件包括:

  • Airflow – ELT数据采集、导入、处理管道
  • Crunch – 编写、测试、运行MapReduce管道的JAVA框架
  • Flume – 分布式海量日志流采集架构
  • HBase – Hadoop数据库,面向分布式可扩展的大数据存储
  • HCatalog – 对接不同数据处理工具的Hadoop表与存储管理接口
  • Hive – 使用SQL语法读取、写入分布式存储大数据集的数据仓库
  • HttpFS – 支持所有Hadoop文件系统读写操作的HTTP网关服务器
  • Hue – 可视化大数据分析工作平台
  • Impala – Hadoop本地分析数据库
  • Jupyter Notebook – Web应用程序,创建和共享包含实时代码,方程式,可视化和叙述文本的文档。同时可实现数据清理和转换,数值模拟,统计建模,数据可视化,机器学习等。
  • Kafka – 用于构建实时数据管道和流式应用程序
  • kxcyViz – 跨象乘云™可视化数据统计与多维分析探索平台
  • Llama – 协调、管理和监控Impala和YARN之间的集群资源
  • Mahout – 提供分布式线性代数的机器学习与数据挖掘框架
  • Oozie – 管理Hadoop作业的工作流调度程序系统
  • Open Refine – 数据清理与处理,格式转换工具,支持Web服务和外部数据扩展
  • Pig – 大型数据集并行分析平台
  • Rapid Miner – 数据科学团队工作平台,集成机器学习和预测模型部署
  • R &. RStudio – 统计运算与数据可视化环境及工作平台
  • Search (Solr) – 企业级分布式索引,检索,复制与负载均衡查询平台
  • Sentry – Hadoop集群数据和元数据细粒度角色授权系统
  • Snappy – 高效数据压缩/解压缩库
  • Spark – 最流行的用于大规模数据处理的高速通用引擎
  • Sqoop – 用于在Hadoop和结构化数据存储/关系数据库之间高效传输批量数据的工具
  • Whirr – 运行大数据云服务的库
  • ZooKeeper – 分布式服务器开发与运维协调枢纽

下一代大数据处理引擎(120学时)

流数据是指由数千个数据源持续生成的数据,通常也同时以数据记录的形式发送,规模较小(约几千字节)。流数据包括多种数据,例如客户使用移动或Web应用程序生成的日志文件、网购数据、游戏内玩家活动、社交网站信息、金融交易大厅或地理空间服务,以及来自数据中心内所连接设备或仪器的遥测数据。此类数据需要按记录或根据滑动时间窗口按顺序进行递增式处理,可用于多种分析,包括关联、聚合、筛选和取样。借助此类分析得出的信息,公司得以深入了解其业务和客户活动的方方面面。本课程面向当前最为热门的流式数据处理与分析框架:

  • Spark
  • Storm
  • Flink

让学生在掌握大数据批处理框架Apache Hadoop的基础上,深入了解实时流式数据的采集,访问,分析流程,紧跟大数据行业技术发展步伐,进一步掌握企业应用的流处理框架Storm;当前最为流行的企业大数据混合框架Spark与Spark SQL,Spark Streaming,Spark MLlib,Spark GraphX,Spark R等完整的组件家族;以及被称为第四代大数据通用处理引擎的Flink。课程穿插多个流式数据,图数据,日志数据,物联网IoT数据的真实案例,使学生在完成本实战课程后真正了解相关技术框架的业务应用与价值体现场景。