联邦学习框架FedML自学----第一篇-----环境搭建

搭建环境

  1. 打开anaconda prompt,创建conda虚拟环境,conda create -n fedml_test python=3.8(FedML0.8.3推荐python3.8)
  2. conda env list列出所有虚拟环境名称,检查是否创建成功;成功后,conda activate fedml_test,激活虚拟环境
  3. 安装fedml,pip install fedml==0.8.3;若出现安装spacy第三包失败,则需要先独立安装spacy,pip install spacy==3.5.4;安装完成后,可以检测fedml是否安装成功;
  4. 若导入fedml时出现 TypeError: 'UUID' object cannot be interpreted as an integer 错误,则需要手动去修改源码,位置:D:\anconda\envs\fedml_test\lib\site-packages\fedml\cli\edge_deployment\client_runner.py(不过,官方似乎已经修复)
  5. 创建source_code文件,点击右键,git bash here(已安装git软件),打开git管理窗口;git init初始化git版本控制,git clone https://github.com/FedML-AI/FedML.git,克隆FedML官方源码;再git checkout tags/v0.8.3,切换到0.8.3版本分支中
  6. 最终文件目录,D盘-->anaconda-->env-->fedml_test(或自定义)-->source_code-->FedML

 FedML是官方提供的源码,里面含有些许的案例。个人体会:联邦学习是2016年左右提出的概念,在2020年开始火起来(论文数量从2020年多起来)。随之而来的,是一些联邦学习的开源框架和工业级框架的出现,开源框架中,我使用过pysyft,FedML,工业级的框架是FATE(上手难度很高)。pysyft相对FedML来说更易上手,但是整体效果不如FedML,不过使用过后,会发现两者的核心设计理念似乎都差不多。FedML是一家公司fedml.ai的产品,但是现今还没有发布比较完整有体系的FedML的使用手册(可见其官网),连chatgpt等这些大模型中只是知道有这么个框架,但是语法它们也不知道,所以只能跟着官方内部源码边试错边学。

     学习成果展示

            基于FedML搭建的联邦学习系统,主要模块有联邦算法模块,每个联邦算法先定义客户端和服务端各自的训练、聚合等逻辑,再使用FedAlgorithmFlow,融合客户端和服务端的各个主要功能为算法流;开启联邦学习后,则会根据算法流运行;还有模型模块和工具模块,负责提供出模型框架以及读取数据、处理数据、初始化模型、整理参数构建yaml配置文件等的一些功能的函数;运行模块,则需要确定输入的参数启动算法流等一些逻辑。

            该联邦学习系统,可以通过以python字典的形式输入各参数值,生成yaml文件和参数类完成配置。同时,通过utils,处理传入的数据文件,转换成FedML更倾向的h5文件。有了数据、配置,再通过create_model等模块,生成模型,构造出算法流实例,最后开始运行。

            在FedML官方源码案例中,需要开启一个联邦学习,有着最主要的步骤:

    1. 第一步,init,即检查以及初始化所有运行环境,包括cuda/cpu环境,windows/linux不同系统创建进程的方式,当前cpu使用率等,还会初始化一些基础配置等(我们可以在这一步,去自定义自己的配置初始化逻辑去简化配置流程);
    2. 第二步,生成数据,FedML源码中会提供一些公开数据集,但是如果需要处理自己的私有数据集,需要自定义一些处理数据的函数,以及最后数据呈现的数据结构需要符合FedML框架中所需要的数据结构;
    3. 第三步,生成模型实例,这一步中的模型可以是自定义的模型,那么就需要去定义如何处理好模型中所需要的参数;
    4. 第四步,选择好算法,在FedML中是提供了一些算法的,如果需要自定义,那么也需要根据FedML框架的要求(继承某些类,完成某些抽象类的函数等)去自定义自己的联邦算法,更深一层,还可以定义好算法流(如,先服务端发放公共数据集,再客户端根据公共数据集训练等这种);
    5. 最后一步,通过run(),启动联邦学习

            为了简便众多参数的设置,在联邦学习系统的基础上,我借助django框架,开发联邦学习平台。目的是使用户无需再去关心,繁琐的参数设置算法编写及调试,直接输入参数,选择模型,选择算法之后,平台自动根据算法、模型等生成好项目文件(文件目录结构,自动创建虚拟环境、安装第三方包的bat文件等),同时也会选择好需要的包和文件,生成压缩包,提供给客户端,客户端只需要将压缩包下载到本地、解压、点击创建虚拟环境并安装第三包的bat文件,就会自动完成运行联邦学习所有的环境。点击启动运行的bat文件,则会开始进行联邦学习。平台提供一些简单的损失值和准确率等性能指标的数据可视化,用户可以选择使用wandb记录训练过程中的数据。等待训练完成,还可以返回训练过程中记录的日志,数据,保存的模型文件等。

            而对于用户来说,无需懂得如何完成FedML的配置,或者懂得框架的内部结构,只需要下载压缩包,点击两个bat文件即可完成跨孤岛式联邦学习。

            此外,FedML框架在跨孤岛式联邦学习(参与训练的节点不多,但每个节点中有大量私有数据)中,默认或大多数使用MQTT通行+S3存储(服务端和客户端上传下载模型或其他一些数据),其默认配置会使得数据皆会通过美国的fedml.ai和amazon云对象存储,使得训练速度变慢(除非开启代理)。

            因此,本联邦学习平台,还使用emqx在本地部署管理mqtt,使用ipfs分布式文件存储充当S3存储,虽然不是类似阿里云或腾讯云存储等那么高级,但是也是很好得起到了联邦学习中通信这一关键环节的作用。

            与此同时,本系统平台也提供管理员,管理员可以添加模型,算法,只需要将模型文件,算法文件传入,并输入算法或模型所需要的参数即可,那么在用户的视角看来又会多出很多选择。用户,不仅可以在弹出的cmd窗口中观察本地模型训练的一些数值,训练结束后,训练日志,模型文件都会保存在用户下载的项目文件中。

            下面仅展示一些页面(学艺不精,页面简单),组长可以拉一群组员,那么组员+组长就构成了所有客户端,组长开始配置,也会顺便完成服务端的配置;同时,组员也会在自己的页面完成配置。

    完成配置后,可以将保存在数据库中的各种配置,生成yaml文件,大家都可以下载yaml文件查看自己配置的是否正确

    然后每位客户端可以点击“构建项目”,本平台会为客户打包联邦学习所需的各种python包,生成bat文件用于创建虚拟环境,安装包等工作,用户最后下载解压就行。

    开启训练后,组长可以看到服务端的训练详情,也可以看每个客户端的训练详情

            每个客户端(组长+组员),只需要在本地电脑中,解压项目文件,点击文件中的两个bat文件,即可开始训练,这是客户端中本地训练的详情,同样,客户端也可以在平台上通过页面看到训练详情

    最后训练完成,点击返回结果,可以返回训练过程中的日志记录,模型文件等,自己本地的项目文件中也会产生日志记录,模型文件等

            本平台的联邦学习基于自己部署的mqtt和thetastore进行通信,而非使用FedML官方默认的通信方式,确保了数据安全性,也提高了数据传输速度

            本平台也有管理员,管理员可以添加联邦算法,模型,优化器等,也可以上传一些联邦学习的论文,推送给用户。

    管理员也可以写一些文档,提供给用户,用户就知道这些一个个的配置代表什么意思,有什么用,对训练的影响是什么等信息

    管理员也可以看到一些数据统计,用户,项目,文档的信息

    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值