AI News HubLIVE
サイト内リライト2 分で読了

NVIDIA FLAREを使った非IID CIFAR-10でのFedAvgとFedProxの構築と比較ステップバイステップガイド

このチュートリアルでは、NVIDIA FLAREを使用して高度な連合学習実験を構築し、非IID CIFAR-10データセット上でFedAvgとFedProxを比較します。ディリクレ分布を使ってクライアントのラベル不均衡をシミュレートし、NVFlare Job APIで連合タスクを定義・起動、Client APIでローカルトレーニングとモデル交換を処理します。完全なコード実装と実験結果の可視化を提供します。

ソースMarkTechPost著者: Sana Hassan

連合学習では、非独立同一分布(non-IID)データへの対応が重要な課題です。本チュートリアルでは、NVIDIA FLAREフレームワークを使用して、CIFAR-10データセット上で2つの古典的な連合学習アルゴリズム、FedAvgとFedProxを比較する実践的なガイドを提供します。ディープラーニングの基礎知識を持つ開発者を対象としており、実際のコード例を通じて連合学習実験の構築と実行方法を示します。

まず、実験環境を準備します。必要なライブラリ(nvflare、torch、torchvision、matplotlib)をインストールし、実験パラメータを定義します。クライアント数は3、通信ラウンド数は5、ローカルエポック数は1、バッチサイズ64、学習率0.01、非IIDの度合いを制御するディリクレパラメータαは0.3とします。CIFAR-10データセットは指定ディレクトリにダウンロードされ、すべてのシミュレートクライアントで共有されます。

現実のラベル不均衡をシミュレートするため、ディリクレ分布を使用してトレーニングデータを各クライアントに分割します。固定シードを使用することで、各クライアントプロセスが独立して同じグローバル分割を生成できます。これにより、各クライアントは異なるラベル分布を持つデータを受け取り、実際の連合学習環境に近づきます。

クライアントトレーニングスクリプトは実験の中核です。CIFAR-10の10クラス分類用に、2つの畳み込み層と2つの全結合層からなる小型CNNモデルを定義します。スクリプトはNVFlareのClient APIを初期化し、サーバーからグローバルモデルパラメータを受信してローカルデータでトレーニングします。FedProxアルゴリズムでは、損失関数にモデルパラメータとグローバルモデルパラメータのL2距離ペナルティ項を追加することで、局所的な更新がグローバルモデルから逸脱するのを抑制します。チュートリアルではmuパラメータを0.0(FedAvg)と0.1(FedProx)に設定しています。

サーバー側では、NVFlareのJob APIを使用してFedAvgJobを作成します。ScriptRunnerを介してクライアントスクリプトを各シミュレートサイト(site-1、site-2、site-3)にアタッチし、統一された実験パラメータを渡します。その後、標準FedAvgと近接項付きFedProxの2つの実験をそれぞれ実行します。各実験後、トレーニングログがCSV形式で保存され、各通信ラウンド後のグローバルテスト精度が含まれます。

最後に、両実験の精度記録を読み込み、学習曲線をプロットします。曲線は、通信ラウンドの増加に伴う非IID CIFAR-10テストセットでのグローバルモデルのパフォーマンスを示します。比較により、FedProxがラベル不均衡シナリオでFedAvgに対して潜在的な優位性を持つことが視覚的に確認できます。さらに、チュートリアルでは最終的なグローバルモデルチェックポイントの場所も示しており、その後の分析や再利用が可能です。

結論として、本チュートリアルはデータ分割、クライアントトレーニング、サーバー調整、結果可視化までのエンドツーエンドの連合学習ワークフローを提供します。読者はこのテンプレートを基に、他の連合学習アルゴリズムを探求したり、パラメータを調整してより複雑な非IIDデータシナリオに対応することができます。