【ふぇろっそ】連合学習を試してみよう
こんにちは。Rosso AI部、連合学習担当(?)の中の人です。
連載も第3回目となり、そろそろ本気でネタどうしようとなってきたわけですが、そろそろ連合学習を実際に動かしてみたい!という方のために、サクッと連合学習を試せるフレームワークを紹介しようと思います。
(なんかどこかで聞き覚えのあるフレーズのような???)
その名も『FroseAI』。弊社オリジナルのフレームワークです。
(夏にインターンのために私が作ったとかそういう話はとりあえず略)
FroseAiのインストール
FroseAi は現在まだ PyPi へパッケージを公開していません。(もう少しお待ちください)
現在は下記いずれかの方法でインストールが可能です。
GitHub から直接 pip install する
git clone して setup.py からインストール
GitHub から直接 pip install
setup.py を用意していますので、下記コマンドで pip install が可能です。
pip install git+https://github.com/rosso-ai-dataanalytics/FroseAi.git
ただし、直接 pip install してしまうと、以下で紹介する config ファイルが付いてきません。そのため config ファイルは自分の手で書く必要があります。
git clone して setup.py からインストール
GitHub から git clone する場合は、下記コマンドでインストールしてください。
git clone git@github.com:rosso-ai-dataanalytics/FroseAi.git
python setup.py install
setup.py から requirements.txt を読み込むようにしていますので、上のコマンドで関連パッケージのインストールまで行われます。
えっと、pyproject.toml ?? 今は保留です!(逃)
FroseAi を実行してみる
さて、早速動かしてみたいところですが、その前に config ファイルを用意します。こちらのファイルを参考に config ファイルを書いてみます。
Configファイルを書いてみる
common:
job_name: "fedavg_cifar10"
server_url: "localhost:9200"
random_seed: 0
client_num: 4
log_output_path: "./log"
device: "cuda"
model:
model: "resnet18"
data:
dataset: "CIFAR10"
data_cache_dir: "./data"
partition_method: "hetero"
partition_alpha: 1.0
train:
round: 30
batch_size: 100
inner_loop: 100
learning_rate: 0.1
weight_decay: 0.01
はい、これだけです。これを froseai_conf_cifar10.yml として保存します。
(細かい設定については次回以降紹介していきます)
device には "cuda" を選択しています。GPU がない PC で動かす場合は、ここを "cpu" へ変更してください。ただし、本設定は 4クライアントを 4プロセス同時で動かすため、よほど高スペックなCPUでないと厳しいかもしれません。
実行してみよう
FroseAi はインストールすると、 froserun コマンドが実行できます。
これでサクッと動きます!
froserun froseai_conf_cifar10.yml
動きましたでしょうか?(いろいろワーニングは出てきますけど!!)
メトリクスのログは ./log ディレクトリ下に metrics.csv が出力されます。見つからない場合は何とか探してみてください。
メトリクスをプロットすると、こんな感じになるかと思います。
ん? ResNet18 で CIFAR10 の結果なのに、結果が低すぎないかと!?
実はこの設定、連合学習のキツキツの設定だったりします。上の config ファイルをある部分を1行変えると、劇的に結果が変わります!
さて、それはどこでしょう???
と、この話の続きは次回とします。
次回は同じお題を用いて連合学習の難しさについて、紹介してみます。
お楽しみに!!
最後に、株式会社Rosso AI部では、連合学習の相談も承っております。
こちらから、ご一報いただけると幸いです。