当前位置 博文首页 > 文章内容

    Facebook如何运用机器学习进行亿级用户数据处理:AI科技大本营

    作者:shunshunshun18 栏目:未分类 时间:2021-10-27 20:23:49

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    推荐 IIS7批量FTP管理工具 IIS7批量FTP管理
    IIS7批量FTP管理功能说明:
    1、可批量导入,导出FTP信息
    2、其他ftp工具有的功能,我们也有
    3、特色功能:可以定时上传下载
    4、数据信息列表化、一眼就能知道那个是那个
    5、批量连接 标签页式切换 方便快捷
    6、7大连接模式 更多好的兼容
    7、内嵌编辑器 有效解决普通txt记事本乱码
    8、锁屏功能 当程序有规定时间内没人操作,则自动锁程序。输入密码才可以正常操作

    本产品适用于:懒得记录FTP信息和有批量定时备份,上传下载的运维或站长。

    图:


    IIS7批量FTP管理


    编译 | AI科技大本营(rgznai100)

    参与 | 刘畅、尚岩奇、林椿眄

    审校 | reason_W


    2017年末,Facebook应用机器学习组发布最新论文,对整个Facebook的机器学习软硬件架构进行了介绍。纵览全文,我们也可以从中对Facebook各产品的机器学习策略一窥究竟。论文中涉及到机器学习在全球规模(上亿级数据处理)上的全新挑战,并给出了Facebook的应对策略和解决思路,对相关行业和研究极其有意义。



    摘要


    机器学习在Facebook的众多产品和服务中都有着举足轻重的地位。 本文将详细介绍Facebook在机器学习方面的软硬件基础架构,如何来满足其全球规模的运算需求。


    Facebook的机器学习需求极其繁杂:需要运行大量不同的机器学习模型。这种复杂性已经深深刻在Facebook系统堆栈的所有层面上。此外,Facebook存储的所有数据,有相当大一部分会流经机器学习管道,这样的数据载荷为Facebook的分布式高性能训练流带来巨大的压力。


    计算需求也非常紧张,在保持用于训练的GPU/CPU平台的同时平衡出大量CPU容量用于实时推理,也带来了异常紧张的。这些问题及其他难题的解决,仍有待我们在跨越机器学习算法、软件和硬件设计上持久而不懈的努力。



    引言


    Facebook的使命是“为人类构建社交关系赋能,让世界联系更加紧密”。截至2017年12月,Facebook已经连接了全球超过20亿的人口。同时,过去几年来,机器学习同样在这样一种全球尺度的实际问题上进行着一场革命,包括在机器学习算法创新方面的良性循环,用于模型训练的海量数据以及高性能计算机体系结构的进步。


    在Facebook上,机器学习几乎在提升用户体验的所有层面都发挥着关键作用,包括诸如新闻推送语音和文本翻译以及照片和实时视频分类的排名等服务。Facebook在这些服务中用到了各种各样的机器学习算法,包括支持向量机,梯度boosted决策树和许多类型的神经网络。


    本文将介绍Facebook的数据中心架构支持机器学习需求的几个重要层面。其架构包括了内部的“ML-as-a-Service”流,开源机器学习框架,和分布式训练算法。


    从硬件角度来看,Facebook利用了大量的CPU和GPU平台来训练模型,以便在所需的服务延迟时间内支持模型的训练频率。对于机器学习推理过程,Facebook主要依靠CPU来处理所有主要的服务,而其中神经网络排名服务(比如新闻推送)占据着所有计算负载的大头。


    Facebook所存储的海量数据中,有一大部分要流经机器学习管道,并且为了提高模型质量,这一部分的数据量还在随着时间推移不断增加。提供机器学习服务所需的大量数据成为了Facebook的数据中心将要在全球规模上面临的挑战。


    目前已有的可被用来向模型高效地提供数据的技术有,数据反馈和训练的解耦操作,数据/计算协同定位和网络优化。与此同时,Facebook公司这样大的计算和数据规模自身还带来了一个独特的机会。在每天的负载周期内,非高峰期都会空闲出大量可以用来进行分布式训练算法的CPU。


    Facebook的计算集群(fleet)涉及到数十个数据中心,这样大的规模还提供了一种容灾能力。及时交付新的机器学习模型对于Facebook业务的运营是非常重要的,为了保证这一点,容灾规划也至关重要。


    展望未来,Facebook希望看到其现有的和新的服务中的机器学习使用频率快速增长。当然,这种增长也将为负责这些服务架构的团队在全球规模的拓展性上带来更加严峻的挑战。尽管在现有平台上优化基础架构对公司是一个重大的机遇,但我们仍然在积极评估和摸索新的硬件解决方案,同时保持对于算法创新的关注。


    本文(Facebook对机器学习的看法)的主要内容包括:


    • 机器学习正在被广泛应用在Facebook几乎所有的服务,而计算机视觉只占资源需求的一小部分。

    • Facebook所需的大量机器学习算法极其繁杂,包括但不限于神经网络

    • 我们的机器学习管道正在处理海量的数据,而这会带来计算节点之外的工程和效率方面的挑战。

    • Facebook目前的推理过程主要依靠CPU,训练过程则是同时依靠CPU和GPU。但是从性能功耗比的角度来看,应当不断对新的硬件解决方案进行摸索和评估。

    • 全球用户用来使用Facebook的设备每天都可达数亿台,而这会就会提供大量可以用于机器学习任务的机器,例如用来进行大规模的分布式训练。



    Facebook的机器学习


    机器学习(ML)是指利用一系列输入来建立一个可调模型,并利用该模型创建一种表示,预测或其他形式的有用信号的应用实例。


    

    图1. Facebook的机器学习流程和架构示例


    图1所示的流程由以下步骤组成,交替执行:


    • 建立模型的训练阶段。这个阶段通常离线运行。

    • 在应用中运行训练模型的推理阶段,并进行(一组)实时预测。这个阶段是在线执行的。


    模型进行训练的频率要比推理少得多——推理的时间规模虽然在不断变化,但一般在几天左右。训练也需要相当长的时间来完成,通常是几个小时或几天。同时,根据产品实际需求不同,在线推理阶段每天可能运行达数十万次,而且一般需要实时进行。在某些情况下,特别是对于推荐系统,还需要以这样连续的方式在线进行额外的训练。


    在Facebook,机器学习的一个显著特征就是有可用于模型训练的海量数据。这个数据的规模会带来很多涉及到整个机器学习架构的影响。


    使用机器学习的主要服务


    • 消息推送

    消息推送排名算法能够使用户在每次访问Facebook时,最先看到对他们来讲最重要的事情。一般模型会通过训练来确定影响内容排序的各种用户和环境因素。之后,当用户访问Facebook时,该模型会从数千个候选中生成一个最佳推送,它是一个图像和其他内容的个性化集合,以及所选内容的最佳排序。


    • 广告

    广告系统利用机器学习来确定向特定用户显示什么样的广告。通过对广告模型进行训练,我们可以了解用户特征,用户上下文,以前的互动和广告属性,进而学习预测用户在网站上最可能点击的广告。之后,当用户访问Facebook时,我们将输入传递进训练好的模型运行,就能立马确定要显示哪些广告。


    • 搜索

    搜索会针对各种垂直类型(例如,视频,照片,人物,活动等)启动一系列特定的子搜索进程。分类器层在各类垂直类型的搜索之前运行,以预测要搜索的是垂直类型中的哪一个,否则这样的垂直类型搜索将是无效的。分类器本身和各种垂直搜索都包含一个训练的离线阶段,和一个运行模型并执行分类和搜索功能的在线阶段。


    • Sigma

    Sigma是一个分类和异常检测通用框架,用于监测各种内部应用,包括站点的完整性,垃圾邮件检测,支付,注册,未经授权的员工访问以及事件推荐。Sigma包含了在生产中每天都要运行的数百个不同的模型,并且每个模型都会被训练来检测异常或更一般地分类内容。


    • Lumos

    Lumos能够从图像及其内容中提取出高级属性和映射关系,使算法能够自动理解它们。这些数据可以用作其他产品和服务的输入,比如通过文本的形式。


    • Facer

    Facer是Facebook的人脸检测和识别框架。给定一张图像,它首先会寻找该图像中所有的人脸。然后通过运行针对特定用户的人脸识别算法,来确定图中的人脸是否是该用户的好友。Facebook通过该服务为用户推荐想要在照片中标记的好友。


    • 语言翻译

    语言翻译是涉及Facebook内容的国际化交流的服务。Facebook支持超过45种语言之间的源语言或目标语言翻译,这意味着Facebook支持2000多个翻译方向,比如英语到西班牙语,阿拉伯语到英语。通过这2000多个翻译通道,Facebook每天提供4.5B字的翻译服务,通过翻译用户的消息推送,Facebook每天可为全球6亿人减轻语言障碍。目前,每种语言对方向都有其自己的模型,但是我们也正在考虑多语言模型[6]。


    • 语音识别

    语音识别是将音频流转换成文本的服务。它可以为视频自动填补字幕。目前,大部分流媒体都是英文的,但在未来其他语言的识别也将得到支持。另外,非语言的音频文件也可以用类似的系统(更简单的模型)来检测。


    除了上面提到的主要产品之外,还有更多的长尾服务也利用了各种形式的机器学习。 Facebook产品和服务的长尾数量达数百个。


    机器学习模型


    所有基于机器学习的服务都使用“特征”(或输入)来产生量化的输出。Facebook使用的机器学习算法包括Logistic回归(LR),支持向量机(SVM),梯度提升决策树(GBDT)和深度神经网络(DNN)。


    LR和SVM在训练和预测方面非常有效。GBDT可以通过增加计算资源来提高准确性。DNN是最具表达力的,能够提供最高的准确性,但利用的资源也是最多的(在计算量上,至少比LR和SVM等线性模型高出一个数量级)。


    这三种模型的自由参数都在变得越来越多,必须通过使用带标签的输入示例来优化预测的准确性。


    在深度神经网络中,有三类经常使用的网络:多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN / LSTM)。MLP网络通常运行在结构化输入特征(通常是排名)上,RNN / LSTM网络一般用来处理时域的数据,即用作序列处理器(通常是语言处理),相对的CNNs则是一种处理用来空间数据的工具(通常是图像处理)。表I显示了这些机器学习模型类型和产品/服务之间的映射关系。


    

    表1 利用机器学习算法的产品或服务


    Facebook中的ML-as-a-Service


    为了简化在产品中应用机器学习的任务,我们构建了一些内部平台和工具包,包括FBLearner,Caffe2和PyTorch。FBLearner是三种工具(FBLearner Feature Store,FBLearner Flow,FBLearner Predictor)的套装,其中每种工具分别负责机器学习管道上不同的部分。正如前面图1显示的那样,它利用了一种内部作业调度程序在GPU和CPU的共享资源池上分配资源和调度作业。Facebook大多数机器学习模型的训练过程都是在FBLearner平台上进行的。这些工具和平台被设计来帮助机器学习工程师提高效率,从而能够专注于算法创新。


    • FBLearner Feature Store。任何机器学习建模任务的起点是收集和生成特征。 FBLearner Feature Store本质上是一系列特征生成器的目录,其特征生成器可以用于训练和实时预测,当然它也可以作为多个团队可以用来共享和寻找特征的公共空间(market place)。这样以个特征列表对于刚开始使用机器学习的团队来说是一个很好的平台,同时也有助于在现有模型中应用新特征。

    • FBLearner Flow是Facebook用于训练模型的机器学习平台。Flow是一个管道管理系统,它会执行一个可以描述模型训练和/或评估所需步骤及其所需资源的工作流程(workflow)。这个工作流程由离散单元或操作符(operators)构成,每个单元都有输入和输出。操作符之间的连接会通过跟踪一个操作符到下一个操作符的数据流自动推理,Flow则通过处理调度和资源管理来执行工作流程。Flow还拥有一个可以用于实验管理的工具和一个简单的用户界面,这个界面可以跟踪每个workflow或实验生成的所有构件和指标,从而方便对比和管理这些实验。

    • FBLearner Predictor是Facebook内部的推理引擎,它可以使用在Flow中训练的模型来提供实时的预测。Predictor可以用作多租户服务,也可以用作集成在特定产品的后端服务中的库。Facebook的很多产品团队都在使用Predictor,而其中许多团队都需要低延迟解决方案。Flow和Predictor之间的直接集成还有助于运行在线的实验以及在生产中管理多个版本的模型。


    深度学习框架


    我们在Facebook上利用了两种截然不同的协同框架来进行深度学习:针对研究优化的PyTorch和针对生产优化的Caffe2。


    • Caffe2是Facebook的内部生产框架,它用于训练和部署大规模的机器学习模型。Caffe2专注于产品所需的几个关键特性:性能,跨平台支持和基本的机器学习算法,如卷积神经网络(CNN),递归神经网络(RNN)和多层感知器(MLP)。这些网络都具有稀疏或密集的连接以及高达数百亿的参数。该框架的设计采用模块化方法,在所有后端实现(CPU,GPU和加速器)之间共享统一的图表示。为了在不同平台上实现最佳的运行时间,Caffe2还抽象了包括cuDNN,MKL和Meta在内的第三方库。


    • PyTorch是Facebook在AI研究领域的首选框架。它的前端注重灵活性、调试以及动态神经网络,能够快速进行实验。由于依赖于Python来执行,它并没有针对生产和移动端部署进行优化。当研究项目产生了有价值的结果时,模型就需要转移到生产上。过去,在生产环境中,我们通过使用其他框架重写产品环境的训练管道来完成模型转移。最近Facebook开始构建ONNX工具链来简化这个转移过程。比如,动态神经网络虽然被用于尖端的人工智能研究,但这些模型需要更长的时间才能被应用于产品中。通过解耦框架,我们避免了的为满足性能而设计更复杂的执行引擎(比如Caffe2)的需求。此外,相比模型速度,研究人员在进行研究时更看重其灵活性。举个栗子,在模型探索阶段,性能下降30%是可以容忍的,尤其是在它具有易测验和模型可视化的优点时。但是相同的方法并不适合于生产。这种取舍原则在PyTorch和Caffe2的框架设计中也可以看到,PyTorch提供了良好的默认参数和合理的性能,而Caffe2可以选择使用异步图执行,量化权重和多个专用后端等特性来达到最佳性能。


    虽然FBLearner平台本身不限制使用什么框架,无论是Caffe2,TensorFlow,PyTorch还是其他的框架都可以,但我们的AI软件平台(AI Software Platform)团队为了让FBLearner能够很好地与Caffe2集成还是进行了特定优化。总的来说,分离研究和生产框架(分别是PyTorch和Caffe2)使我们能够在两边灵活运作,减少约束数量的同时还能增加新特性。


    • ONNX. 深度学习工具生态系统在整个行业还处于初级阶段。 对于不同的问题子集,不同的工具有着不同的优势,并且在灵活性,性能和支持平台方面有着不同的折衷,这就跟我们之前对PyTorch和Caffe2所描述的权衡一样。 因此,在不同的框架或平台之间交换训练模型的需求很大。 为了弥补这个缺陷,2017年末,Facebook与几个合作伙伴共同推出了开放式神经网络交换(Open Neural Network Exchange , ONNX)。ONNX是一种以标准方式表示深度学习模型的格式,以便在不同的框架和供应商优化库之间实现互操作。同时,它能满足在不同的框架或平台之间交换训练好的模型的需求。ONNX被设计为一种开放的规范,允许框架作者和硬件供应商为其做出贡献,并拥有框架和库之间的各种转换器。Facebook正在努力使ONNX成为所有这些工具之间的协作伙伴,而不是一种具有排他性的官方标准。


    在Facebook内部,ONNX是我们将研究模型从PyTorch环境转移到Caffe2中的高性能生产环境的主要手段,它可以实现对模型的自动捕捉和固定部分的转换。


    在Facebook内部,ONNX是我们将研究模型从PyTorch环境转移到Caffe2中的高性能生产环境的主要手段。 ONNX提供了自动捕捉和转换模型的静态部分的能力。 我们有一个额外的工具链,通过将它们映射到Caffe2中的控制流原函数或者以C ++作为自定义操作符重新实现它们,会有助于将模型从Python转移到动态图。



    机器学习的资源需求


    鉴于机器学习在训练和推理(inference)的阶段的资源要求、频率和持续时长不同,我们将分别讨论这两个阶段的细节和资源应用。


    Facebook硬件资源概况


    Facebook的基础架构部门(Facebook Infrastructure)很早之前就开始为主要软件服务构建的高效平台,包括针对每种主要工作负载的资源要求定制的服务器、存储以及网络支持。

    


    图2 基于CPU的计算服务器。单插槽服务器底座上有4个Monolake服务器卡,双插槽服务器底座还一个双插槽服务器,因此在2U机箱中共有三个双插槽服务器。所以在2U形式的组合中共有12个服务器。


    当前Facebook提供约八种主要的计算和存储架构,对应八种主要服务。这些主要架构类型足以满足Facebook主要服务的资源要求。例如,图2中展示了一个可以容纳三个计算Sleds模块的2U机架,这些模块可支持两种服务器类型。其中一种Sled模块是单插槽CPU服务器(1xCPU),多用于Web层——一种主要看重吞吐量的无状态服务,因此可以使用能效更高的CPU(Broadwell-D处理器);它的DRAM(32GB)以及主板硬盘或闪存较少。


    另一种Sled模块是较大的双插槽CPU服务器(2x高功率Broadwell-EP或Skylake SP CPU),它配有大量的DRAM ,常用于涉及大量计算和存储的服务。

    

    图3. 搭载8个GPU的Big Basin GPU服务器(3U机架)


    由于我们训练的神经网络越来越大,并且越来越深,我们开发出了Big Basin GPU服务器(如图3所示),这是我们2017年最新的GPU服务器。最初的Big Basin GPU服务器配置了八个互相连接的NVIDIA Tesla P100 GPU加速器,它使用NVIDIA NVLink形成了一个八CPU混合立方网格,后来,这种设计经过改进之后又应用到了V100 GPU上。


    Big Basin是早前的Big Sur GPU的继承者,后者是Facebook数据中心首个广泛应用的高性能AI计算平台,用于支持于2015年开发并通过开放计算项目(Open Compute Project)发布的NVIDIA M40 GPU。


    与Big Sur相比,V100 Big Basin每瓦电可实现的性能更高,这得益于单精度浮点运算单元——每个GPU的运算速度从7 teraflops(每秒万亿次浮点运算)增加到了15.7 teraflops,以及可提供900GB/s的带宽的高带宽显存(HBM2)。这种新的架构还使得半精度运算的速度快了一倍,进一步提高了运算吞吐量。


    由于Big Basin的运算吞吐量更大,而且显存也从12 GB增加到了16 GB,因此它可以用来训练比先前模型大30%的模型。高带宽NVLink互连GPU通信还强化了分布式训练。在使用ResNet-50图像分类模型进行的测试中,Big Basin的运算吞吐量比Big Sur要高出300%,借助它我们可以以更快的速度训练比以往更复杂的模型。


    Facebook通过开放计算项目(Open Compute Project)公布了所有这些计算服务器的设计以及几种存储平台。


    离线训练的资源需求


    当前,不同的产品会使用不同的计算资源来完成各自的离线训练步骤。有些产品(例如Lumos)在GPU上完成所有的训练。其他产品(例如Sigama)则在双插槽 CPU计算服务器完成所有的训练。诸如Facer这样的产品采用双阶段训练流程,先在GPU上以很小的频率(几个月一次)队通用的面部检测和识别模型进行训练,然后在数千个1xCPU服务器上以很高的频率对每个用户的模型进行特定训练。


    在本部分,我们将围绕机器学习训练平台、训练频率和持续时长,具体介绍多种服务的细节,并在表II中进行了总结。另外,我们还讨论了数据集的趋势以及这些趋势对计算、内存、存储和网络架构的意义。


    计算类型和相对数据来源的位置。离线训练既可以在CPU上完成,也可以在GPU上完成,这取决于服务本身。虽然在多数情况下,在GPU上训练出的模型在性能上要比在CPU上训练的模型好,但是CPU强大的现成运算能力使得它成为了一个非常有用的平台。这一点在每天的非高峰期中尤为明显,因为在这期间CPU资源本来就无法得到利用,后面的图4会对此进行说明。下面我们给出了服务和计算资源训练模型的对应关系:


    • 在GPU上训练模型的服务: Lumos、语音识别、语言翻译

    • 在CPU上训练模型的服务:News Feed、Sigma

    • 在GPU和CPU上训练模型的服务:Facer (在GPU上每几年训练一次的通用模型,此类模型较为稳定;在1xCPU上训练的用户特定的模型,此类模型可以用于处理新图像数据)、搜索(利用多个独立的垂直搜索引擎,使用可以进行预测的分类器启动最合适的垂直搜索引擎)。


    目前,GPU主要被用于离线训练,而不是向用户提供实时数据。因为大多数GPU架构都针对运算吞吐量进行了优化,以克服延迟劣势。同时由于训练过程严重依赖从大型数据生成库中获取的数据,考虑到性能和带宽方面的原因,GPU必须靠近数据来源。由于训练模型所使用的数据量增长的相当快,GPU是否靠近数据来源变得越来越重要。


    • 内存、存储和网络:从内存储器容量的角度看,CPU和GPU平台都能为训练提供充足的存储容量。即使对于Facer这样的应用,也可以在1xCPU上用32GB RAM训练用户特定的SVM模型。如果可以尽可能地利用高效平台以及多余的存储容量,则平台的总体训练效率会非常优秀。


    表II 不同服务的离线训练的频率、持续时长和资源


    机器学习系统依赖于使用实例数据的训练。Facebook 使用了机器学习数据管道中的大量数据。这使得计算资源趋向于靠近数据库。


    随着时间的推移,大多数服务会显示出利用累积的用户数据的趋势,这将导致这些服务更加依赖Facebook的其他服务,并且需要更大的网络带宽来获取数据。因此,只有在数据源所在地或附近部署巨大的存储,以便从偏远的区域大规模转移数据,从而避免为了等待获取更多样本数据而关停训练管道。


    在部署训练机器的位置时,我们也可以使用这种方法来避免训练机群给附近的存储资源造成过大的压力。


    不同的服务在离线训练期间使用的数据量有很大的差别。几乎所有服务的训练数据集