使用vscode cmd+p 运行:
ext install zxh404.vscode-proto3
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. protos/fedavg.protopython server_fed.py
使用 python server_fed.py --help发现更多功能
python client_fed.py
使用 python client_fed.py --help发现更多功能
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号数据
-
先分割数据,在bash中执行
python dataprocessing/data_splitting.py -n 10 # 分割数据为10份 -
先开一个终端,在bash中执行
export CUDA_VISIBLE_DEVICES=3 # 设置显卡 python server_fed.py -c 10 # 启动服务器,当服务器收集到10个本地模型时进行聚合并进入下一轮
-
再开一个终端,在bash中执行
export CUDA_VISIBLE_DEVICES=3 # 设置显卡 python client_fed.py -n 1 # 启动一个client进程
-
再开一个终端,在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