Skip to content
henry-tujia edited this page Oct 12, 2021 · 7 revisions

项目说明🔖

该项目是为mindspore实现端侧联邦学习创新代码

开始🔧

使用git clone https://github.com/henry-tujia/mindspore_flclient.git进行拉取

准备知识📒

编程语言基础

该项目使用java开发,因此需要了解简单的java运算符以及常用数据结构操作;面向对象部分可以简单跳过

方案背景

  1. 基于互信息的客户端选择策略
  2. 动态聚合+差分隐私

在方案实现中需要进行客户端与服务器端的简单通信,因此需要大概了解方案的简单背景(该部分体现在相应的pages中,待补充)

mindspore原有api

在本次开发之前,华为已经实现简单的联邦学习流程,因此可以借用部分实现过程。

mindspore使用联邦学习进行图像分类实例

端侧代码路径\mindspore\lite\java\java\fl_client

代码主要逻辑

主要体现整个现有联邦学习的逻辑,具体函数实现,需要自查实现方式

联邦学习训练逻辑主要体现在\mindspore\lite\java\java\fl_client\SyncFLJob.java,针对按此代码逻辑进行讲解:

函数名称 函数含义 函数全名(便于查找) 函数位置
main 运行入口 public static void main(String[] args) SyncFLJob.java
flJobRun 联邦学习的流程 public FLClientStatus flJobRun() SyncFLJob.java
startFLJob 向服务器注册客户端 public FLClientStatus startFLJob() FLLiteClient.java
getOldFeatureMap 获取模型参数(为了安全聚合,和我们无关) SyncFLJob.java
getFeatureMask 进行模型参数加密 public FLClientStatus getFeatureMask() FLLiteClient.java
localTrain 执行本地训练 public FLClientStatus localTrain() FLLiteClient.java
updateModel 模型参数上传 public FLClientStatus updateModel() FLLiteClient.java
unMasking 模型参数解密(同获取模型,无用) FLLiteClient.java
getModel 从服务器下载新的模型参数 public FLClientStatus getModel() FLLiteClient.java
updateDpNormClip 梯度裁剪 private void updateDpNormClip(FLLiteClient client) SyncFLJob.java
finalize 模型运行结束 protected void finalize() FLLiteClient.java

注意事项💊

  1. 代码位置尽可能与上述功能相近的函数保持一致
  2. 数据结构尽量使用原有数据结构
  3. 代码尽可能复用,减少开发工作量

后记💕

代码开发肯定有些许困难,有问题可以及时沟通📞;如果有什么好的技巧,也可以随时分享😁