yapattaが卒論研究で実装したもの. 分散合意アルゴリズムRaft1を用いることで, 集計サーバがダウンしても他のノードが集計サーバになれば固定の集計サーバを持たずにかつ耐障害性を持った状態で連合学習2を継続できるのでは?という発想のもと生まれたシステム. モバイル向けと謳っているだけあってバッテリ残量のシミューレーションが入っており, 集計サーバを決定する選挙においてバッテリー残量が一定以上のノードが集計サーバに選ばれる.
$ cd ../python
$ python3 -m venv [newenvname]
$ source ./[newenvname]/bin/activate
$ pip install --upgrade pip
$ pip install -r requirements.txt
$ python3 ./python/server.py
下のように実行すると, 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
と実行すると, , のようなファイルが生成される. これらの画像は連合学習におけるモデルの精度, 損失をグラフ化したものである.