Skip to content

Fault Tolerant P2P Federated Learning System for Mobile

License

Notifications You must be signed in to change notification settings

yapatta/FTP2PFL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FTP2PFL(Fault Tolerant P2P Federated Learning For Mobile)

趣旨

yapattaが卒論研究で実装したもの. 分散合意アルゴリズムRaft1を用いることで, 集計サーバがダウンしても他のノードが集計サーバになれば固定の集計サーバを持たずにかつ耐障害性を持った状態で連合学習2を継続できるのでは?という発想のもと生まれたシステム. モバイル向けと謳っているだけあってバッテリ残量のシミューレーションが入っており, 集計サーバを決定する選挙においてバッテリー残量が一定以上のノードが集計サーバに選ばれる.

Install

$ cd ../python
$ python3 -m venv [newenvname]
$ source ./[newenvname]/bin/activate
$ pip install --upgrade pip
$ pip install -r requirements.txt

Test and Evaluation

1. APIサーバ起動

$ python3 ./python/server.py

2. Goのテスト実行

下のように実行すると, HTMLファイルに実行結果が記録される.

$ cd ./go
$ go test -v -race -run TestFLBasic |& tee /tmp/raftlog
... logging output
... test should PASS
$ go run ./tools/raft-testlog-viz/main.go < /tmp/raftlog
PASS TestFLBasic map[0:true 1:true 2:true TEST:true] ; entries: 150
... Emitted file:///tmp/TestElectionFollowerComesBack.html

PASS

もしくは

{"testname": "TestFLBasic", "counts": "4", "sec": "180"}

のようにjsonファイルにTest名, 評価試行回数, 評価時間を指定して

$ cd ./go
$ ./eval_all.sh basic.json

と実行すると./go/data/[testname]/[ノード数]-[時間]/[1-9][0-9]+.csvに評価結果が出力される. モデルが集計された時間のみが記録される.

その後,

$ cd ./data
$ python3 accuracy.py TestFLBasic 180
$ python3 loss.py TestFLBasic 180

と実行すると, "go/data/accuracy/TestFLBasic-180-accuracy.pdf", go/data/loss/TestFLBasic-180-loss.pdfのようなファイルが生成される. これらの画像は連合学習におけるモデルの精度, 損失をグラフ化したものである.

Footnotes

  1. https://raft.github.io/raft.pdf

  2. https://arxiv.org/abs/1602.05629

About

Fault Tolerant P2P Federated Learning System for Mobile

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published