-
Notifications
You must be signed in to change notification settings - Fork 21
total
本项目将FL整体拆分成三个部分,分别为服务器,客户端和消息队列。
客户端的底层实现由mode决定,目前支持thread、process、MPMT、distibuted三种模式,用户可以根据自己的需求选择不同的模式。模式区别请查看mode。
服务器有三个线程,分别是updater, scheduler 和 data getter, 他们的作用分别是:
-
updater:负责进行模型的聚合更新过程 -
scheduler:负责客户端的调度 -
data getter:负责从消息队列获取数据,每隔一段时间从消息队列获取客户端的更新
服务器和客户端之间通过消息队列message queue进行通信
在用户敲下运行命令后,该项目会进行如下操作:
-
生成唯一的实验UID,亦可自行指定,用于区分不同实验
-
读取指定的配置文件
-
选择是否启用
wandb数据存储 -
创建数据集以及各个客户端所拥有的子集分布
index_list,可以自定义数据集类,以创建多个数据集,构成多模态场景 -
创建各个客户端的延迟设置
staleness_list,用于模拟客户端的系统异构 -
创建
client_manager对象,并通过该对象创建各个客户端5.1 客户端根据配置文件中的
mode参数,选择继承Process类或者Thread类5.2 客户端实例化后,等待
client_manager的启动客户端,开始运行5.3 客户端运行后,初始化本地模型,数据集等
5.4 等待服务器的信息,进行训练(当然客户端也可以是主动向获取模型或者其他变体形态,不过第一次都需要等待服务器初始化完成后的第一次调度信息后,再进行后续操作)
-
创建
server对象,并通过该对象创建服务器6.1 初始化全局模型,获取数据集
6.2 设置模型的参与聚合的参数
6.3 创建
data getter对象,负责从消息队列获取客户端的更新6.4 创建
queue_manager对象,负责接收data getter从消息队列获取的数据,以供其他模块使用6.5 创建
scheduler对象,负责调度客户端6.6 创建
updater对象,负责模型聚合6.7 依次启动
data getter,scheduler,updater三个线程6.8 根据用户设置运行FL训练过程
6.9 收录训练结果
-
client_manager向所有客户端发送终止信号,等待所有客户端结束 -
保存训练数据至
本地/wandb
FedModule将FL流程解构成了多个模块,每个模块都有自己的功能,可以根据需求进行替换或者拓展。主要模块分为:
-
server服务器模块,用来组织server所需的各个模块(scheduler、updater、queuemanager) -
updater聚合更新模块,运行聚合过程的逻辑(负责处理接收到的更新) -
updateupdater搭载的聚合算法 -
scheduler调度模块,用来调度客户端、执行客户端选择算法 -
schedulescheduler搭载的调度(客户端选择)算法 -
queuemanager消息队列管理模块,用来管理收到的更新 -
receiverqueuemanager搭载的接收模块,用来检测接收条件,达到条件触发updater -
checkerqueuemanager搭载的检查模块,用来检查新的更新是否接收 -
clientmanager客户端管理模块,用来管理客户端,负责客户端的启动、停止、新建等操作 -
client客户端模块,用来模拟联邦学习中的客户端 -
groupmanager分组管理模块,用来管理分组,负责分组的创建、删除、更新等操作 -
groupgroupmanager搭载的分组算法,用来管理分组的逻辑 -
dataset数据集模块,用来管理数据集 -
transformtransform模块,用来提供编写好的transform函数 -
lossloss模块,用来提供编写好的loss函数 -
data_dist_generator数据分布生成器,用来生成数据分布 -
numgenerator聚合客户端数量生成器,用来确定每轮聚合的数量(已搭载,但未有可现用算法) -
compressor梯度压缩模块,用来实现通信过程中更新的压缩与解压功能(待开发)
[optinal] 表示可选参数
-
wandb- wandb用于控制实验数据是否存储到wandb云端, 会自动存储训练过程中的loss、acc、本地所有最后保存的实验结果、配置文件
-
enable是否启用wandb -
project本次实验传至wandb的项目名称 -
name本次实验的名称 -
params[optinal] 其他需要设置的参数,会通过**params传递给wandb.init
-
global查看global -
server查看server -
client查看client -
queuemanger查看queuemanager -
clientmanager查看clientmanager
Getting Started - 整体流程 - Module Guide - 现有算法 - Contact Us