KarhouTam / FL-bench

Benchmark of federated learning. Dedicated to the community. 🤗
GNU General Public License v3.0
503 stars 82 forks source link

数据集生成和示例demo运行的问题 #23

Closed realcly closed 1 year ago

realcly commented 1 year ago

非常感谢这个联邦学习算法仓库,然而在运行时却出现了一个问题,求教。

python generate_data.py -d cifar10 -a 0.1 -cn 100

Traceback (most recent call last): File "generate_data.py", line 16, in from utils.schemes import ( File "/root/FL-bench-master/data/utils/schemes/init.py", line 5, in from .semantic import semantic_partition File "/root/FL-bench-master/data/utils/schemes/semantic.py", line 22, in from src.config.utils import get_best_device File "/root/FL-bench-master/src/config/utils.py", line 69, in src: Union[OrderedDict[str, torch.Tensor], torch.nn.Module], TypeError: 'type' object is not subscriptable

生成数据集时出现了这个报错,还没有找到解决办法。

KarhouTam commented 1 year ago

Hi, @realcly ,首先感谢你对这个开源仓库的关注。 针对你的问题,我感觉或许是 python 版本不对引起的。请问你运行代码所使用的 python 版本是?

realcly commented 1 year ago

Hi, @realcly ,首先感谢你对这个开源仓库的关注。 针对你的问题,我感觉或许是 python 版本不对引起的。请问你运行代码所使用的 python 版本是?

我使用的是Python 3.8.10

KarhouTam commented 1 year ago

我使用的 python 版本为 3.10.10,在 ubuntu 22.04 下运行

python generate_data.py --semantic 1 -d mnist -cn 20

以下为终端输出:

image

realcly commented 1 year ago

我使用的 python 版本为 3.10.10,在 ubuntu 22.04 下运行

python generate_data.py --semantic 1 -d mnist -cn 20

以下为终端输出:

image

好的,我再试一试,谢谢!

KarhouTam commented 1 year ago

以下是我在本地运行 FL-bench 所使用到的库的具体版本:

https://github.com/KarhouTam/FL-bench/blob/5e0133e30756a2fff9f70a1a27c605b5dfb1698c/pyproject.toml#L11-L24

今天我刚更新了使用 docker 来构建运行环境的特性,或许你可以试试🤗。

realcly commented 1 year ago

以下是我在本地运行 FL-bench 所使用到的库的具体版本:

https://github.com/KarhouTam/FL-bench/blob/5e0133e30756a2fff9f70a1a27c605b5dfb1698c/pyproject.toml#L11-L24

今天我刚更新了使用 docker 来构建运行环境的特性,或许你可以试试🤗。

好的再次感谢!我继续调试一下。

realcly commented 1 year ago

以下是我在本地运行 FL-bench 所使用到的库的具体版本:

https://github.com/KarhouTam/FL-bench/blob/5e0133e30756a2fff9f70a1a27c605b5dfb1698c/pyproject.toml#L11-L24

今天我刚更新了使用 docker 来构建运行环境的特性,或许你可以试试🤗。

再次问您好!按照你的建议,我将python版本替换为3.10.10,数据集生成的问题已解决,谢谢!

但在按照demo测试时,即:

image

生成的结果似乎并不是意料之中的,测试准确率不是一个平滑收敛的曲线,第一轮通信就能达到80%嘛? cifar10 我接着运行了moon算法,结果还是大致是这样 cifar10 想请问这是什么原因呢?准确率评估和存储准确率的excel/csv相关的代码我好像找了好久都没看到在哪个文件。还麻烦您赐教!

KarhouTam commented 1 year ago

你提出了两个问题:

  1. 不理解为什么 acc 曲线如此曲折
  2. 不知道记录 acc 的 csv 文件在哪

答案是:

  1. demo 中的 -a 0.1 -cn 100 指的是根据狄利克雷分布 $Dir(0.1)$ 将 cifar-10 分割成 100 个子集,每个子集对应一个客户端数据集。而 $Dir(0.1)$ 加上切分成 100 份在 cifar-10 上是一种非常强的 niid,基本上所有的传统 FL 方法(比如 FedAvg, MOON)在这种设置之上都会表现得不如人意。你可以试试用 FedPer 等个性化 FL 方法,你会发现算法仍然会收敛。其根本原因就是针对强 niid 设置,目前仍然没有传统联邦学习方法能够训练出一个令人满意的全局模型。那为什么 test_aftertest_before 高那么多,因为每个客户端的数据量很少,全局模型经过多轮的本地训练后其实就能比较好地拟合本地的小数据集。

  2. csv 文件通常被存放在 out/${algo} 文件夹中(比如 out/FedAvg/cifar10_acc_metrics.csv)。 计算 acc 的相关代码在 src/server/fedavg.py 中的 test()log_info()

realcly commented 1 year ago

你提出了两个问题:

  1. 不理解为什么 acc 曲线如此曲折
  2. 不知道记录 acc 的 csv 文件在哪

答案是:

  1. demo 中的 -a 0.1 -cn 100 指的是根据狄利克雷分布 Dir(0.1) 将 cifar-10 分割成 100 个子集,每个子集对应一个客户端数据集。而 Dir(0.1) 加上切分成 100 份在 cifar-10 上是一种非常强的 niid,基本上所有的传统 FL 方法(比如 FedAvg, MOON)在这种设置之上都会表现得不如人意。你可以试试用 FedPer 等个性化 FL 方法,你会发现算法仍然会收敛。其根本原因就是针对强 niid 设置,目前仍然没有传统联邦学习方法能够训练出一个令人满意的全局模型。那为什么 test_aftertest_before 高那么多,因为每个客户端的数据量很少,全局模型经过多轮的本地训练后其实就能比较好地拟合本地的小数据集。
  2. csv 文件通常被存放在 out/${algo} 文件夹中(比如 out/FedAvg/cifar10_acc_metrics.csv)。

谢谢您的回复!第一个问题醍醐灌顶!我继续研究以方便后续交流。 对于第二个问题,我想确定一下:评估模型测试准确率(以及生成“out”文件夹中的图片、csv和log)都是调用FL-bench/src/server/fedavg.py中的代码吗?如:

image
KarhouTam commented 1 year ago

谢谢您的回复!第一个问题醍醐灌顶!我继续研究以方便后续交流。 对于第二个问题,我想确定一下:评估模型测试准确率(以及生成“out”文件夹中的图片、csv和log)都是调用FL-bench/src/server/fedavg.py中的代码吗?如: image

嗯,FedAvgServer 相当于一个基类,FL-bench 中实现的所有算法都基于此。我将所有共用的方法都是实现在里面。当然或许某些 FL 方法可能会有自己的 test()(我记不清了),那样的话会在它们自己相应的文件中重新实现该方法。

realcly commented 1 year ago

谢谢您的回复!第一个问题醍醐灌顶!我继续研究以方便后续交流。 对于第二个问题,我想确定一下:评估模型测试准确率(以及生成“out”文件夹中的图片、csv和log)都是调用FL-bench/src/server/fedavg.py中的代码吗?如: image

嗯,FedAvgServer 相当于一个基类,FL-bench 中实现的所有算法都基于此。我将所有共用的方法都是实现在里面。当然或许某些 FL 方法可能会有自己的 test()(我记不清了),那样的话会在它们自己相应的文件中重新实现该方法。

好的,谢谢,后续继续学习、向您交流和请教。

KarhouTam commented 1 year ago

如果没有其他问题的话,我就 close issue 了🤗。 有别的问题也欢迎 open issue,我有空时就会帮你解答。

realcly commented 1 year ago

如果没有其他问题的话,我就 close issue 了🤗。 有别的问题也欢迎 open issue,我有空时就会帮你解答。

嗯嗯好的谢谢🤗