技术详解Facebook人工智能母体FBLearner Flow

技术详解Facebook人工智能母体FBLearner Flow

Facebook今天第一次正式介绍了FBLearner Flow,一个可以为全公司员工管理机器学习模型的机器学习软件。换句话说,这是一个可以自己制造人工智能的人工智能,你可以理解为传说中的人工智能母体。

它与其他基于云端的机器学习服务有点相似,例如微软的Azure机器学习或者Airbnb的开源Airflow,不过,FBLearner Flow是根据Facebook自己的业务而进行最优化的,装满了Facebook工程师开发的算法,让公司其他人都可以为自己的模型而使用该平台。

“公司超过25%的人都在使用,使用情景是我们之前无法预想的。”Facebook核心机器学习小组总监Hussein Mehanna在一次访谈中告诉Venture Beat。

Facebook不只可以发布关于FBLearner Flow的学术论文,还可以最终将其开源。Facebook工程师已经与其他公司的人讨论了这类技术,包括Linkedin、Twitter和Uber等公司。Mehanna说,他们都非常感兴趣。

当然会对开源感兴趣啦——这个系统已经在Facebook这样的大公司验证可行,而且,这!不!花!钱!这一点就与来自Domino Data Lab和Yhat的数据科学合作工具不同。

Facebook经常将一些技术开源,这样的做法也符合公司自己的需要,因此如果未来FBLearner Flow完全开源了也不奇怪。问题是Facebook是否愿意投入工程资源,将这项技术与其专利系统的匹配断开。话虽如此,如果Facebook不愿开源、将FBLearner Flow压在箱底也不奇怪。因为多亏了这项技术,员工变得更加高效了。这会是一个竞争优势。人们在新系统中可以看到过往的试验和结果,甚至将两个不同的机器学习流水线结合起来,设计出某种更加复杂的东西。此外,图形交互界面让非工程师也可以使用这个新平台,因此才会有Mehanna说高达的25%的人都在使用。

无论未来是否会开源,至少,我们今天获得了一部分FBLearner Flow的技术详解。让我们来看看Facebook工程师Jeffrey Dunn的博文,详细解读FBLearner Flow作为Facebook的人工智能母体到底厉害在哪儿。Jefferey Dunn从卡内基梅隆大学获得硕士学位,2011年加入Facebook,参与打造图片搜索中的网络搜索等工作。

1462973352-3105-5731a3885dc9e

技术详解Facebook人工智能母体FBLearner Flow

如今,Facebook的许多体验和交互都是依靠AI实现的。当你登录Facebook,我们使用机器学来给你提供独特的、个人化的体验。机器学习(ML)模型实现了个人化新闻流(News Feed)、过滤了可能得罪人的内容、突显流行热点话题并将搜索结果排名。还有很多其他体验可以从机器学习中获益。但是以前,工程师必须有很强机器学习背景,不然没法好好利用公司的机器学习基础设施。在2014年底,我们从零开始,重新定义Facebook的机器学习平台,将最先进的AI和ML算法送到Facebook每一位工程师的手中。

我们希望能有这样的一个平台:

1.每个机器学习算法应该可以一次性设置好,可以重复使用;

2. 工程师可以写一个训练流水线,在许多机器上平行运行,可以被很多工程师所用。

3. 无论工程师在机器学习领域的背景深浅,都可以很简单地训练模型,而且,其中几乎所有的         步骤都可以完全自动化。

4. 人人都能很方便地搜索过往试验、查看结果、与他人分享,并在某一个试验中开启新的变量。

我们决定建造一个全新平台:FBLearner Flow,可以简单方便地在不同产品中重复使用算法,可以放大规模同时运行几千个定制试验,并且能够轻松管理试验。这个平台提供了创新性的功能,例如从流水线定义和自动平行Python代码自动生成UI体验。平台从创立起已经训练了超过一百万个模型,我们的预测服务发展到每秒超过600万次预测。

减少了手动工作的工程师们可以花更多时间进行特征工程,这反过来又可以进一步提升精度。工程师可以在更大的平台层面去发挥影响。FBLearner Flow提供了平台和工具,让工程师每天进行几千个试验。

核心概念和组成

在深入理解系统之前,我们先来看几个关键概念。

工作流:一个工作流就是在FBLearner Flow中定义的一个流水线,是所有机器学习任务的入口。每个工作流作为一个具体的任务,例如训练和评估某个具体的模型。工作流根据操作员来定义,可以平行运作。

操作员:操作员是工作流的建造模块。从概念上,你可以将操作员想象为一个程序里的一个功能。在FBLearner Flow中,操作员是执行的最小单位,可以在单一机器上运作。

频道:频道代表输入和输出,在一个工作流的各个操作员直接流转。所有频道都用一个我们定义的定制类别系统输入。

平台包括这三个核心组成部分:一个作者及定制分布工作流的实施环境,一个发布试验和查看结果的试验管理UI,以及无数预定义的流水线,用来训练Facebook大部分经常使用的机器学习算法。

作者和实施环境

平台上所有的工作流和操作员都定义为Python功能,使用独特的装饰器来整合进入平台。让我们来看一个具体的情景,我们想用经典的Iris数据集训练一个决策树,基于花朵的花瓣和萼片大小来预测花的品种。假设数据库是在Hive里面,有五个栏目,分布代表了花瓣宽度、花瓣长度、萼片宽度、萼片长度和花朵样本的品种。在这个工作流中,我们会用日记损失来评估模型的性能,预测一个未标记的数据库的品种。

