联邦学习框架FedML自学----第二篇----整体简介

FedML github:FedML-AI/FedML: FEDML - The unified and scalable ML library for large-scale distributed training, model serving, and federated learning. FEDML Launch, a cross-cloud scheduler, further enables running any AI jobs on any GPU cloud or on-premise cluster. Built on this library, TensorOpera AI (https://TensorOpera.ai) is your generative AI platform at scale.

FedML公司官网:

FedML - Federated learning easily, scalably & economically

简单介绍

fedml源码主要模块

模块名作用
core核心模块,封装所有低层通信机制:MPI、NCCL、MQTT、gRPC、PyTorch RPC; 提供拓扑管理、安全隐私相关接口; 所有算法都依赖此核心模块。(在本地模拟测试中,多用mpi多进程并行;在真实联邦学习中常用mqtt进行通信)
data提供默认数据集及自定义数据模板,方便快速入门
model模型库,内含各种可复用的模型结构
device计算资源管理模块,例如设备发现、资源调度等
simulation联邦学习模拟器,支持: 1. 单进程模拟 2. MPI 模拟 3. NCCL 模拟(最快)
cross-silo跨组织(跨孤岛)联邦学习(如企业、医院之间),即参与训练的客户端比较少,但每个客户端拥有大量数据
cross-device跨设备联邦学习(如手机、嵌入式设备),即参与训练的客户端很多,但每个客户端的数据比较少
distributed分布式训练模块,基于 Cheetah 加速训练过程
serve边缘模型推理服务模块,提升边缘 AI 用户体验
mlopsAI 运维平台接口(open.fedml.ai 对应的 API)
centralized用于对照实验的集中式训练代码样例(非联邦学习)
utils公共工具函数,供其他模块共享使用

FedML案例代码主要介绍

在FedML--->python--->examples--->federate中,就是我们需要关注的主要案例了:

        我们主要关注cross_silo、flow、prebuilt_jobs、quick_start。cross_silo就是跨孤岛式联邦学习;flow中一个案例介绍了FedAlgorithmFlow的使用;prebuilt_jobs是借鉴了某些论文中的比较完整的自定义联邦学习代码,从配置到数据到模型到算法都属于基于FedML的自定义,高阶玩法;quick_start通过小案例本地模拟联邦学习。其余模块,并不是不重要,暂时还未涉足,主要有跨设备的联邦学习,安全联邦学习等。

fedml.ai官网介绍

官网简介

        可以google账号或者github账号进行注册,但是推荐自己新注册一个自定义的用户名和密码,其他两种登录方式不稳定

点击“Documentation”,是一些文档信息,该文档主要是为FedML框架的描述,但是并没有具体的教程和说明,只是告诉我们想要完成什么样的联邦学习你可以去看一下学一下这个案例

点击 launch platform就可以进入联邦学习平台

在该联邦学习平台中,会提供模型,大模型,公共数据集等,让你进行真实的,能够落地应用的,联邦学习,可以跨孤岛式联邦学习,跨设备式联邦学习等

官网实现跨孤岛联邦学习

视频介绍:Tutorial on TensorOpera AI Platform | TensorOpera® Documentation

第一步:生成压缩包,并创建工作

自己编写好联邦学习的代码后,有一个启动联邦学习的模块,如torch_client.py,是启动联邦学习客户端的模块,在终端的该目录下,生成zip文件,也就是最后你会得到服务端和客户端的zip文件

SOURCE=client
ENTRY=torch_client.py
CONFIG=config
DEST=./mlops
fedml build -t client -sf $SOURCE -ep $ENTRY -cf $CONFIG -df $DEST
​
​
SOURCE=server
ENTRY=torch_server.py
CONFIG=config
DEST=./mlops
fedml build -t server -sf $SOURCE -ep $ENTRY -cf $CONFIG -df $DEST
生成的压缩包的格式
    client_package.zip
        conf
            fedml.yaml
        fedml
            torch_client.py
            config
                fedml_config.yaml
                gpu_mapping.yaml
                bootstrap.bat
                bootstrap.sh
​
​
fedml.yaml文件
​
entry_config: 
  entry_file: fedml/torch_client.py
  conf_file: config/fedml_config.yaml
dynamic_args:
  rank: ${FEDSYS.CLIENT_INDEX}
  run_id: ${FEDSYS.RUN_ID}
  mqtt_config_path: /fedml/fedml_config/mqtt_config.yaml
  s3_config_path: /fedml/fedml_config/s3_config.yaml
  log_file_dir: /fedml/fedml-package/fedml/data
  log_server_url: ${FEDSYS.LOG_SERVER_URL}
  client_id_list: ${FEDSYS.CLIENT_ID_LIST}
  client_objects: ${FEDSYS.CLIENT_OBJECT_LIST}
  is_using_local_data: ${FEDSYS.IS_USING_LOCAL_DATA}
  synthetic_data_url: ${FEDSYS.SYNTHETIC_DATA_URL}
  client_num_in_total: ${FEDSYS.CLIENT_NUM}

在联邦学习平台中,点击cross-silo,点击create job创建新的工作任务,然后再创建过程中会需要你将刚刚生成的两个zip文件上传,其实这两个zip文件也就是定义了你联邦学习的服务端和客户端所做的事,以及整个联邦学习的配置(yaml文件)




第二步:记录一台或多台设备
在fedml.ai网站中,创建自己的账号
API key需要自己进入官网注册后获取
然后在自己的设备中(如pycharm的终端中输入)  fedml login API Key
网站会记录设备信息

第三步:创建组,邀请成员
邀请码  组员生成邀请码 组长打开邀请码同意组员进组 https://fedml.ai/octopus/collaborator/addFriends?id=7518
账号1: xxxxx  #xxxxxxxx    组长
账号2: xxxxx  @xxxxxxx   组员
​
可以生成 每个组员包括组长及各自的可使用设备(如果想用它官方提供的设备,那就得花钱了)

第四步:创建项目,运行项目

运行项目时,可以看到一些训练过程,以及训练是否成功,成功的话会返回一些结果

1.用户需要根据FedML进行编程,自定义数据集格式,自定义客户端代码、服务端代码
2.用户需要在网站中记录自己的设备,但是有的设备就是记录不成功
3.组长会创建一个用户组,用户组会邀请组员,然后会显示出本组所有成员提交的设备信息,需要选一台设备作为服务端设备,也可以选择fedml.ai提供服务器,但需要收钱
​
优点:用户可以指定哪台设备进行训练,而非自己登录网站的那台电脑,更灵活
缺点:用户需要自己根据FedML编写代码,客户得知道FedML框架该如何使用
​
*但是将上传的客户端、服务端代码发送给设备的操作,应该是网站内部提供的,而不是FedML当中的功能

我搭建的联邦学习平台的思路也是模仿官网的联邦学习平台思路,虽然不能像官网一样可以记录设备,可以使用其他设备训练本地数据本地模型,但是相对用户来说只需要填写配置,下载项目文件,点击两个bat文件即可完成联邦学习。此外,可能就是底层的通信还没有它那么强大,没有它那么多丰富的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值