Skip to content

Latest commit

 

History

71 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

语法高亮

使用vscode cmd+p 运行:

ext install zxh404.vscode-proto3

protos生成

python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. protos/fedavg.proto

启动服务器

python server_fed.py

使用 python server_fed.py --help发现更多功能

启动一个客户端

python client_fed.py

使用 python client_fed.py --help发现更多功能

启动UI

streamlit run server_ui.py

攻防测试

数据分割

其中可以随机等分或按照狄利克雷分布划分不等的数据,使用以下命令来获取更多帮助。

python dataprocessing/data_splitting.py --help

客户端说明

在分割数据集后无需手动设置每个client对应的数据,所有的client都会随机选一份数据(代码已经保证了每个client会持有不同的数据)。

可以开启两个终端,分别用不同的参数运行client_fed.py,运行时可以指定当前进程模拟的client数量(默认为1),也可以设置是否进行攻击。你需要保证设置的client总数不超过你分割的数据份数,否则将有client取不到数据。

client_fed_M.py [-p Neurotoxin|ModelReplacement] 该客户端专门用于攻击,设置了绘制攻击准确率图像的部分

client_fed*.py(*是末尾编号) 这几个客户端用于模拟其他的参与者,其中可以通过更改 train_loader, sample_count= prepare_cifar10_trainloader(x, i)中的 x来调整该客户端读入的数据,对于没有虚拟客户端的客户端来说仅读入 x号数据;对于有 n个虚拟客户端的客户端来说,各虚拟客户端会分别读入 x, x+1, x+2, ... , x+n-1号数据

一个运行的例子

  1. 先分割数据,在bash中执行

    python dataprocessing/data_splitting.py -n 10 # 分割数据为10份
  2. 先开一个终端,在bash中执行

    export CUDA_VISIBLE_DEVICES=3 # 设置显卡
    python server_fed.py -c 10 # 启动服务器,当服务器收集到10个本地模型时进行聚合并进入下一轮
  3. 再开一个终端,在bash中执行

    export CUDA_VISIBLE_DEVICES=3 # 设置显卡
    python client_fed.py -n 1 # 启动一个client进程
  4. 再开一个终端,在bash中执行

    export CUDA_VISIBLE_DEVICES=3 # 设置显卡
    python client_fed.py -n 9 # 启动一个client进程,但充当9个client

    这个时候,总共启动的client数量为1+9>=10,稍等一会,当服务器在收集到足够的模型后,就可以进行聚合并自动进入下一轮了

打包相关

打包相关的配置在pyproject.toml中,设置好配之后执行以下的命令就可以打包。注意 如果你想要让你的函数被import,那就需要把他加入到__all__中。

python -m build

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages