大家好,欢迎大家参加我们今天的分享我是王方池,来自VMAIR中国研发中心我和来自腾讯的陈家豪,今天想要分享的议题是利用Caft Serving加速联邦学习的模型部署首先,我们请家豪介绍一下什么是联邦学习以及Fate,CoopFate这个相关领域的开源项目之后,我们了解一下这个项目如何借助于Caft Serving将训练好的模型部署上线,提供在线推理服务能力的一个过程最后我们一起看一个完整的端导端的工作流程的demo大家好,我先交给你介绍一下总体的情况好的,非常感谢方池的介绍那么我是陈家豪目前是腾讯CSIG安全部门下的工程师也是在做联邦学习这一块那么接下来由我来为大家简单介绍一下什么是联邦学习那么,人工智能的成功很大程度上是依赖于数据的数量和质量来训练模型但是随着隐私保护法律的完善现在公司和组织之间不能直接贡献数据的因为这是一个违法的行为这势必会给人工智能的含义带来一定的影响那么联邦学习呢就是在这个达贝子女子下诞生联邦学习主要的目的就是自律意义在建模同时也能保证数据不外协右边呢这个是联邦学习的一些基本概念它首先联邦学习肯定是会有多个参与方的或者是同一个公司里面的不同部门甚至是跨公司唯一一个需要注意点就是说这公司或者部门之间他们的数据是不能直接共享的那么在训练过程中这些数据都是留在各个参与方的本地其中呢但是中间他们会交换一些信息而这些信息也是从某一方发出的时候是经过了加密的那么其他的方会对这些密文进行一些操作或者说一些运算那么但是他在这个运算同时他是不知道密文里面的具体内容等他运算完之后呢他又把这个密文返回给我的发起方发起方呢可以对这些密文有些解密解密之后呢得到的消息其实是跟直接对这些密文进行运算是一样的效果这里面这个上面提到了这个密码学的技术呢我们就叫他我们就把它叫做同态加密这是一个这是联邦学习的一个基本的一个概念接下来我们看看这个比喻这个图的意义就是我们把一样比作成一个模型而我们的草就是各个公式或制物质的一些数据在传统的继续学习模型来看到我们是把不同的草移出他们的草场然后给到了我们这个养吃的传统的继续学习那么对于联邦学习来说呢我们的草是不出我这个农场的而是我们要模型冻起来用让这个羊给冻起来让它去不同的草场那出草然后最后把这个羊羊肥变得可用然后把模型变得可用这就是所谓的数据不动模型冻好接下来我们看一下在联邦学习定义中呢根据数据的不同分布可以分为一下两种了分别是很像联邦学习和重相联邦学习那么很像联邦学习呢也称为样本分区的联邦学习或者同购联邦学习那么17年的时候谷歌提出这个论文就是一个典型的很像的联邦学习它的最主要特征就是它的数据会分布到不同的设备或者是服务器上但是这数据的维度就是它数据的特征维度是一样的在很像联邦学习呢我们可以把这些数据都聚合起来就相当于把这个数据的样本样本数量样本空间给扩充了来获得一个更好的模型而另外一种呢就是我们重相联邦学习重相联邦学习呢它的不同点就是样本的空间是相对固定的但是它特征空间样本的特征空间是不固定比如说我们的电商和我们的银行都有我们个人的一些记录那么他们通过一些身份证或者是手机号可以把我们这个人的信息拼接起来变成一个特征空间更大的样本然后我们能用这个样本来去做训练这就是我们重相的联邦学习两种不同的联邦学习的类型下面是一些案例第一个是通过多家银行进行反洗钱的一个案例这是一个很像的联邦学习的案例不同银行可以联合起来用它们各种数据去训练一个大的模型然后可以把这个模型的授权给其他银行用这样子就能提升他们的反洗钱的这种识别的准确率这是可以看到是通过这种方式大概是可以提高14%的准确率另外一种是小微企业的收信的风险管理这是一个重相联邦学习的案例以往银行给这种小微企业去做贷款是非常依赖于央行的真心报告然后通过联邦学习中向的联邦学习我们可以联合税收、注令等其他机构来对我们的小微企业建议一个更加完整的模型更加准确的模型来提高我们识别的准确率那么我们刚刚已经了解了联邦学习的一个背景接下来我们重点看一下这实现目前在联邦学习领域有几个可用的开源项目例如我们图片上的Fate、PyShift除此之外还有PyShift、Tenso、FL等其他联邦学习的框架但是其中Fate项目它是最适合含月的目前来说是最完善的一个项目Youtube手上它是一个开源并且是Linux基军会下的一个非常活跃的项目它同时支持重相和横向的联邦学习而且它的算法是可以直接开箱寄用的不需要当然也可以自己去做一些定制但是它已经内置了非常多算法直接就拿来用了而且更多右边这个是它的一个架构图这是它的FateFloat是它一个我们从底下开始底下它是支出各种存储还有各种通购或依购的这种计算的模块然后它还有专门的通信模块然后还有支持Eclo字眼或者是Spark的这种分布式的计算的模块Faderity ML就是它所有的算法包的这么一个组件FateFloat是一个调度任务的一个组件FateFloat是一个在线推理的组件FateFloat就是一个用于展示我们的训练的一些就是做一些训练可视化的一个组件更多的详情呢大家可以参考一下这个github的ripple前面提到的Faderity ML这是Faderity ML里面封装的一些可以直接开箱寄用的算法那底下有一些NPC的比如说同态加密还有Secure Serial就是密密分享这些算法然后在此之上它是做还有一些重相的或者是重相的或者很像的联邦学习的一些算法比如说逻辑回归先请回归然后这些数模型的这些算法这些组织直接可以拿来用更多详情呢也请大家可以参考一下前面提到的githubripple那么正如我们前面提到的Fate它是一个非常复杂的分布式系统它有很多个组件和服务组成这给我们的管理运为带来的一些挑战但是为了应对这挑战我们还有另外一个项目叫做cube fate它使用运运声的技术去管理我们的联邦学习负载以及我们的Fate继续的在cube fate的目前它是支持两个不同的back end不同的后端第一个是面向于生产面向于测试环境的doc composedoc compose它可以很快的提一套我们的Fate测试环境当然有小一点的生产环境也是可以用的除此之外我们还有面向生产环境的后端就是我们的cube netis我们可以通过cube fate很快速的我们可以通过cube fate因为基于cube netis我们可以方便地去运为我们的Fate继续其中包括我们的升级 降级还有扩容 说容以及我们的课室画它有很多的它有很多的那些字标都可以通过cube fate去追踪那么这是cube fate的这个项目地址欢迎大家来欢迎大家来使用那么我的这一部分呢就到尾声了所以做一个总结吧就是联邦学习它是一种继续学习的方式去训练一个模型在各个参与方之间它可以训练一个模型但是又这同时又不暴露各个参与方的一些数据有联邦学习的两种类型按照数据分布可以分为重相联邦学习和很像联邦学习然后fate是一个联邦学习的一个项目它是一个生产合用并且开源的那么cube fate呢也是一个开源项目它可以减化我们的联邦学习负载的管理好的 我在这一部分已经分享结束下面呢我们有请方驰继续分享Fate和keyf serving的一些结合谢谢大家好的 谢谢大家好我们了解了联邦学习以及这个领域的fate和cube fate的项目我们知道对于一个积蓄学习项目来说训练得到一个模型并不是结束训练之后更重要的是我们需要将模型部署基于模型对新数据提供预测推理的服务并最终进行业务决策对在联邦学习中也不例外那么我们一起看一下联邦学习特别是fate联邦学习这个领域呢目前有哪些的一个功能所谓推理服务也有不同的类型或者说表现形式一种是离线批量的处理一般是一部对大批量的数据进行一个处理在fate中我们可以向提交训练任务一样向fate系统提交一个预测类型的任务fate会使用历史上已经训练好的模型对当前数据进行一个预测还有一种类型是建立一个在线推理的服务以API的形式提供比较实实的调用请求和响应一般来说是同步的而且响应时间应该尽可能的短之前家豪提到了联邦学习分为横向和纵向的不同类型纵向训练的模型因为数据的维度分布在多个不同的参与方因此进行推理的时候也需要多方进行一个联邦的预测对此Fate有一个叫做Fate Serving的字项目来能够帮助我们完成相当的一个功能而对于横向的模型其实之前并没有一个很好的支持那么今天就是分享一下我们为此所做的一些工作那么如果我们想要开发这样一个推理服务还要能用到生产环境的话需要注意并解决的哪些问题呢这里列出了我们需要支持一个协议的定义支持模型的蓄力化 反蓄力化性能的一个监控包括挥度 发布 认证 授权等等的一个功能同时考虑到运为方面的需求我们又要将服务部署到K8S上的话又需要熟悉K8S相关的一些内容对于机器学习的工程师或者说数据科学家来说掌握这些内容都需要花费不少的精力而且也会遇到各种各样的一些不同的困难我们注意到的是Cool Flow社区它的一个CAP-Serving项目能够很好的帮助我们这方面的很多问题加速我们整个部署上线的一个流程我们进一步看一下Cool FlowCool Flow被称为K8S上继续学习的工具箱它提供了一系列的项目和服务包括Central Dashboard UI包括了Notebook Service的一个管理包括了一个端道端的Pipeline项目包括了Kative 这个潮惨数调优的项目以及发起各种trainingtraining operator的这种一系列的项目还有我们今天所要讲的CAP-Serving这个在线推理服务的一个平台这个项目当然CAP-Coop Flow还有像Farron, Metadata等等各种的子项目来够帮助人们完成继续学习这个环节中各个不同的一个任务我们进一步看一下CAP-ServingCAP-Serving是依赖和利用已经非常流行的一些项目包括Kinity和East Tier来提供一个在线的在Kubernetes上的Service的推理服务同时提供很多满足生产环境需求的功能包括借助于Kinity完成基于请求的自动扩展进行确发布等等同时它提供了包括TransformerExplaner, Logger等等机制能够灵活处理一个预测请求很重要的一点是CAP-Serving也支持多的不同的继续学习的框架另外它的核心是一个叫做Inference Service的这样一个CRD这里我练出了三个不同的继续学习框架的推理服务在这上面CR的一个定义可以看到是非常的简单和一致的基本就是指定我们的继续学习框架已经指定具体的模型的存放的URL就可以了但同时CR也支持比较复杂的和系列的配置来满足我们不同的需求刚才我们提到了CAP-Serving它的一个核心是这个叫做Inference Service的CRD让我们进一步看一下它的工作流程当我们需要创建这样一个在线推理服务时我们相机群提交这样一个CR的定义那之后CAP-Serving的Controller将会根据我们的定义创建对应的K-Native以及Esteo之中的资源那之后真正用于服务预测请求的这个炮的将会被创建出来在这个过程中CAP-Serving的Webhook将会注入一个引力的Container这里叫做Storage Initializer它会根据我们CR中所定义的模型的位置将模型下载并存入适当的目录之中同时Port中还有来自K-Native的一个Q-Proxy容器它会向K-Native上报一系列的Metrics给我们进行一个自动的缩扣容当然最后是真正用于处理预测请求的服务所在的容器了这里叫做Model Server那这些蓝线的部分我们可以理解为是它的一个Control Plan那红线的部分就是用它的Data Plan一个真正的预测的请求经过我们继续内吼 继续外的网关最后被路由到了Model Server那它最后再调用Unit Container准备好的模型得到的一个预测的结果并把结果返回那这就是Caft Serving它的一个核心CR的一个最基本的工作流程OK 那现在我们有了Caft Serving这个比较不错的支持多个框架的一个在前推理服务的平台那我们联邦学习特别是Fate橫向联邦学习的模型如何与Caft Serving相结合呢Fate橫向联邦学习当前支持的算法包括了神经网络 逻辑回归 决策书这些他们的一个格式可以理解为是Fate私有的一种格式那Caft Serving当前并没有直接支持的这种进向或者说程序但是我们注意到橫向联邦学习的一个特点是一方训练后得到的模型它是带有完整的模型的伪度的信息的在做预测的时候其实并不需要其他方法再次的一个参与所以从这个角度讲橫向联邦学习的模型与一般的单方继续学习的模型并没有本质的区别所以如果我们能够将Fate得到的模型转化为Caft Serving已经支持的继续学习框架的模型那就可以像部署那些模型一样部署到Caft Serving这种去了那我们也确实是这么做的我们希望的是Fate的使用者不需要进行复杂的配置或者写额外的code就能够完成整个这个一套的流程所以我们将这个逻辑实现在了Fate的核心的服务之中去那第一步就是模型的转换这里Fate实现了一系列的converter这里我们列出了Fate当前支持的橫向联邦学习的算法以及我们想转换的目标的极其学习的框架包括Second LearnTensor FlowLine的GBM这些那当我们得到了转换后的模型之后就需要将它们进行部署了这里Fate实现了一系列的deployer负责向Caft Serving创建刚才提到的Infinite Serving这个资源这里有一个在Caft Serving的矿头中有一个不太齐验但却十分重要的组件那就是存放模型或者说模型SS的存储当前Caft Serving支持了包括S3 GCS普通的HTTP这些那我们首先支持的是MEMO这个运源声的而且是与S3兼容的这一个存储服务那我们实现的这一系列deployer它的首要的工作就是把模型对象打包并上传到MEMO之中去由于不同的极其学习框架它对模型文件的格式的要求是不一样的比如说TouchServe希望我们将拍Touch的模型对象打包成MAR文件并且配有一个Properties这个描述文件所以不同的deployer需要完成这些不同的继续继续框架的打包工作以及将它们上传到MEMO之中去那之后呢这就可以向Caft Serving创建Infinite Serves了当然同时还需要创建必要的Secret Serves account的这些资源那整个这个些过程都是由不同的deployer来完成的那至此呢一个Caft Serving的在线的推理服务应该就已经运行起来了OK 那接下来我们看一个完整的这样一个demo我们首先完成一个横向联邦学习的训练然后我们将得到的模型进行一个转换并且部署到Caft Serving之中去最后呢我们去测试一下我们刚刚创建的这个在线的推理服务这是我们部署的联邦学习Fate的一套环境在一个K8SG讯中呢我们安装了一套Fate的系统作为第一方在另外一个K8SG讯中我们同样安装了一套Fate的系统作为第二方那这里我们模拟的是一个两方的联邦学习的一个场景两个Fate的系统都是通过酷不费的项目在两个不同的K8SG讯中安装的同样我们在第一方的集讯中我们也安装了一套Caft Serving的系统Caft Serving其实可以安装在其他的集讯比如说一个第三方的集讯中这里我们为了演示的方便呢就继续附用了第一方所在的集群可以看到这里有一个Caft Serving它的Controller还有一个用于UI显示的一个外部的应用我们可以先看一下这个外部应用的界面那Caft Serving如果是跟Cool Flow整体一套安装下来的话呢那这个页面作为一个紫页面也可以在Cool Flow的Central Dashboard的UI中看到可以看到现在这里是没有任何的推理服务在运行的那接下来我们首先先要创建一个联邦学习的训练任务这里我们使用的是KubbFate在安装Fate系统时一并会安装的一个Drupter Notebook的一个服务这也是一般来说继续学习工程师或者说数据科学家常用的一个界面这里我们使用的是Fate提供的一套叫Pipeline SDK的接口所谓的Pipeline指的是包括数据的读入预处理特征工程 具体算法等等一系列的组件串起来形成了一个Pipeline这样一个任务这里我们定义了各个组件的内容包括我们的核心算法是一个简单的多分类的神经网络的一个结构我们将所有组件定义好之后我们同样通过Pipeline相应的接口将这个任务提交到了Fate的核心服务中去这个任务就应该已经跑起来了任务跑起来之后我们可以看一下Fate提供的可实化页面里相应任务的状态在第一方这里可以看到任务在运行同样在第二方的页面中可以看到这个任务也在运行之中这里我们使用的是一个简单的多分类的神经网络的一个模型然后我们的数据量也比较小所以大概三分钟五分钟这个任务就可以完成这里我们快进一下现在任务应该就快要训练完成了OK 现在任务已经完成了那我们得到了一个训练好的一个神经网络的模型那接下来我们需要将模型进行刚才提到的一个转换这里我们使用的是Fate另外提供的一个命令行的界面叫做Flow它通过向Fate的核心服务发送API的请求完成相应的功能这里请求的主要内容配置包括模型的一些信息以及其他一些基本信息最后我们调用Flow命令的相应自命令发送给Fate的核心服务那通过这个返回的结果我们可以看到这个转换已经完成了我们得到了一个TensorFlow框架下的StaveModel格式的模型那对于很多使用者来说到这一步其实已经够了它可以使用Fate提供的其他接口将模型下载到本地或者进行一个本地的预测或者进行一个本地的模型的进一步的调试那我们想要做的是将模型部署到CalfServing中去这里我们同样是继续使用Flow这个接口那需要提供的参数就更复杂了一些包括指定服务的名字还有同样模型的一些基本信息以及我们所要部署到的K8S集群中的一个访问的信息比如说一个CoopConfig文件当然如果咱们的Fate的核心服务是通过CoopFate来部署的另外所在的K8S集群与KPFServing所在的集群也是同一个集群的话那这里也可以不提供在确设情况下CoopFate会将相应的权限以及相应的配置与配Fate所在的核心的服务相关联能够完成在确设情况下相应资源的创建同样我们就要提供一些存储比如说密爱欧的一个基本信息那我们最后调用Flow的另外一个自命令要求Fate的核心程序将这个模型进行一个部署通过返回的职务我们可以看到这个部署应该已经部署上去了然后我们可以拿到这个部署的服务的一些基本的信息我们可以先去看一下面误的这个界面我们刚刚部署打包上传的这个模型应该已经防到了面误的相应的这个存储的位置中是Cybermodel格式相应的一些文件然后我们回到刚才看到的外部的UI的界面可以看到这里我们刚刚创建的推理服务已经在这里运行着了我们点进去可以看到一些更细节的一些信息包括它的对外访问的一些提供服务的一些接口和UI2的信息以及我们可以通过Metrix台部看到基于Gorfana提供了一些图表的一些Metrix那接下来我们想要做的是测试一下我们刚刚部署上线的推理服务我们先载入我们测试用的数据机然后我们先看一下这个数据机的大概的内容它应该是有100多条数据然后每条数据应该是一个18维的一个特征然后我们构建我们具体的预测请求包括指定服务的名字然后是用Esteo Ingress它的地址构建UIL以及构建最后请求的一个负载那我们最后得到的返回的结果就是刚刚部署的推理服务它返回的一个预测结果了可以看到多分类的一个返回的预测结果对于每一条数据来说就是各个分类的一个分数那我们将这个结果处理一下之后与刚才的测试机的ID合在一起看一下这里看到的就是对每一条数据它的一个分类的预测的一个结果的情况这里就是一个完整的从发起训练到模型的转换到部署上线以及最后使用的一个完整的流程可以看到作为一个使用者我不需要了解太多的基础设施相应的领域知识或者进行比较复杂的配置就可以完成一个端道端的整个里的一套流程OK 那回到我们下一步的计划在早些的时候Caft Serving刚刚发布了它最新的一个版本其中重大的一个改变是它改名叫做了K-Serve在GitHub上项目也有了一个自己独立的一个组织这也代表着项目进一步的一个成熟在其中比较重要的几个新功能包括随着这个改名它的SDK API Group的名字也都发生了更新另外它提供了一种所谓ROW的部署模式可以不依赖于K-Native和E-Sphere进行部署那简化了一个部署的流程最后也有新的这种支持多模型不推理的一种新的支持方式叫ModelMesh加入了K-Serve的项目而对于我们Fate和CoolFate的项目来说我们接下来会进一步的与K-Serve进行一个继承包括Converter和Deployer支持更多的框架和存储类型以及我们也在看能否暴露出来更多的可配置的项目比如说POD的资源请求等等来支持更多的部署需求最后我们知道Fate的任务本身是一个Pipeline我们也希望将Converter和Deployer的逻辑集成成为一个Pipeline的组件这样当用户发起训练任务的时候就可以直接增加一个部署的组件在训练完成之后整个流程会自动将模型部署上线这也是CoolFlow的Pipeline项目目前已经支持的一种操作总之Fate和CoolFate的项目会继续借助CoolFlow和K-Serve的平台和社区来更好的满足机器学习领域特别是联邦学习领域的各种需求以上就是我们想要分享的一个全部的内容谢谢 谢谢大家