-
Notifications
You must be signed in to change notification settings - Fork 0
home
henry-tujia edited this page Oct 12, 2021
·
7 revisions
该项目是为mindspore实现端侧联邦学习创新代码
使用git clone https://github.com/henry-tujia/mindspore_flclient.git
进行拉取
该项目使用java开发,因此需要了解简单的java运算符以及常用数据结构操作;面向对象部分可以简单跳过
- 基于互信息的客户端选择策略
- 动态聚合+差分隐私
在方案实现中需要进行客户端与服务器端的简单通信,因此需要大概了解方案的简单背景(该部分体现在相应的pages中,待补充)
在本次开发之前,华为已经实现简单的联邦学习流程,因此可以借用部分实现过程。
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 |
- 代码位置尽可能与上述功能相近的函数保持一致
- 数据结构尽量使用原有数据结构
- 代码尽可能复用,减少开发工作量
代码开发肯定有些许困难,有问题可以及时沟通📞;如果有什么好的技巧,也可以随时分享😁