要处理这类任务的工作流样本大概长这样:

技术详解Facebook人工智能母体FBLearner Flow

图片来源:Facebook Code

让我们来仔细看看这个工作流,理解FBLearner Flow到底是怎么运作的。

首先,@workflow装饰器告诉FBLearner Flow,iris功能不是一个普通Python功能,而是一个工作流。input_schema和returns参值说明了工作流的输入类型及输出类型。实施框架会自动确认这些类型,确保工作流收到的数据是符合其预期的。这个例子中,labeled_data输入标记为有四个栏目的数据库输入。如果在数据库中有一个栏目缺失,那么就会提出一个TypeError异常,因为数据库与这个工作流不兼容。

工作流的本体看起来相应普通的Python功能,连接到几个操作员来实施机器学习工作。虽然看起来普通,FBLearner Flow使用一个future系统来在工作流内提供平行化,如果有若干个步骤不共享一个数据相关性,就可以同时运行。

工作流不是线性执行,而是分两个步骤:1)DAG编译步骤,2)操作员执行步骤。在第一部中,操作员并没有执行,而是返回future。future代表了延迟的计算。因此在上述例子中,dt变量实际上是一个future,代表了还没有发生的决策树训练。FBLearner Flow在DAG编译阶段的所有操作员撤销行为都留有记录,并且记录所有必须在操作之前搞定的future。例如,ComputeMetricsOperator和PredictOperator将dt.model作为输入,因此系统知道nn一定要在操作员运行之前计算,因此必须等到TrainDecisionTreeOperator完成。

DAG编译阶段完成时,FBLearner Flow将打造一个操作员DAG,可以预定何时进行执行,每个操作员只要上一级成功完成就可以开始执行。在这个例子中,ComputeMetricsOperator和PredictOperator之间没有数据相关性,因此这两个操作员可以同时平行运行。

技术详解Facebook人工智能母体FBLearner Flow

图片来源:Facebook Code

在操作员执行阶段,每个操作员有自己的CPU、GPU和存储要求。FBLearner Flow会分配一个匹配操作员任务要求的机器部分。平台自动将相关的代码分配给机器,在操作员之间传送输入和输出。

试验管理UI

在全公司有几百个不同的工作流,进行着无数个机器学习任务。我们面临的一个挑战是打造一个通用的UI界面,可以匹配多元的工作流使用。利用定制类别系统,我们打造了一个可以不需要理解每个工作流的实施细节、就能够解读输入和输出的UI。为了进一步定制化,平台UI提供了一个插件系统,可以用来为具体的团队和整合Facebook系统提供定制化体验。

FBLearner Flow UI还提供了一些额外体验:发布工作流;将输出视觉化并进行比较;管理试验。

发布工作流

我们之前看到,每个工作流规定了一个输入纲要。工程师发布工作流的时候,UI读取到了输入纲要,自动生成一个结构化表格,来确认具体的工作流输入。这让ML工程师可以不用写一行前端代码,就可以使用丰富的UI。定制类别系统有丰富的类别用于描述数据库、特征和许多其他共同的机器学习数据类型。这让UI可以描绘复杂的输入元素,例如功能输入提示和数据库选择条。

技术详解Facebook人工智能母体FBLearner Flow

图片来源:Facebook Code

视觉化输出并比较

工程师可以看到每一个工作流的输出,来修改标签和其他超数据,并采取行动,例如将模型导入生产。工程师可以比较工作流的输入和输出,来基于基准评估试验的性能。我们使用了一项类似的技术来将输出视觉化,类似于渲染输入形式的技术——系统用此来为每种具体类型的输出提供渲染。通过一个插件系统可以加入额外的定制视觉化和行动。例如,新闻流(News Feed)团队可以为他们的模型增加实时系统量度。

技术详解Facebook人工智能母体FBLearner Flow

图片来源:Facebook Code

管理试验

Facebook工程师每天发布几千个试验,平台UI提供了管理所有实验的工具。所有的工作流运行都在Elasticsearch记录索引,因此可以用无数的维度来进行搜索,系统支持保存搜索,方便寻找试验。当调试模型时,工程师经常运行细分的复杂参数扫描分析,很方便就能看到哪一个配置产出的结果最好。

技术详解Facebook人工智能母体FBLearner Flow

图片来源:Facebook Code

机器学习程序库

FBLearner Flow平台的一个核心原则是,它不与任何具体的算法绑定。因而,平台可以支持无数的ML算法以及这些算法的创新组合。平台也很容易延展——任何工程师都可以写一个新的工作流,让他或她最爱的算法可供全公司使用。算法的开源实施很容易在一个工作流中完成,并整合进入Facebook的基础设施。

Facebook的应用机器学习团队维护的工作流可以为常用算法提供可扩展的实施,包括:

神经系统

迭代决策树(GBDT)

LambdaMART

随机梯度下降

逻辑回归

未来计划

有了FBLearner Flow,AI成为工程师组织中的核心,通过简单的API为Facebook工程师提供了最先进的人工智能。我们持续改善FBLearner Flow,来让工程师变得越来越高效,能够将机器学习应用于越来越多的产品中。在未来的几个月中,我们将更加紧密关注其中一些系统和应用,让工程师在产品中使用AI和ML更加简便,并为使用Facebook的人们提供更加个人化的体验。

Via VentureBeat & Facebook Code