人工智能 · 2024年1月10日

Facebook的FBLearner Flow:深入解析技术细节

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

图片来源:webcorenigeria

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

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

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,参与打造图片搜索中的网络搜索等工作。

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

图片来源:Facebook Code

如今,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

在操作员执行阶段,每个操作员有自己

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.

登录免费注册