京东超大规模联邦学习探索实践
分享嘉宾:杜宝坤 京东 资深算法专家
编辑整理:侯雅新
出品平台:DataFunTalk
导读: 对于AI飞速发展的今天来说,大规模的多维度、高质量的数据是其成功的关键要素,也是制约其进一步发展的重要瓶颈。随着大家对数据的重要性与隐私性的认知程度的不断提升,跨组织的数据的合作越来越谨慎,相关隐私法律法规也陆续出台 ( GDPR ),这样就造成了大量了的数据孤岛,无法充分的利用数据进行分析、决策,严重制约了AI的发展。联邦学习在保证数据隐私安全及合法合规的基础上,打破数据孤岛,实现共同建模,共创共赢,将成为未来AI发展的一个重要方向,9N-FL作为联邦学习的整体开源解决方案,也会在未来发挥越来越大的作用。
本文将通过了解联邦学习的原理以及解决方案9N-FL,并且结合本公司的业务,进行应用,为大分享如何开辟新的业务模式与增长点。
01 背景
基于数据孤岛的考量而提出联邦学习,数据孤岛的产生有以下两方面的原因:
- 数据重要性:数据是AI的石油,加速了AI的高速发展,同时多维度高质量的数据是制约其进一步发展的瓶颈。随着各个组织对于数据重视程度的不断提升,跨组织以及组织内部不同部门之间的数据合作将变得越来越谨慎,大量数据以孤岛的形式存在。
- 数据隐私法:鉴于数据隐私的重要性,国内外对于数据的保护意识逐步加强。2018年欧盟发布了《通用数据保护条例》 ( GDPR ),我国国家互联网信息办公室起草了《数据安全管理办法 ( 征求意见稿 ) 》,因此数据在安全合规的前提下自由流动成了大势所趋。这些法律法规的出台,不同程度的对人工智能传统处理数据的方式提出了更多的挑战。
上述都限制了数据的流动,造成了大量信息孤岛。如右图所示,主要有两种方式造成信息孤岛:第一是企业获得用户信息越来越难;第二是企业之间数据不共享。
02 联邦学习概述
1. 联邦学习概述
信息孤岛的解决方案是联邦学习。2016年,谷歌提出在安卓手机用户中进行联邦学习,解决个人用户数据在终端上的隐私问题,它可以不上传用户隐私数据,在终端上进行模型训练。后续众多业内研究机构和组织对联邦学习投入了极大的热情,研究了更加安全、使用范围更广的联邦学习机制,将联邦学习应用到更加广阔的领域。
联邦学习的本质是基于数据隐私保护的一种分布式机器学习技术或机器学习框架。联邦学习的目标是在保证数据隐私安全及合法合规的基础上,在模型无损的前提实现共同建模,提升AI模型的效果。
2. 联邦学习的特征
联邦学习框架有以下四个特征:
- 两个或以上两个以上参与方,共同构建机器学习模型。
- 在模型训练过程中,每个参与方数据都不会离开本地,也就是它的原始特征不会离开本地。在进行联合训练的时候,其实是把分布式平台的计算资源放到多家公司的机房里分开部署,而不是把数据集中起来放到一个地方进行训练。
- 模型的相关信息以加密方式传输。因为在模型训练的时候,需要传递梯度这些中间结果,所有的中间结果是通过加密的方式进行传输,并且保证任何参与方都不能推断出其他方的原始数据。
- 联邦学习模型的性能要充分逼近理想模型的性能。所有数据集中在一起搭建的模型和联邦学习这种跨域进行训练的模型的性能是比较接近的,右侧是性能逼近的公式。
3. 联邦学习的分类
联邦学习主要分为三大类:横向联邦学习、纵向联邦学习、联邦迁移学习,联邦迁移学习用的稍微少一些。
- 横向联邦学习:比如刚才介绍的谷歌输入法案例,就是一个比较典型的横向联邦学习的案例。它的特点是各个参与方数据的特征维度是相同的,但是样本ID不同。适用于银行以及手机终端边缘计算等同质数据场景。
- 纵向联邦学习:它的特点是数据样本ID基本相同,特征不同。比如两个数据集的用户大规模重叠,但它们的特征不一样。
9N-FL主要解决的是纵向联邦学习的问题。
4. 联邦学习的架构
如图是联邦学习的架构,主要简单介绍了横向联邦学习架构和纵向联邦学习架构。
03 京东开源联邦学习解决方案-9NFL
1. 9N-FL总体架构
项目背景:我们部门主要是做广告营销,在京东站外的一些营销场景中有很多用户,对于我们来说我们并不认识,比如在抖音、快手这些渠道投放广告的时候,这个用户我们不认识,但我们又想给他都放广告,对于头条和快手来说,他们不可能把用户的原始数据给我们。我们就想了一个办法,可以做一下联邦学习,这样对于我们不认识的用户,也可以去进行广告竞拍。
项目大概是在2019年11月份进行的开发,2020上半年进行了正式的上线,并且在2020年9月份完成了正式的对外开源。9N-FL平台主要包含以下几个重要的部分:
- 多任务跨域调度
- 跨域高性能网络代理
- 大规模样本匹配
- 大规模跨域联合训练
- 模型分层级加密
主要创新点:
- 业界前沿技术自主研发:从0到1开发设计的,实现了从大规模样本匹配到模型训练/预测的完整解决方案。
- 营销推荐领域技术落地:支持百亿规模的样本和百T容量的数据,并且在电商领域进行了业务落地,取得了不错的落地效果。
- 复杂场景下平台演进:整个场景比较复杂,涉及到跨域跨网,在这种复杂多变的环境下,要进行联合训练,难度还是比较大的。
取得的成绩:自上线以来,九数联邦学习平台(9N-FL)在取得了较好业务成绩的同时,也经受住了业务大数据、大算力的考验。在与媒体进行京东广告投放业务场景中,基于媒体侧大量的数据(例如,媒体兴趣标签)、京东侧大量的用户商业兴趣及商品标签数据,双方使用联邦学习平台联合建模,来优化广告的触发召回、CTR/CVR模型等多个模块,最终成功上线,取得了大概15%的收入提升。
2. 9N-FL项目时间轴
这个是9N-FL的一个时间轴,2017和2018年做联邦学习的比较多,像微众银行、腾讯、百度、阿里,它们相对来说比较早。京东是在2019年11月正式开始进行联邦学习平台的开发,当时是基于业务为出发点进行开发;在2020年4月份,完成了平台的开发落地,双方开始联合建模;在2020年中做出了业务效果,并且进行了上线。在2020年9月,进行了平台的开源,在github上搜9N-FL就可以搜到。
3. 京东开源联邦学习解决方案9N-FL
对于联邦学习来说,它是一个全新的多交叉的领域知识,主要需要以下几个方面的能力:
- 数据隐私:同态加密、可信计算、秘密分享、混淆电路为联邦学习奠定了一个坚实的基础。
- 抽象异构资源限制:联邦学习不光要构建在不同公司,两个公司的技术栈、技术能力、基础设施都不一样,可以用云平台K8S进行一些抽象,另外还需要跨网,比如在联合训练的过程中、在大规模样本匹配中,需要大量跨网的交互,而且整个交互过程非常复杂、异常情况比较多。我们抽象了一些网络代理,自研了基于应用层的一些高效的网络协议。
- 高性能、高可靠:高效的网络协议、可靠的容错机制 failover。比如在联合训练过程中,两边集群可能是若干台机器,但如果有一台机器宕机,整个模型训练就停止了,需要重新进行训练。最开始我们有些优化没有做的很完整,模型训练时间较长,大概是七八天,在fail的情况下重新训练就有很大的问题,整个研发进度无法保障。
- 联合建模:联邦学习平台对模型结构不做限制。在联邦学习过程中,大家都是独立建模,也就是我和另一家公司在建模的过程中,我们可以互不感知对方的模型结构,只关注上层连接之后的反向梯度的传输。
联邦学习是一个跨多个领域的技术,它包含了大数据、实时计算、云平台、机器学习、深度学习、高并发架构、密码学等方面的一些知识,整体要求比较高。
4. 9N-FL具体工作
具体工作分为以下几个方面:
- 组件化:平台的一些策略、一些组件都是可以任意组合。比如有的公司数据体量比较大,可以用hadoop做数据存储;有的公司数据体量比较小,可能是一个本地文件,也可能是数据库这种方式,都可以支持。9N-FL平台可以从大、中、小方面进行一个全方位的覆盖,另外可支持策略的热插拔。
- 高可靠:第一是虚拟化技术,这种虚拟化技术有底层团队在维护。第二是failover机制,比如节点故障的恢复。第三是高效、高容错的网络协议。
- 大数据、大算力:拥有横向水平扩展能力,整个系统支持分布式以及大数据的一些外围工具:HDFS、分布式文件系统、实时数据kafka等。
- 高性能:自研的分布式异步框架、高效自研网络传输应用协议,实现尽可能的并发。大部分模块采用C++来编写,包括训练器,训练器基于tensorflow,并没有重复造轮子。
5. 9N-FL联邦学习模型
整体架构图中公司A和公司B的数据是无法打通的,其实这就是一个超大规模的样本匹配工作,为下一步建模做准备。在传统的联邦学习过程中,一条样本就是一个完整的输入,中间可能会进行拆图,没有在最开始的输入过程中拆,只是在中间的某一步进行了拆图。但是联邦学习从纵向上来看,把一个用户的样本数据一下子拆成了两部分,联邦学习的基础就是一个超大规模样本匹配的过程。接着往上就是大规模跨域联合建模,蓝色和紫色模型互不感知,只是在上层进行了数据连接,算一下loss作为反向梯度传输。
联邦学习主要解决数据跨域问题,保证数据不出域,也就是计算资源向数据资源靠拢,保证数据安全隐私、安全合规。联邦学习之前,只能用左边的一路或者右边的一路数据进行建模,其实模型能力也是可以的,但两个数据如果结合在一起,从直观或者理论上来说,这个模型能力肯定是有一些显著的增强,我们通过实践证明了这一点。
我们将9N-FL的应用场景瞄准了大数据营销这块,当然金融领域也在考虑范畴之内。金融对数据隐私性要求比较高,但对实时性要求不高,所以一般采用加密或比较简单的模型,比如LR模型或者树模型,它的数据量也比较小,大概几十万,离线可能跑几个小时。大数据营销这块的场景就比较多。
6. 9N-FL分层架构
- 基础资源层:包括基础硬件资源、网络
- 算计资源层:改造TensorFlow、op、加密模块
- 计算调度层:Coordinator、Sample Matching、Union Training
- UI层:待完善
7. 9N-FL总体架构
9N-FL的整体架构图是一个对称的结构,服务部署在两家公司,每家公司都有一套完整的服务。比如Coordinator:它是整个系统的总控;Proxy:涉及到跨网,可以理解成gateway;Resource Manager:资源控制;Trainer:训练器。
详细过程:Coordinator分为leader、follower两个角色。我们平时在机器学习平台训练的时候,只要开启训练就好,因为不涉及跟别人的协调,但是对于联邦学习来说,开启训练的时候涉及一个协调的问题,谁是主导者谁是跟随者?主导发起训练的就是主导者,比如图的左侧是主导者,它就是一个leader,右侧就是跟随者follower。所有的调度单元都是基于一个任务来调度,整个系统支持多任务的调度。首先左侧的Coordinator通知对端,我要进行训练,并且告诉对端我的样本meta信息,包含样本 ( 比如ctr、cvr样本 ) 信息、时间信息,两边还有一些协商,就是针对这次任务,我要开启多少个trainer,比如要开启20个,那么两边都开启了20个trainer,但是怎么调度起来呢?联邦学习可以仿照传统的机器学习,也就是现在的样本分了两个训练器,一边消费一半,这种情况下,我把样本拼起来,把训练器拼起来,我们就做了这么一件事儿,把不同的训练器做了个配对。配对完之后就涉及到训练器的协商,左边的训练器会通知右侧训练器,告诉它我在我们这边拿到了一条数据,这个数据的meta信息是什么,同时会告诉对端也去拿相应的文件,两边都把相应文件拉下来之后,相当于做了消费同样文件的动作。这样两边就可以同时进行训练,在训练的过程中,不断的交换这些梯度,把整个模型构建起来。Proxy的作用是路由控制,比如第一个trainer把梯度分发给对端proxy之后,对端proxy知道它是要发给第一个trainer而不是发给第二个trainer。整个proxy是一个无状态的服务,它起到一个gateway的作用,是整个系统对外的暴露。我可能只监听对外的一些端口,会有一些安全措施在里面,里面的服务包括Coordinator、Resource manager、Trainer,它们都是不对外的,保证了数据安全。Trainer主要包含两个动作,一个就是两边取完数据后的协商,另一个就是在训练过程中正向结果的传输和反向梯度的传递。
整体调度:
整体调度这块是整个系统的总控,它控制整个系统的生命周期,比如任务的启动、停止、监控;资源的申请,比如会给trainer申请资源;多任务的并发调度,比如我们进行联邦学习的时候,是和多家公司进行合作,每家公司有不同的训练目标,有的是训练转化的、有的是训练召回的,建模方式可能不太一样,所以说是多任务的并行并发调度。
资源管理:
资源管理用的是K8S。
加密训练:
同态加密:满足密文同态运算性质的加密算法,即数据经过同态加密之后,对密文进行特定的计算,得到的密文计算结果在进行对应的同态解密后的明文等同于对明文数据直接进行相同的计算,实现数据的“可算不可见”。
假如有两个整数A和B,要计算A+B的和C是多少。两个数据对别人是不可见的,将这两个数据拿给第三方计算,�
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek/post/%E4%BA%92%E8%81%94%E7%BD%91/%E4%BA%AC%E4%B8%9C%E8%B6%85%E5%A4%A7%E8%A7%84%E6%A8%A1%E8%81%94%E9%82%A6%E5%AD%A6%E4%B9%A0%E6%8E%A2%E7%B4%A2%E5%AE%9E%E8%B7%B5/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com