Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fedmeta #2438

Merged
merged 157 commits into from
Oct 16, 2023
Merged

Fedmeta #2438

Show file tree
Hide file tree
Changes from 142 commits
Commits
Show all changes
157 commits
Select commit Hold shift + click to select a range
71d50fb
VCE with ActorPool
jafermarq Jun 25, 2023
6f91e70
each clientproxy gets its result (discarding other logic in server.py)
jafermarq Jun 26, 2023
73d4bae
Merge branch 'main' into VCE_with_actorpool
jafermarq Jul 8, 2023
f6588dd
custom ActorPool addressable by each ClientProxy
jafermarq Jul 8, 2023
a1ee630
parse CPU/GPU resources to spawn correct size of ActorPool; other sma…
jafermarq Jul 8, 2023
8b09717
handling clinents failure
jafermarq Jul 11, 2023
248cba5
formatting
jafermarq Jul 11, 2023
5ff115a
client failure OK; actor restarted if it fails; after N fails actor i…
jafermarq Jul 12, 2023
e15eb45
fix
jafermarq Jul 13, 2023
72a7bde
tolerant to full node disconnect
jafermarq Jul 14, 2023
20449ba
Merge branch 'main' into VCE_with_actorpool
jafermarq Jul 15, 2023
45b4021
better
jafermarq Jul 15, 2023
9456470
consolidate actorpool and utilities
jafermarq Jul 15, 2023
ea967c4
better handling of exception when actor dies for good
jafermarq Jul 15, 2023
5386bff
w/ previous
jafermarq Jul 15, 2023
591e667
minor changes
jafermarq Jul 17, 2023
3e9d1a8
suport for node abrupt disconnect
jafermarq Jul 17, 2023
18de9e4
reverting lock positioning
jafermarq Jul 17, 2023
0213d9d
minor changes
jafermarq Jul 17, 2023
7a3c791
minor changes; hints on how to try if simulation fails
jafermarq Jul 17, 2023
256b471
Merge branch 'main' into VCE_with_actorpool
jafermarq Jul 17, 2023
774dacb
Merge branch 'main' into VCE_with_actorpool
danieljanes Aug 11, 2023
c47780f
Format
danieljanes Aug 11, 2023
fdd55da
Merge branch 'VCE_with_actorpool' of github.com:adap/flower into VCE_…
danieljanes Aug 11, 2023
36ba7e7
Update src/py/flwr/simulation/ray_transport/ray_actor.py
jafermarq Aug 12, 2023
b0238b9
Apply suggestions from code review
jafermarq Aug 12, 2023
73ef836
tweaks post-comments; fix to pool_size_from_resources
jafermarq Aug 12, 2023
6f2c374
Added TF actor with GPU fix; now you can specify which VCEActor to use
jafermarq Aug 12, 2023
58d6722
minor tweaks
jafermarq Aug 12, 2023
b6f5fa7
option to specify actor scheduling strategy
jafermarq Aug 15, 2023
8980a44
format
jafermarq Aug 15, 2023
d851f4c
.
jafermarq Aug 15, 2023
c4883f3
tweaks
jafermarq Aug 16, 2023
9b2d27e
tweaks, fixes for serialisation
jafermarq Aug 16, 2023
5cfaa84
Merge branch 'main' into VCE_with_actorpool
jafermarq Aug 16, 2023
ff48ee1
types and more
jafermarq Aug 16, 2023
400e89d
w/ previous
jafermarq Aug 16, 2023
ed5b01d
p37
jafermarq Aug 16, 2023
fcb42a1
yes
jafermarq Aug 16, 2023
151a507
actor generator; periodically check for cluster growth
jafermarq Aug 17, 2023
f524fff
w/ previous
jafermarq Aug 17, 2023
de7e252
better assesment of number of actors that fit in cluster; fix
jafermarq Aug 17, 2023
935a4ca
minor tweaks
jafermarq Aug 17, 2023
9a41ead
init simulation-pytorch test
jafermarq Aug 18, 2023
1539c9e
added pyproject.toml
jafermarq Aug 18, 2023
3873f07
added CI stuff correctly?
jafermarq Aug 18, 2023
4e7e5dd
conditional ECE & driver tests
jafermarq Aug 18, 2023
a848a34
fix
jafermarq Aug 18, 2023
ee85152
reverted adding tests
jafermarq Aug 21, 2023
a3eeedc
Merge branch 'main' into VCE_with_actorpool
jafermarq Aug 21, 2023
6b8227c
Merge branch 'main' into VCE_with_actorpool
jafermarq Aug 21, 2023
6de808a
Merge branch 'main' into VCE_with_actorpool
jafermarq Aug 22, 2023
b6a51c4
Apply suggestions from code review
jafermarq Aug 22, 2023
a8ce928
Merge branch 'main' into VCE_with_actorpool
jafermarq Aug 22, 2023
9decadb
create Fedmeta
JinsooKim-KR Aug 23, 2023
4561d98
Test Source Tree
JinsooKim-KR Aug 23, 2023
60e51ac
Section "About this baseline"
JinsooKim-KR Aug 23, 2023
4b4d63c
Test branch
JinsooKim-KR Aug 23, 2023
4862a25
test branch
JinsooKim-KR Aug 23, 2023
3d9fde6
Delete Test file
JinsooKim-KR Aug 23, 2023
e75b0dc
update Fedmeta strategy base
JinsooKim-KR Aug 24, 2023
ab1d160
Merge commit '4ed211d45725218abccc469ea4c6e087aee56454'
JinsooKim-KR Aug 24, 2023
1a361c2
based fedmeta test
JinsooKim-KR Aug 28, 2023
969120d
Merge branch 'main' of https://github.com/adap/flower
JinsooKim-KR Aug 28, 2023
bafe162
Merge branch 'main' of https://github.com/adap/flower
JinsooKim-KR Aug 28, 2023
f075201
add Fedmeta data preprocessing & client list
JinsooKim-KR Aug 31, 2023
7a104bd
Merge branch 'main' of https://github.com/adap/flower
JinsooKim-KR Aug 31, 2023
5312b13
fix Fedmeta base code
JinsooKim-KR Aug 31, 2023
ba0f908
add Fedavg dataset preprocessing
JinsooKim-KR Aug 31, 2023
652ac7c
setting local --> server interpreter
JinsooKim-KR Sep 1, 2023
4c9f435
add fedavg learning(ray & gpu)
JinsooKim-KR Sep 1, 2023
e607a5c
Merge branch 'main' of https://github.com/adap/flower
JinsooKim-KR Sep 4, 2023
e461bc1
completed FedMeta(fedavg)
JinsooKim-KR Sep 4, 2023
23e895c
fix dataset and models
JinsooKim-KR Sep 6, 2023
024c5e6
Merge branch 'main' of https://github.com/adap/flower
JinsooKim-KR Sep 6, 2023
d53a22f
move to other gpu server
JinsooKim-KR Sep 26, 2023
b18acc5
update README.md
JinsooKim-KR Sep 27, 2023
e8e0e74
Test README
JinsooKim-KR Sep 27, 2023
9236c3d
fix README
JinsooKim-KR Sep 27, 2023
d4de284
Update ReadME
JinsooKim-KR Sep 28, 2023
32a5170
Test ReadME
JinsooKim-KR Sep 28, 2023
c16e34c
fixed ReadME
JinsooKim-KR Sep 29, 2023
df3d0fa
updata README
JinsooKim-KR Sep 29, 2023
4ad8fa1
Finish Fedmeta experiments
JinsooKim-KR Sep 29, 2023
7a93f79
update ReadMe and remove wandb for experiments
JinsooKim-KR Sep 29, 2023
5e63db7
Update Fedmeta
JinsooKim-KR Oct 1, 2023
14667f9
fix readme
JinsooKim-KR Oct 1, 2023
5077b52
fix readme
JinsooKim-KR Oct 1, 2023
2765987
test graph
JinsooKim-KR Oct 1, 2023
80cfbaf
delete dir
JinsooKim-KR Oct 1, 2023
978f000
fix code tree
JinsooKim-KR Oct 1, 2023
e8e8fef
fix code tree
JinsooKim-KR Oct 1, 2023
8d0f6e8
Merge branch 'main' of https://github.com/adap/flower
JinsooKim-KR Oct 1, 2023
d2118e0
test pull
JinsooKim-KR Oct 1, 2023
2e62222
fix codeline
JinsooKim-KR Oct 1, 2023
d2da352
add branch
JinsooKim-KR Oct 1, 2023
930cf51
Update Fedmeta
JinsooKim-KR Oct 1, 2023
1011dd4
remove wandb for test
JinsooKim-KR Oct 1, 2023
8d4e380
Pull request Fedmeta version 1.0
JinsooKim-KR Oct 1, 2023
eee5d54
fix README.md
JinsooKim-KR Oct 1, 2023
787a10d
Update README.md
JinsooKim-KR Oct 1, 2023
fe23e6a
Update data.yaml
JinsooKim-KR Oct 1, 2023
1241e96
change name lowercase
JinsooKim-KR Oct 1, 2023
0881153
change dir name lowercase
JinsooKim-KR Oct 1, 2023
2fb5ef8
delete annotation
JinsooKim-KR Oct 1, 2023
dec7c7a
Update baselines/fedmeta/README.md
JinsooKim-KR Oct 4, 2023
274a145
Update baselines/fedmeta/README.md
JinsooKim-KR Oct 4, 2023
cb7e9a7
Update baselines/fedmeta/pyproject.toml
JinsooKim-KR Oct 4, 2023
62ed001
Update baselines/fedmeta/README.md
JinsooKim-KR Oct 4, 2023
f89b389
Update baselines/fedmeta/README.md
JinsooKim-KR Oct 4, 2023
55f2bd8
Update baselines/fedmeta/README.md
JinsooKim-KR Oct 4, 2023
336cf3f
rename file name
JinsooKim-KR Oct 4, 2023
3ad8608
python main.py algo=fedavg data=femnist path=(your leaf dataset path)…
JinsooKim-KR Oct 4, 2023
f743f17
Update baselines/fedmeta/README.md
JinsooKim-KR Oct 4, 2023
1bcd4d4
Update README.md
JinsooKim-KR Oct 4, 2023
e02d6bd
rename docs --> _static
JinsooKim-KR Oct 4, 2023
ff1b58c
Add grid line plot
JinsooKim-KR Oct 4, 2023
c841b29
Update README.md
JinsooKim-KR Oct 4, 2023
268e1b8
fix grid line in README.md
JinsooKim-KR Oct 4, 2023
c6697e8
test README.md grid line
JinsooKim-KR Oct 4, 2023
7860b50
fixed feedback
JinsooKim-KR Oct 4, 2023
d831cb9
fix annotation
JinsooKim-KR Oct 5, 2023
a082665
fix annotation
JinsooKim-KR Oct 5, 2023
89baf06
update ReadME.md
JinsooKim-KR Oct 5, 2023
d4e3112
Update baselines/fedmeta/pyproject.toml
JinsooKim-KR Oct 7, 2023
bf7460d
Update baselines/fedmeta/pyproject.toml
JinsooKim-KR Oct 7, 2023
0fcea37
Update pyproject.toml
JinsooKim-KR Oct 7, 2023
06733dd
Add grid line in graph
JinsooKim-KR Oct 7, 2023
3f8836b
Add grid line in graph
JinsooKim-KR Oct 7, 2023
85406aa
update utill.py
JinsooKim-KR Oct 7, 2023
3ccb926
Fixed code for "./dev/format-baseline.sh fedmeta" and "./dev/test-bas…
JinsooKim-KR Oct 9, 2023
0da42a9
Update baselines/fedmeta/fedmeta/client.py
JinsooKim-KR Oct 9, 2023
2523ef1
Update baselines/fedmeta/pyproject.toml
JinsooKim-KR Oct 12, 2023
aa0030d
Update baselines/fedmeta/README.md
JinsooKim-KR Oct 12, 2023
21887ba
Update code
JinsooKim-KR Oct 12, 2023
0a4327d
for pull origin/fedmeta
JinsooKim-KR Oct 12, 2023
5543092
Merge branch 'fedmeta' of https://github.com/jinsoogod/flower into fe…
JinsooKim-KR Oct 12, 2023
a99da4e
Update baselines/fedmeta/pyproject.toml
JinsooKim-KR Oct 12, 2023
9077f3f
Update README.md
JinsooKim-KR Oct 12, 2023
5d24c33
Update baselines/fedmeta/fedmeta/main.py
JinsooKim-KR Oct 12, 2023
7966d24
Merge branch 'main' into fedmeta
jafermarq Oct 12, 2023
d584ba3
align with main
jafermarq Oct 12, 2023
4532326
Update baselines/fedmeta/README.md
JinsooKim-KR Oct 12, 2023
bd865c3
fixed README.md
JinsooKim-KR Oct 12, 2023
e144dea
fixed README.md
JinsooKim-KR Oct 12, 2023
df5fc0d
formatted
jafermarq Oct 12, 2023
f52dd48
attempt at fix
jafermarq Oct 12, 2023
e191808
fix?
jafermarq Oct 12, 2023
e3ed392
changed permissions, does it fix?
jafermarq Oct 12, 2023
48d7cb9
now fixing pillow to 9.5, minior edit to readme
jafermarq Oct 12, 2023
79b4ce3
in changelog
jafermarq Oct 12, 2023
e206895
updated readme based on slack discussion
jafermarq Oct 16, 2023
deda708
Merge branch 'main' into fedmeta
jafermarq Oct 16, 2023
c3fdd01
Merge branch 'main' into fedmeta
jafermarq Oct 16, 2023
5e984e2
Merge branch 'main' into fedmeta
jafermarq Oct 16, 2023
986c86c
Merge branch 'main' into fedmeta
jafermarq Oct 16, 2023
0b9f5f6
Merge branch 'main' into fedmeta
jafermarq Oct 16, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
202 changes: 202 additions & 0 deletions baselines/fedmeta/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.

