-
Notifications
You must be signed in to change notification settings - Fork 21
structure
根目录下的文件结构如下:
.
├── config
├── config.json
├── config_semi.json
├── config_sync.json
├── doc
├── docker
├── environment.yaml
├── license
├── readme.md
├── requirements.txt
└── src
其中config文件夹下存放了配置文件,config*.json是各类的配置文件,doc存放着一些readme所需的文件,docker存放着dockerfile,environment.yaml是conda环境文件,license是许可文件,requirements.txt是pip环境文件,src存放着源代码。
src文件夹下的文件结构及解释如下:
.
├── checker # 消息队列管理(queuemanager)模块的检查模块
├── client # 客户端模块
├── clientmanager # 客户端管理模块
├── compressor # 梯度压缩模块
├── core # 框架核心
├── data # 数据集原始数据(数据!)
├── dataset # 数据集模块(数据集类)
├── fl # 主文件
├── group # 分组算法模块
├── groupmanager # 分组管理模块
├── lib # 更多的算法库
├── loss # 损失函数模块
├── model # 模型模块
├── numgenerator # 聚合客户端数量生成器
├── partitioner # 数据集划分模块
├── queuemanager # 消息队列管理模块
├── receiver # 消息队列管理(queuemanager)模块的接收模块
├── results # 实验结果
├── schedule # 调度算法(客户端选择)模块
├── scheduler # 调度模块
├── server # 服务器模块
├── stale # 客户端延迟算法模块
├── test # 测试用文件夹
├── transforms # 数据预处理模块
├── update # 聚合算法模块
├── updater # 聚合更新模块
└── utils # 工具模块
其中各个模块的功能请查看各模块介绍,接下来我们将主要介绍core模块。
core模块是FedModule的核心模块,主要包含了一些基础的类和函数,方便用户进行一些基础的操作。
.
├── Component.py
├── MPMT.py
├── MessageQueue.py
├── Runtime.py
├── __init__.py
└── handlers
├── Handler.py
├── ModelTestHandler.py
├── ModelTrainHandler.py
├── ServerHandler.py
└── __init__.py
core模块包含了框架最核心的相关类。
其中Component.py是server和client的基类,Compoent中定义了组建的核心运行方法和逻辑,Compoent中包含了global_var、finals以及handler_chain三个成员。
global_var这是一个用于线程间共享的全局字典,用于存储全局变量。
finals存储着所有的回调函数,他会在组件完成任务后(finish函数之前)被调用。
handler_chain是一个用于存储行为组的职责链。职责链用于组成组件的所有行为,每个行为都是一个handler,handler中包含了handle函数,用于处理行为。
Component对外提供run函数,用于启动组件,其在run中依次会1.执行创建执行链 2.init 3.运行_run_iteration 4.执行finals回调 5.finish
init和finish均为空函数,用户可自行实现。 _run_iteration和create_handler_chain是组件的核心逻辑,用户需要实现该函数。
为了使客户端兼容更多的运行模式,我们将客户端和运行模式抽离,在该文件中我们定义了Mode类以及基础的Process和Thread模式类。并且我们创建了ModeFactory类,用于根据配置文件中的mode字段创建对应的模式类。
MPMT是一个多进程多线程模式的类,用于创建多进程多线程模式的客户端。
MessageQueue是FedModule中用于服务器和客户端之间通信的消息队列类,不同的模式下,消息队列的实现方式不同。例如在thread模式下,消息队列是一个queue.Queue()对象,而在process模式下,消息队列是一个由multiprocessing.SyncManager管理的对象。在Distributed模式下,我们为消息队列封装了MQTT协议的实现,如果可以,用户可以自行实现其他协议下的消息队列。
Handler是FedModule中实现组件行为的类,handlers中存储着Handler相关类的定义以及一些服务器和客户端通用的行为类,例如ModelTrainHandler和ModelTestHandler。
Getting Started - 整体流程 - Module Guide - 现有算法 - Contact Us