Skip to content
desperadoccy edited this page Jan 21, 2025 · 4 revisions

本项目将FL整体拆分成三个部分,分别为服务器,客户端和消息队列。

流程

客户端的底层实现由mode决定,目前支持threadprocessMPMTdistibuted三种模式,用户可以根据自己的需求选择不同的模式。模式区别请查看mode

服务器有三个线程,分别是updater, schedulerdata getter, 他们的作用分别是:

  • updater:负责进行模型的聚合更新过程
  • scheduler:负责客户端的调度
  • data getter:负责从消息队列获取数据,每隔一段时间从消息队列获取客户端的更新

服务器和客户端之间通过消息队列message queue进行通信

在用户敲下运行命令后,该项目会进行如下操作:

  1. 生成唯一的实验UID,亦可自行指定,用于区分不同实验

  2. 读取指定的配置文件

  3. 选择是否启用wandb数据存储

  4. 创建数据集以及各个客户端所拥有的子集分布index_list,可以自定义数据集类,以创建多个数据集,构成多模态场景

  5. 创建各个客户端的延迟设置staleness_list,用于模拟客户端的系统异构

  6. 创建client_manager对象,并通过该对象创建各个客户端

    5.1 客户端根据配置文件中的mode参数,选择继承Process类或者Thread

    5.2 客户端实例化后,等待client_manager的启动客户端,开始运行

    5.3 客户端运行后,初始化本地模型,数据集等

    5.4 等待服务器的信息,进行训练(当然客户端也可以是主动向获取模型或者其他变体形态,不过第一次都需要等待服务器初始化完成后的第一次调度信息后,再进行后续操作)

  7. 创建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 收录训练结果

  8. client_manager向所有客户端发送终止信号,等待所有客户端结束

  9. 保存训练数据至本地/wandb

结构

FedModule将FL流程解构成了多个模块,每个模块都有自己的功能,可以根据需求进行替换或者拓展。主要模块分为:

  • server 服务器模块,用来组织server所需的各个模块(scheduler、updater、queuemanager)
  • updater 聚合更新模块,运行聚合过程的逻辑(负责处理接收到的更新)
  • update updater搭载的聚合算法
  • scheduler 调度模块,用来调度客户端、执行客户端选择算法
  • schedule scheduler搭载的调度(客户端选择)算法
  • queuemanager 消息队列管理模块,用来管理收到的更新
  • receiver queuemanager搭载的接收模块,用来检测接收条件,达到条件触发updater
  • checker queuemanager搭载的检查模块,用来检查新的更新是否接收
  • clientmanager 客户端管理模块,用来管理客户端,负责客户端的启动、停止、新建等操作
  • client 客户端模块,用来模拟联邦学习中的客户端
  • groupmanager 分组管理模块,用来管理分组,负责分组的创建、删除、更新等操作
  • group groupmanager搭载的分组算法,用来管理分组的逻辑
  • dataset 数据集模块,用来管理数据集
  • transform transform模块,用来提供编写好的transform函数
  • loss loss模块,用来提供编写好的loss函数
  • data_dist_generator 数据分布生成器,用来生成数据分布
  • numgenerator 聚合客户端数量生成器,用来确定每轮聚合的数量(已搭载,但未有可现用算法)
  • compressor 梯度压缩模块,用来实现通信过程中更新的压缩与解压功能(待开发)

config参数解释

[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
Clone this wiki locally