Skip to content

structure

desperadoccy edited this page Jan 21, 2025 · 1 revision

目录结构介绍

根目录下的文件结构如下:

.
├── 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模块介绍

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

其中Component.py是server和client的基类,Compoent中定义了组建的核心运行方法和逻辑,Compoent中包含了global_varfinals以及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是组件的核心逻辑,用户需要实现该函数。

Runtime

为了使客户端兼容更多的运行模式,我们将客户端和运行模式抽离,在该文件中我们定义了Mode类以及基础的Process和Thread模式类。并且我们创建了ModeFactory类,用于根据配置文件中的mode字段创建对应的模式类。

MPMT

MPMT是一个多进程多线程模式的类,用于创建多进程多线程模式的客户端。

MessageQueue

MessageQueue是FedModule中用于服务器和客户端之间通信的消息队列类,不同的模式下,消息队列的实现方式不同。例如在thread模式下,消息队列是一个queue.Queue()对象,而在process模式下,消息队列是一个由multiprocessing.SyncManager管理的对象。在Distributed模式下,我们为消息队列封装了MQTT协议的实现,如果可以,用户可以自行实现其他协议下的消息队列。

handlers

Handler是FedModule中实现组件行为的类,handlers中存储着Handler相关类的定义以及一些服务器和客户端通用的行为类,例如ModelTrainHandler和ModelTestHandler。

Clone this wiki locally