FedML-master环境安装

FedML-master环境安装

根目录下有5个CI文件,CI-install.sh是总环境的安装,后面4个分别是四个算法的具体安装。

要求:Pytorch>=1.4.0, MPI4PY>=3.0.3, Python>=3.7.4
官方给的安装教程:http://doc.fedml.ai/#/installation-distributed-computing

创建环境:

conda create -n fedml python=3.7.4
conda activate fedml

Pytorch:

conda install pytorch torchvision cudatoolkit=10.2 -c pytorch

MP14Py:

conda install -c anaconda mpi4py

Weights and bias:

pip install --upgrade wandb

Install other required packages:

conda install scikit-learn
conda install numpy
conda install h5py
conda install setproctitle
conda install networkx
pip install -r requirements.txt

data文件夹下存放的是实验数据,根据你需要的数据到相应的文件夹下,按照流程download数据就好啦,基本都是sh download_xxx.sh。

比如执行FedAvg算法,就要先cd 到fedml-experiments/distributed的 fedavg 文件夹下(如果不是分布式的就去standalone文件夹里执行)。

1、第一步是配置节点。(由于我不是分布式的,所以这里省略了。)

2、weights and bias的记录,需要先登录wandb,当然如果不想用wandb来查看实验结果的话,可以不登录。

wandb login 自己的ID

我这里也没登录,直接wandb off就可。

3、执行程序。每个算法的文件夹下都有一个readme,写了具体的执行方法。比如FedAvg的这个:

sh run_fedavg_distributed_pytorch.sh \
    --client_num_in_total  \
    --client_num_per_round  \
    --model  \
    --partition_method  
    --comm_round  \
    --epochs \
    --batch_size  \
    --learning_rate  \
    --dataset  \
    --data_dir  \
    --client_optimizer  \
    --backend  \
    --grpc_ipconfig_path  \
    --ci 

如果以MNIST数据集为例的话,就是

sh run_fedavg_standalone_pytorch.sh 0 1000 10 10 mnist ./../../../data/mnist lr hetero 200 1 0.03 sgd 0

这时要是报错:ModuleNotFoundError: No module named ‘setproctitle’ 或者 ‘h5py’ 之类的,就conda install就好。

另外,可以直接sh CI-install.sh,一键完成安装。(注意如果安装了conda,就要注释掉前几行conda的安装过程)。

这里记录一个执行完的bug:
ImportError: /home/huazheng/anaconda3/envs/py38new/lib/python3.8/site-packages/h5py/defs.cpython-38-x86_64-linux-gnu.so: undefined symbol: H5Pset_fapl_ros3

解决完之后再来更。

解决了!是h5py的版本问题,我安装的是3.3.0版本,就会报这个错。降低版本到2.9.0就OK啦!

conda install h5py=2.9.0

更新:
在执行distributed里的Fedavg算法时,或许会报错“ModuleNotFoundError: No module named ‘FedML’ ”,因为在github上下载的文件夹叫“FedML-master”,所以把文件夹的名字改为“FedML”就好了!

还有,或许会报错

AssertionError
Traceback (most recent call last):
  File "./main_fedavg.py", line 320, in 
    device = mapping_processes_to_gpu_device_from_yaml_file(process_id, worker_number, args.gpu_mapping_file, args.gpu_mapping_key)
  File "/home/huazheng/federated_learning/FedML/fedml_api/distributed/utils/gpu_mapping.py", line 33, in mapping_processes_to_gpu_device_from_yaml_file
    assert i == worker_number

这是gpu的进程数和你执行命令时输入的worker num不一样导致的。解决办法:打卡gpu_mapping.py,找到 i 的定义,然后print(i),输出一下你的gpu的进程数,然后在输入命令的时候用这个数就好了!记得还要更改gprc_ipconfig.py文件,使它的client num和进程数一致。
FedML-master环境安装_第1张图片
FedML-master环境安装_第2张图片

你可能感兴趣的:(FedML,python)