新鲜出炉的框架——两个月,暂时没什么教程,全程跟着官方文档走。
框架与文档可能存在一点小问题,以后肯定会改进,一切以当下事实为准。
官网:https://federatedscope.io/
FederatedScope 采用事件驱动的编程范式,用于支持现实场景中联邦学习应用的异步训练,并借鉴分布式机器学习的相关研究成果,集成了异步训练策略来提升训练效率。具体而言,FederatedScope 将联邦学习看成是参与方之间收发消息
的过程,通过定义消息类型
以及处理消息的行为
来描述联邦学习过程。
跟着官方教程一步步操作就行, 虽然有坑。。。这里只记录一下注意事项。
注意 torch、torchvision、Python
的版本对应(其实不需要管)
torch |
torchvision |
python |
---|---|---|
main / nightly |
main / nightly |
>=3.7 , <=3.10 |
1.12.0 |
0.13.0 |
>=3.7 , <=3.10 |
1.11.0 |
0.12.0 |
>=3.7 , <=3.10 |
1.10.2 |
0.11.3 |
>=3.6 , <=3.9 |
1.10.1 |
0.11.2 |
>=3.6 , <=3.9 |
1.10.0 |
0.11.1 |
>=3.6 , <=3.9 |
1.9.1 |
0.10.1 |
>=3.6 , <=3.9 |
1.9.0 |
0.10.0 |
>=3.6 , <=3.9 |
1.8.2 |
0.9.2 |
>=3.6 , <=3.9 |
1.8.1 |
0.9.1 |
>=3.6 , <=3.9 |
1.8.0 |
0.9.0 |
>=3.6 , <=3.9 |
去官方 git 查看,绝对是最新的:https://github.com/pytorch/vision#installation
好吧,事实上压根不需要自己手动安装,上面的不用理会。。。
只需要在 anaconda 建立一个环境,注意 python 版本一定要 3.9 以上!
然后再 conda install
依赖文件 即可,requirements.txt
已经集成好了(这里没用 docker )
文档大致是没问题的,慢慢看能跑起来,不过可能官方时间比较仓促,有些小错误。
environment
打错了!!!直接给你报找不到这个文件。。。
这里的参数 federated 应该为 federate
。。。
不信你看配置文件怎么写的:
这里只为快速入门,不自定义数据集,跑自带的 demo 而已,所以无需准备。
我一看官方默认的配置参数,就知道是我这小小轻薄本无法承受之重,于是改改命令参数(如下),自信满满地 run !
python federatedscope/main.py --cfg federatedscope/example_configs/femnist.yaml federate.total_round_num 50 data.batch_size 10
可以看到,这里会打印主机 ip 、文件路径、配置参数等有价值信息。
这里是在模拟多个客户端,默认 200 个(埋下伏笔)
果不其然,崩了!!!
让我们查看一下 GPU 和 内存 的使用情况。
GPU 明显撑得住,batch_size 就不用调了吧,至于内存,那是被模拟的 200 个客户端给爆了。。。
所以需要下调客户端的数量,那么它在哪呢?
在 femnist.yaml
配置文件里找了一圈,没有。
在输出日志里看一下配置,有了!
在配置文件手动加上就行,然后就可以愉快地 run 了。
在 exp
里可以查看训练的详细信息
以下仅为个人猜测与尝试!不负任何责任。
坑爹的地方又来了,你要按照文档来,那是无论如何都跑不通的。
报错:FileNotFoundError: [Errno 2] No such file or directory: 'toy_data/server_data'
项目压根没这个数据集,不过还是可以曲线救国,尝试一下。
因为上面已经下载了 femnist
的数据集,而案例里又带有相关配置文件,那理论上应该是能跑的。
分别执行以下命令(危!),就可以在本机上开四个端口,同时有一个服务端外加三个客户端。
python federatedscope/main.py --cfg federatedscope/example_configs/distributed_femnist_server.yaml
python federatedscope/main.py --cfg federatedscope/example_configs/distributed_femnist_client1.yaml distribute.client_host '127.0.0.1' distribute.client_port 50052
python federatedscope/main.py --cfg federatedscope/example_configs/distributed_femnist_client2.yaml distribute.client_host '127.0.0.1' distribute.client_port 50053
python federatedscope/main.py --cfg federatedscope/example_configs/distributed_femnist_client2.yaml distribute.client_host '127.0.0.1' distribute.client_port 50054
客户端准备如下:
当三个客户端都准备就绪后,服务端才会开始训练:
然后,它就崩了,也不知道有没有成功。
一个电脑上跑分布式,我可能是有点不知好歹。
这个过程也不知道发生了什么,一直 Round #0
阿里达摩院最新框架FederatedScope来了!让联邦学习从可用到好用