Federated Learning PyTorch
1.0.0
バニラ連合学習論文の実装:分散データからのディープネットワークのコミュニケーション効率の高い学習。
実験は、Mnist、Fashion Mnist、CIFAR10(IIDおよび非IIDの両方)で作成されます。非IIDの場合、ユーザー間のデータを均等にまたは不平等に分割できます。
これらの実験の目的は、連合学習パラダイムの有効性を説明することであるため、MLPやCNNなどの単純なモデルのみが使用されます。
要件からすべてのパッケージをインストールします。txt
ベースライン実験は、従来の方法でモデルを訓練します。
python src/baseline_main.py --model=mlp --dataset=mnist --epochs=10
python src/baseline_main.py --model=mlp --dataset=mnist --gpu=0 --epochs=10
Federated Experimentには、多くのローカルモデルを使用してグローバルモデルをトレーニングすることが含まれます。
python src/federated_main.py --model=cnn --dataset=cifar --gpu=0 --iid=1 --epochs=10
python src/federated_main.py --model=cnn --dataset=cifar --gpu=0 --iid=0 --epochs=10
他のパラメーターのデフォルト値を変更して、さまざまな条件をシミュレートできます。オプションセクションを参照してください。
実験に解析されたさまざまなパラメーターのデフォルト値は、 options.pyで与えられます。詳細には、これらのパラメーターの一部が与えられます。
--dataset:デフォルト: 'Mnist'。オプション:「mnist」、「fmnist」、「cifar」--model:デフォルト: 'MLP'。オプション:「MLP」、「CNN」--gpu:デフォルト:なし(CPUで実行)。特定のGPU IDに設定することもできます。--epochs:トレーニングのラウンド数。--lr:デフォルトで0.01に設定された学習率。--verbose:詳細なログ出力。デフォルトでアクティブ化され、0に設定して非アクティブ化します。--seed:ランダムシード。デフォルト設定1に設定します。 --iid:ユーザー間のデータの分布。 IIDに設定したデフォルト。非IIDの場合は0に設定します。--num_users:ユーザー数。デフォルトは100です。--frac:フェデレーションアップデートに使用されるユーザーの割合。デフォルトは0.1です。--local_ep:各ユーザーのローカルトレーニングエポックの数。デフォルトは10です。--local_bs:各ユーザーのローカルアップデートのバッチサイズ。デフォルトは10です。--unequal:非IID設定で使用。ユーザー間でデータを均等にまたは不平等に分割するオプション。等しい分割のデフォルト設定0に設定されています。不均等なスプリット用に1に設定します。 この実験では、従来の方法で単一のモデルをトレーニングすることが含まれます。
パラメーター:
Optimizer: :: SGDLearning Rate: 0.01 Table 1:エポックのトレーニング後のテスト精度:
| モデル | テストACC |
|---|---|
| MLP | 92.71% |
| CNN | 98.42% |
この実験では、フェデレーション設定でグローバルモデルをトレーニングすることが含まれます。
フェデレーションパラメーター(デフォルト値):
Fraction of users (C) :0.1Local Batch size (B) :10Local Epochs (E) :10Optimizer :SGDLearning Rate :0.01 Table 2:グローバルエポックのトレーニング後のテスト精度:
| モデル | iid | 非IID(等しい) |
|---|---|---|
| MLP | 88.38% | 73.49% |
| CNN | 97.28% | 75.94% |