プライバシーを守りながら分散協調学習 — APPFL でフェデレーテッドラーニングを構築・研究する
プライバシーを守りながら分散協調学習 — APPFL でフェデレーテッドラーニングを構築・研究する
ひとことでいうと
APPFL(Advanced Privacy-Preserving Federated Learning)は、複数の場所に散らばったデータを一箇所に集めることなく、みんなで一緒に機械学習モデルを育てられるオープンソースのフレームワーク(枠組みのこと)です。各参加者はそれぞれの手元でモデルを学習させ、「学んだ結果(モデルのパラメータ)」だけをサーバに送ります。サーバはその結果をまとめてモデルを強化し、また各参加者に配布します。差分プライバシー(個人データが漏れないよう数学的に守る仕組み)やクライアント認証にも対応しており、研究者から実運用を目指すエンジニアまで幅広く使える設計です。データを手放さずに共同学習できるこの仕組みを「フェデレーテッドラーニング(連合学習)」といいます。
こんな人におすすめ
1. 医療・金融など、データを外に出せない現場で働く研究者やエンジニア 患者の診断記録や顧客の取引データは、法律や規約で外部共有が難しいことがあります。APPFL を使えば、データそのものは機関の外に出さず、学習した結果だけを共有することで共同モデルを作れます。差分プライバシーを有効にすることで、さらに強力なプライバシー保護が実現します。
2. 連合学習のアルゴリズムを研究している人 新しい集約アルゴリズムや差分プライバシーの手法を、プラグイン(後付けで部品を追加する仕組み)として実装・検証できます。MPI を使えば HPC クラスタ(複数の高性能コンピュータをまとめた計算環境)上での大規模シミュレーションも比較的簡単に組み立てられます。
3. クラウドや HPC クラスタで FL 実験をしたい人 MPI・gRPC・Globus Compute という 3 種類の通信バックエンドが揃っているため、ノートパソコン 1 台でのシミュレーションから本番の分散クラスタへの移行まで、スムーズに進められます。
インストール・使い方
Step 1: Python 環境を用意する
APPFL の動作には Python が必要です。公式ドキュメントでは Python 3.10 を推奨しています。Conda(パッケージや実行環境を管理するツール)を使って専用の仮想環境を作ると、ほかのプロジェクトと混ざらず安心です。
ターミナル(文字で命令を送る画面)を開き、以下をコピー&ペーストして実行してください。
conda create -n appfl python=3.10
conda activate appfl
1 行目で「appfl」という名前の環境を作り、2 行目でその環境を有効にしています。以降の操作はこの環境の中で行います。
Step 2: APPFL をインストールする
環境を有効にした状態で以下のコマンドを実行します。最初に pip(Python のパッケージ管理ツール)を最新版にしてからインストールするのがおすすめです。
サンプル付き・MPI あり(最初はこれを推奨):
pip install pip --upgrade
pip install "appfl[examples,mpi]"
このコマンドで APPFL 本体・サンプルコード・MPI 対応ライブラリをまとめてインストールできます。
MPI が不要な場合:
pip install "appfl[examples]"
依存パッケージを最小限にしたい場合:
pip install "appfl"
Ubuntu(Linux の一種)で MPI 関連のビルドエラーが出た場合は、先にシステムパッケージを追加してください。
sudo apt install libopenmpi-dev libopenmpi-bin libopenmpi-doc
このコマンドで MPI の開発用ライブラリがシステムに追加され、インストールが通るようになります。
Step 3: 開発者向けインストール(コードを改造したい場合)
アルゴリズムを自分で追加・修正したい場合は、リポジトリ(ソースコードの置き場)ごとダウンロードして使う「editable インストール」が便利です。
git clone --single-branch --branch main https://github.com/APPFL/APPFL.git
cd APPFL
pip install -e ".[mpi,dev,examples]"
git clone でコードをダウンロードし、pip install -e で「このフォルダを直接パッケージとして使う」設定にしています。コードを編集すると即座に反映されるため、開発・実験に便利です。
動かしてみた
Python 3.12 の環境でリポジトリの構成を確認したところ、setup.py と pyproject.toml が揃っており、pip install appfl でインストールできるパッケージ構成になっています。
リポジトリには次のようなテストファイルが含まれており、機能の幅の広さが確認できます。
tests/test_setup_ssl.py
tests/test_mnist.py
tests/test_secure_appfl_dir.py
tests/test_tes_client_safe_paths.py
tests/test_naive_authenticator.py
tests/test_s3_credentials_perms.py
test_mnist.py の存在から、MNIST データセット(手書き数字の画像集で、機械学習の入門によく使われる定番データ)を使ったフェデレーテッドラーニングのサンプルが同梱されており、手元でシミュレーション実験をすぐ始められる構成であることが分かります。test_setup_ssl.py や test_naive_authenticator.py からは、SSL/TLS(通信を暗号化して保護する仕組み)とクライアント認証のテストが整備されていることが確認できます。test_s3_credentials_perms.py はクラウドストレージ連携時の認証情報を検証するもので、実運用シナリオへの対応も盛り込まれています。
デモについて
APPFL はサーバとクライアントが複数存在する分散システムです。そのため、ブラウザ上で動く単一のアプリとしてフルデモを動かすことは構造上難しい設計になっています。実際の動作確認には MPI または gRPC を使った複数プロセス環境が必要です。詳しいチュートリアルや設定サンプルは 公式ドキュメント(appfl.rtfd.io) で確認できます。Discord コミュニティも活発に動いており、セットアップに困ったときは気軽に相談できます。
はじめの一歩 — すぐ試せる実践のコツ
インストールが終わったら、まず同梱の examples/ フォルダにあるサンプルスクリプトを動かしてみましょう。以下のポイントを押さえると、スムーズに始められます。
- MPI シミュレーションから始める: 最初は 1 台のパソコンで複数クライアントをシミュレートできる MPI 方式が手軽です。プロセス数(同時に起動するプログラムの数)は「クライアント数 + 1(サーバ分)」に設定します。
# クライアント数 2 でシミュレーション(プロセス数は 3)
mpiexec -n 3 python examples/mpi/run_mpi.py --num_clients 2
- gRPC を試すときはターミナルを 2 枚開く: サーバとクライアントを別々に起動する必要があります。まず 1 枚目のターミナルでサーバを立ち上げ、次に 2 枚目でクライアントを起動します。
# サーバ起動(1 枚目のターミナル)
python examples/grpc/run_server.py
# クライアント起動(2 枚目のターミナル)
python examples/grpc/run_client.py --client_id 0
-
差分プライバシーは設定ファイルで有効化: YAML(人間が読みやすい設定ファイルの書き方)または Python の辞書形式の設定に
privacy_budgetなどのパラメータを書くだけで、差分プライバシーが有効になります。コードの書き換えは不要です。 -
集約アルゴリズムの切り替えも設定一行: FedAvg 以外のアルゴリズムに変えたい場合も、設定ファイルの 1 箇所を書き換えるだけです。プラグアンドプレイ(後から部品を付け替えられる)設計のおかげで、実験のたびにコードを大きく改修する必要がありません。
-
公式ドキュメントと Discord を活用する: セットアップに詰まった場合は、appfl.rtfd.io のチュートリアルを参照するか、Discord コミュニティで質問するとすぐに助けてもらえます。
活用例
APPFL が実際にどんな場面で役立つか、具体的なシーンをまとめました。
-
医療画像診断モデルの共同訓練: 複数の病院が患者データを外に出さずに、共通の診断 AI モデルを協力して育てます。差分プライバシーを有効にすることで、集約済みモデルから個人データが逆算されるリスクを数学的に抑えられます。
-
IoT センサーデータのエッジ連合学習: 工場や車両に搭載されたセンサーが生成するデータをクラウドに送らず、エッジデバイス(現場に置かれた小型コンピュータ)でローカル学習し、モデルパラメータだけを集約サーバに送ります。SZx などの圧縮機能でネットワーク転送量をさらに抑えられます。
-
金融機関のリスクモデル協調学習: 複数の金融機関が顧客の取引データを共有せずに、詐欺検知や信用スコアリングモデルを共同で改善します。gRPC とクライアント認証を組み合わせることで、なりすましや不正参加を防ぎながら安全に運用できます。
-
大学・研究機関をまたいだデータ解析: 異なる大学が保有するデータセットをそれぞれの施設に置いたまま、共同で統計モデルや予測モデルを訓練できます。Globus Compute を使えば、研究機関向けの認証付きセキュアな通信環境で実験を進められます。
-
スマートフォンアプリの個人化モデル学習: ユーザーのテキスト入力や行動ログをデバイスの外に出さず、端末ごとにローカル学習しながら全体のモデルを改善するシナリオにも応用できます。非同期スケジューリングに対応しているため、通信状態が不安定な環境でも学習を継続できます。
-
新しい FL アルゴリズムのベンチマーク比較: 研究者が提案した新しい集約アルゴリズムを、既存の FedAvg などと同一条件で比較する実験に活用できます。アルゴリズムの切り替えが設定ファイル 1 行で済むため、実験の再現性を高めやすい環境が整っています。
用語とポイント解説
フェデレーテッドラーニング(Federated Learning / 連合学習) データを一箇所に集めず、各参加者がそれぞれの手元で学習し、モデルのパラメータ(学習結果の数値)だけをサーバに送って集約する機械学習の手法です。かんたんに言うと「データを共有せずに、みんなで一緒に賢いモデルを作る方法」です。プライバシーを守りながら共同学習できるため、医療・金融・IoT などデータの移動が難しい分野で注目されています。
差分プライバシー(Differential Privacy / DP) 学習結果に意図的なノイズ(わずかなランダム値)を加え、個人データが逆算されるリスクを数学的に証明できるレベルまで下げる技術です。かんたんに言うと「結果を少しぼかすことで、個人が特定されないように守る仕組み」です。APPFL ではグローバル(サーバ側)とローカル(クライアント側)の両方の差分プライバシーに対応しています。
FedAvg(Federated Averaging) 各クライアントがローカルで学習したモデルの重みを、サーバで平均して集約するアルゴリズムです。かんたんに言うと「みんなの学習結果を足して割り算する、一番シンプルな集約方法」です。APPFL が標準でサポートする集約手法の一つで、研究や検証の基準としてよく使われています。
MPI(Message Passing Interface) 並列計算向けの通信規格で、複数のプロセス(プログラムの実行単位)の間でデータをやり取りするための標準的な仕組みです。かんたんに言うと「たくさんのコンピュータ(またはプロセス)が一斉に動くときの、情報伝達のルール」です。APPFL では MPI を使って、1 台のパソコン上でも複数クライアントのシミュレーションを手軽に実行できます。
gRPC Google が開発した高性能な RPC(リモートプロシージャコール:離れた場所にあるプログラムを呼び出す仕組み)フレームワークです。かんたんに言うと「離れた場所にあるプログラム同士が、高速・安全にやり取りするための通信ツール」です。APPFL では分散環境でのサーバ・クライアント間通信バックエンドとして利用できます。
Globus Compute 研究機関向けの分散コンピューティングサービスで、セキュアな認証と承認を備えた環境でコードを遠隔実行できます。かんたんに言うと「大学や研究所が使う、安全な認証付きの遠隔計算サービス」です。APPFL では Globus Compute を通信バックエンドとして選ぶことで、研究機関間をまたいだ本格的な FL 実験が可能になります。
モデル圧縮(Compressor) ニューラルネットワークのパラメータ(重みの数値)をサーバに送る前に圧縮することで、通信量を大幅に削減する機能です。かんたんに言うと「送るデータを小さくまとめて、通信コストを下げる仕組み」です。APPFL は SZ2・SZ3・ZFP・SZx という科学計算向けの損失圧縮ライブラリに対応しており、ネットワーク帯域が限られたエッジ環境でも活用しやすい設計です。
サーバエージェント / クライアントエージェント APPFL の設計の中心にある 2 種類の役割です。サーバエージェントはモデルの集約と配布を担い、クライアントエージェントはローカルデータでの学習を担います。かんたんに言うと「先生役(サーバ)と生徒役(クライアント)に分かれて、協力してモデルを育てる構造」です。各コンポーネントはモジュール(独立した部品)として差し替えられるため、実験のニーズに合わせて柔軟に組み合わせられます。
スケジューラ(Scheduler) クライアントがサーバに接続するタイミングや順序を管理するコンポーネントです。かんたんに言うと「参加者が不揃いに到着しても、うまく調整して学習を進める係」です。APPFL では同期方式(全員がそろってから集約する)と非同期方式(来た順に処理する)の両方に対応しており、通信が不安定な環境でも学習を止めにくい設計です。
ぜひ医療・金融データを扱う組織間の共同研究や、IoT エッジデバイスを活用したリアルタイム学習などに活用してみてはいかがでしょうか。