"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:

(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and

(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and

(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and

(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.

You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
139 changes: 139 additions & 0 deletions baselines/fedmeta/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
---
title: Federated Meta-Learning with Fast Convergence and Efficient Communication
url: https://arxiv.org/abs/1802.07876
labels: [meta learning, maml, meta-sgd, personalization]
dataset: [FEMNIST, SHAKESPEARE]
---

# FedMeta: Federated Meta-Learning with Fast Convergence and Efficient Communication

****Paper:**** : [arxiv.org/abs/1802.07876](https://arxiv.org/abs/1802.07876)
JinsooKim-KR marked this conversation as resolved.
Show resolved Hide resolved

****Authors:**** :Fei Chen, Mi Luo, Zhenhua Dong, Zhenguo Li, Xiuqiang He

****Abstract:**** :Statistical and systematic challenges in collaboratively training machine learning models across distributed networks of mobile devices have been the bottlenecks in the real-world application of federated learning. In this work, we show that meta-learning is a natural choice to handle these issues, and propose a federated meta-learning framework FedMeta, where a parameterized algorithm (or meta-learner) is shared, instead of a global model in previous approaches. We conduct an extensive empirical evaluation on LEAF datasets and a real-world production dataset, and demonstrate that FedMeta achieves a reduction in required communication cost by 2.82-4.33 times with faster convergence, and an increase in accuracy by 3.23%-14.84% as compared to Federated Averaging (FedAvg) which is a leading optimization algorithm in federated learning. Moreover, FedMeta preserves user privacy since only the parameterized algorithm is transmitted between mobile devices and central servers, and no raw data is collected onto the servers.


## About this baseline

****What’s implemented:**** : We reimplemented the experiments from the paper 'FedMeta: Federated Meta-Learning with Fast Convergence and Efficient Communication' by Fei Chen (2018). which proposed the FedMeta(MAML & Meta-SGD) algorithm. Specifically, we replicate the results from Table 2 and Figure 2 of the paper.

****Datasets:**** : FEMNIST and SHAKESPEARE from Leaf Federated Learning Dataset

****Hardware Setup:**** : These experiments were run on a machine with 16 CPU threads and 1 GPU(GeForce RTX 2080 Ti). **However, the FedMeta experiment using the Shakespeare dataset required more computing power (more than 4 GPUs).** Out of Memory errors may occur with some clients, but federated learning can continue to operate.

****Contributors:**** : **Jinsoo Kim and Kangyoon Lee**


## Experimental Setup

****Task:**** : A comparison task of four algorithms(FedAvg, FedAvg(Meta), FedMeta(MAML), FedMeta(Meta-SGD)) in the categories of Image Classification and next-word prediction.

****Model:**** :This directory implements two models:
* A two-layer CNN network as used in the FedMeta paper for Femnist (see `models/CNN_Network`).
* A StackedLSTM model used in the FedMeta paper for Shakespeare (see `models/StackedLSTM`).

**You can see more detail in Apendix.A of the paper**

****Dataset:**** : This baseline includes the FEMNIST dataset and SHAKESPEARE. For data partitioning and sampling per client, we use the Leaf GitHub([LEAF: A Benchmark for Federated Settings](https://github.com/TalwalkarLab/leaf)). The data and client specifications used in this experiment are listed in the table below (Table 1 in the paper).

**Shakespeare Dataset Issue** : In the FedMeta paper experiment, the Shakespeare dataset had 1126 users. However, due to a current bug, the number of users has decreased to 660 users. Therefore, we have only maintained the total number of data.

| Dataset | #Clients | #Samples | #Classes | #Partition Clients | #Partition Dataset |
|:-----------:|:--------:|:--------:|:--------:|:---------------------------------------------------------------:|:----------------------:|
| FEMNIST | 1109 | 245,337 | 62 | Train Clients : 0.8 <br>Valid Clients : 0.1, Test Clients : 0.1 | Sup : 0.2<br>Qry : 0.8 |
| SHAKESPEARE | 138 | 646,697 | 80 | Train Clients : 0.8 <br>Valid Clients : 0.1, Test Clients : 0.1 | Sup : 0.2<br>Qry : 0.8 |

**The original specifications of the Leaf dataset can be found in the Leaf paper(_"LEAF: A Benchmark for Federated Settings"_).**

****Training Hyperparameters:**** : The following table shows the main hyperparameters for this baseline with their default value (i.e. the value used if you run `python main.py algo=? data=?` directly)

| Algorithm | Dataset | Clients per Round | Number of Rounds | Batch Size | Optimizer | Learning Rate(α, β) | Client Resources | Gradient Step |
|:-----------------:|:--------------:|:-----------------:|:----------------:|:----------:|:---------:|:-------------------:|:---------------------------------------:|:-------------:|
| FedAvg | FEMNIST<br>SHAKESPEARE | 4 | 2000<br>400 | 10 | Adam | 0.0001<br>0.001 | {'num_cpus': 4.0,<br>'num_gpus': 0.25 } | - |
| FedAvg(Meta) | FEMNIST<br>SHAKESPEARE | 4 | 2000<br>400 | 10 | Adam | 0.0001<br>0.001 | {'num_cpus': 4.0,<br>'num_gpus': 0.25 } | - |
| FedMeta(MAML) | FEMNIST<br>SHAKESPEARE | 4 | 2000<br>400 | 10 | Adam | (0.001, 0.0001)<br>(0.1, 0.01) | {'num_cpus': 4.0,<br>'num_gpus': 1.0 } | 5<br>1 |
| FedMeta(Meta-SGD) | FEMNIST<br>SHAKESPEARE | 4 | 2000<br>400 | 10 | Adam | (0.001, 0.0001)<br>(0.1, 0.01) | {'num_cpus': 4.0,<br>'num_gpus': 1.0 } | 5<br>1 |


## Environment Setup
```bash
#Environment Setup
# Set python version
pyenv install 3.10.6
pyenv local 3.10.6

# Tell poetry to use python 3.10
poetry env use 3.10.6

# install the base Poetry environment
poetry install
poetry shell
```

## Running the Experiments

****Download Dataset**** : Go [LEAF: A Benchmark for Federated Settings](https://github.com/TalwalkarLab/leaf) and Use the command below! You can download dataset (FEMNIST and SHAKESPEARE).
JinsooKim-KR marked this conversation as resolved.
Show resolved Hide resolved
```bash
# clone LEAF repo
git clone https://github.com/TalwalkarLab/leaf.git
# prepare the Leaf GitHub libraries.
pip3 install numpy
pip3 install pillow

# navigate to data directory and then the dataset
cd leaf/data/femnist
#FEMNIST dataset Download command for these experiments
JinsooKim-KR marked this conversation as resolved.
Show resolved Hide resolved
./preprocess.sh -s niid --sf 0.3 -k 0 -t sample

# navigate to data directory and then the dataset
cd leaf/data/shakespeare
#SHAKESEPEARE dataset Download command for these experiments
./preprocess.sh -s niid --sf 0.16 -k 0 -t sample
```

*Run `./preprocess.sh` with a choice of the following tags*
* `-s` := 'iid' to sample in an i.i.d. manner, or 'niid' to sample in a non-i.i.d. manner; more information on i.i.d. versus non-i.i.d. is included in the 'Notes' section
* `--sf` := fraction of data to sample, written as a decimal; default is 0.1
* `-k` := minimum number of samples per user
* `-t` := 'user' to partition users into train-test groups, or 'sample' to partition each user's samples into train-test groups

More detailed tag information can be found on Leaf GitHub.

****Start experiments**** :
```bash
# FedAvg + Femnist Dataset
python -m fedmeta.main algo=fedavg data=femnist path=(your leaf dataset path)/leaf/data/femnist/data

# FedAvg(Meta) + Femnist Dataset
python -m fedmeta.main algo=fedavg_meta data=femnist path=./leaf/data/femnist/data

# FedMeta(MAML) + Femnist Dataset
python -m fedmeta.main algo=fedmeta_maml data=femnist path=./leaf/data/femnist/data

# FedMeta(Meta-SGD) + Femnist Dataset
python -m fedmeta.main algo=fedmeta_meta_sgd data=femnist path=./leaf/data/femnist/data



#FedAvg + Shakespeare Dataset
python -m fedmeta.main algo=fedavg data=shakespeare path=./leaf/data/shakespeare/data

#FedAvg(Meta) + Shakespeare Dataset
python -m fedmeta.main algo=fedavg_meta data=shakespeare path=./leaf/data/shakespeare/data

#FedMeta(MAML) + Shakespeare Dataset
python -m fedmeta.main algo=fedmeta_maml data=shakespeare path=./leaf/data/shakespeare/data

#FedMeta(Meta-SGD) + Shakespeare Dataset
python -m fedmeta.main algo=fedmeta_meta_sgd data=shakespeare path=./leaf/data/shakespeare/data

```


## Expected Results
If you proceed with all of the above experiments, You can get a graph of your experiment results as shown below along that `./femnist or shakespeare/graph_params/result_graph.png`.

| FEMNIST | SHAKESPEARE |
|:-------------------------------------------:|:----------------------------------------------------:|
| ![](_static/femnist_result_graph.png) | ![](_static/shakespeare_result_graph.png) |
JinsooKim-KR marked this conversation as resolved.
Show resolved Hide resolved
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions baselines/fedmeta/fedmeta/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""Template baseline package."""
Loading
Loading