开发者学堂课程【PAL 平台学习路线:机器学习入门到应用:PAI 联邦学习服务搭建教程】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/855/detail/14103
PAI 联邦学习服务搭建教程
内容介绍:
一. PAI 联邦学习方案
二.方案技术架构图
三.集群搭建与服务部署
四.示例:纵向逻辑回归
一. PAI 联邦学习方案
PAI 联邦学习方案采用 FATE 开源的框架, FAFE 框架为首个工业级别联邦学习系统,可以有效的帮助多个机构在符合数据安全和政府法规的前提下,进行数据使用和联合建模,同时 FATE 支持多种主流算法,多种多方安全计算协议以及友好的跨域交互信息管理方案,解决了联邦体系信息安全审核难的问题。基于 FATE 的框架,PAI 联邦学习方案支持多种核心算法功能,其中包括数据统计、特征工程、浅层算法、深度学习算法、评估算法等。跨平台作为数据使用方和数据提供方中间的一个环节,承担了授权审核的作用,平台会接受数据使用方发送的集训链接、数据以及训练任务的申请。审核通过和 PAI 平台会下发任务到数据提供方进行下一步操作。PAI 平台的使用流程首先从控制台获得所需要的镜像,平台会提供镜像地址,在向管控发送集群构建许可并获取服务端口号,之后进行训练任务的构建和提交,最后进行模型的评估和上线。
二.方案技术架构图
PAI 联邦学习方案技术架构,采用两距离直接采用点对点的通信,同时基于i云及 ACK 集群部署使用费服务,本图展示了 PAI 联邦学习模型的训练和预测是分别基于 PAI Fate 联邦学习建模镜像以及模型预测镜像,且在训练和预测的过程中,数据使用方和数据提供方分别进行模型计算的中间结果以及模型预测过程交换
三.集群搭建与服务部署
集群搭建与实验环境的部署,体系要基于搭建阿里云 ACK 进行部署使用被服务,并使用比如说像容器管理联邦体系的负载,同时 KubeFATE 可以让联邦体系任务在公有云,基有云以及混合云进行运行。 KubeFATE 支持两种方式来部署,第一个是 Docker Compose ,适用于快速部署实验开发环境。第二个是 binarys 适用于实际的生产环境。
进行实际的操作演示,第一步首先创建两个集群,分别是 guest 集群和 host 集群,打开阿里云 Kubernetes 页面,在容器服务平台中点击创建集群。选取 ACK 托管版,给集群赋名 Fate-guest ,再选取虚拟交换机,下一步进行 worker 配置,在实际规格中选择 g5ne 通用网络增强版本, CPU 选择64,内存选择256G,同时若需要使用CPU 就选择 CPU 计算型 gn6i ,在组件配置和确认配置选择默认信息配置,下一步进行创建集群,创建完集群回到集群列表查看 fate-guest 集群的集群状态,同时可创建 fate-host 集群便于以后操作,在两个集群分别创建好之后,需要分别给 guest 集群和 host 集群中的一个 node 绑定弹性网 IP 用来实现两个集群之间的通信。选择节点管理中的节点,选择第一个节点,绑定弹性 IP ,选择其中的一个弹性公网进行绑定。
第二步在远程集群之后,使用 over fate 完成集群部署,首先登陆 ACK 集群且下载 over fate ,用 yum-y install 指令下载,下载完之后对其进行克隆。再安装 goll 便利环境,进入黑白s编译进制二进制文件。
第三步编译完成后,需要将 ACK 集群的控制台的信息复制到 confate 进行保存。
创建一个文件夹,将链接信息复制到文件里进行保存
配置完成后可用计算机访问集群。
第四步创建 k8sroll 其他资源,使用 Kubefate 进行资源的创
第五步设置域名解析,在 ACK 集群上需要通过内网访问。先使用 Kubectl get svc -n 获得 IP 地址,可以看到对应地址为172.16,之后打开 etc 文件夹后的 hosts 文件,将 IP 的地址以及域名的预设标记在文件下
第六步创建over-fate serves 用来创建管理集群,使用 over-control aply +配置文件的命令来创建 serves 。之后验证如下命令判断是否启用成功,如果出现两行信息则表示启用成功。
第七步用来修改文件信息部署训练集群,通过 ls 的方式来查看集群的部署状态,使用 Kubectl create namespace fate-10002 的命名空间,创建完成后需要修改 fate-10002 的压缩文件信息,文件所对应的是 host 集群方的训练集群配置,因为每一方分别有训练集群配置以及预测集群配置,对于训练集群配置来说,需要填对方集群的公网或者专信的 IP ,同时自身可以填k8局域网的节点 IP ,对于预测集群配置,即可填写任意k8局域网的 IP ,这里所有信息都保持了 IP 地址的对应。
在这个配置中,使用 Kubefate cluster install 来对集群的配置进行分析,之后可以使用 cluster ls 的指令来看到当前集群的状态。
根据上述说明,在 guest 和 host 集群上对训练集群以及预测集群进行部署,在所有部署完成之后,可使用两个指令分别查看集群状态以及集群内的各个点的状态。如果资源为空的,就需要删除并重新部署,否则将影响后续的环境。
在两个集群部署完成之后使用一个指令来检验两个集群之间的通信,使用 Kubectl get pod 指令来获取序列号,获取到序列号后进入 python pod 进入之后可执行 toy_example 来测试通信是否正常,其中10001表示 guest id 为发起者,10002表示 host id 为提供方,若执行成功则表示通信正常,反之则需要排查标点符号是否添加正常。通过日志也可看出通信为正常
四.示例:纵向逻辑回归
示例:纵向逻辑回归训练与预测
简要介绍流程,第一步需要进行数据准备,包括定义数据源 ,表明,以及数据的上传,提交训练任务,在任务执行中通过 FATE Board 查看运行状态,第二步在模型预测之前需要进行模型加载、绑定以及访问模型服务,并查看模型预测结果。
实际操作过程中,首先需要分别对 host 和 guest 集群进行设置,在 host 上需先上传数据,上传数据的配置文件在 upload_host.joon 里并进入到这个 文件中,在这个文件中看到定义这个文件的参数,比较重要的是数据的文件名称、命名空间以及数据表明,可看到本次数据文件名称为 breast_hetero_host_csv 这个文件,数据表明是 breast_hetero_host ,而命名空间是 experiment ,如果需要在其他的文件中跟换数据源的情况下是对这些参数进行修改。
本次不进行修改但会重新上传一遍。这里显示数据已经被上传过了,所以需要添加 -drop 1 的参数来重新上传。
同理 guest 方数据同此处理即可。在数据上传完成之后,需对 guest 机器上对两个文件的配置内容进行修改和整理,分别是 job_conf 和 dsl 文件, dsl 文件表明模型任务的工作流定义,而 job_conf 是对每个组件的设置的参数。由于此次对参数配置已经完成,会对其中重要的参数进行说明,首先是 job_conf 文件,可以从中看到 role 文件中的参数里面定义了 guest 、 host 和 arbiter 的 id ,若后续想改为官方数据源的情况,可以在此进行 id 的扩展以及数据源配置的定义,在 reader_table 下面可以看到对应数据的命名空间以及表明。
其次是 dls 文件,首先是以数据读取环节,之后是特征的求交以及特征的分箱、特征的选择 lr 的模型以及模型的评估。在训练完成之后,可以在可视化界面上看到一一对应的文件,这些组件可以通过工程师的需求进行增减,便于操作。
在完成任务的数据以及任务的配置之后进行数据的提交,由于1.5.0版本和1.6.0版本的任务提交指令略有不同,此次暂时采用1.5.0版本任务提交指令,进行任务提交的指令当出现 success 指令的时候则表示提交成功。其中 model_id 和model_version 需要记录下来,在以后的某些部署、预测中需要用到。
此时打开 FATE Board 的界面,可以看到任务正在被执行, jobid 最后四位是4235,可找到相应的任务,可以看到任务正在被执行,还可以点击查看之前被提交的任务执行情况,等待一段时间看到本任务的执行情况
任务已经执行完成,每个组件对应的是 dsl 里面的 conporment ,同时每个组件可以查看到参数以及输出的结果,比如在 lr 模型里面看到每个特征对应的权重,在评估的组件中,可以看到模型评估的结果,这个为 guest 方对应的结果,同时也可以看 host 方对应的结果。
在模型训练完成之后进行预测阶段,这里采用1.6.0版本的预测模式,首先记录下 model_id 和model_version 号。在部署阶段使用 flow model deploy –model\-id 进行执行,此时会产生新的 model id 和 version 号,会在后续的加载和绑定中用到。
之后进行到模型加载阶段,根据部署阶段产生的数值进行修改。因为之前已做过一次修改,所以此时产生的数值为一一对应的。会在进行一次模型加载的指令,出现 success 字样说明模型加载成功
进行模型绑定阶段,同样对部署阶段产生的模型 id 和version 进行修改,目前看到 model_id 是一致的只需要修改 model_version 即可。修改完成执行 flow model bind 的指令,当出现 service id is test 字样说明模型 id 已经绑定成功。
访问模型服务,执行 python 脚本。 这个 text_infence 是包含了 guest 方数据特征的一个请求,所以执行脚本。执行之后会出现一个预测结果的响应,在 date score 中为预测结果。
此时一个教程已经全部完成,这里给出的只是一个简单的逻辑回归的例子,与此还提供了更高的数据算法,用户可以更改数据源以及工作流的配置,来进行相应的算法。