使用NVIDIA FLARE構建並比較非獨立同分布CIFAR-10上的FedAvg與FedProx聯邦學習分步指南
本教程詳細介紹瞭如何使用NVIDIA FLARE構建高階聯邦學習實驗,在非獨立同分布CIFAR-10資料集上比較FedAvg和FedProx演算法。透過狄利克雷分佈模擬客戶端的標籤不平衡,並使用NVFlare Job API定義和啟動聯邦任務,Client API處理本地訓練和模型交換。文章提供了完整的程式碼實現和實驗結果視覺化。
文章情報
要點
- 使用NVIDIA FLARE構建聯邦學習實驗,比較FedAvg與FedProx。
- 採用狄利克雷分佈(alpha=0.3)將CIFAR-10資料劃分為3個非獨立同分布客戶端。
- 透過NVFlare Job API配置伺服器端協調,Client API實現客戶端本地訓練與模型上傳。
- 實驗結果表明FedProx在非獨立同分布資料上可能優於FedAvg,透過全域性測試準確率曲線對比。
為什麼重要
這條新聞值得關注,因為使用NVIDIA FLARE構建聯邦學習實驗,比較FedAvg與FedProx。
技術影響
可能影響模型選型、推理成本、產品能力和評測基準。
在聯邦學習領域,處理非獨立同分布(non-IID)資料是一個核心挑戰。本文提供了一個完整的實踐教程,基於NVIDIA FLARE框架,在CIFAR-10資料集上對比了兩種經典聯邦學習演算法:FedAvg和FedProx。教程面向有一定深度學習基礎的開發者,透過實際的程式碼示例展示瞭如何構建和執行聯邦學習實驗。
首先,我們準備實驗環境。教程要求安裝nvflare、torch、torchvision和matplotlib等庫。我們需要定義實驗引數,包括客戶端數量(3個)、通訊輪次(5輪)、本地訓練輪次(1輪)、批大小(64)、學習率(0.01)以及控制非獨立同分布程度的狄利克雷引數alpha(0.3)。資料集CIFAR-10被下載到指定目錄,供所有模擬客戶端共享。
為了模擬現實場景中的標籤分佈不均,教程使用狄利克雷分佈將訓練資料劃分給各個客戶端。透過設定固定的隨機種子,每個客戶端程序可以獨立地生成相同的全域性劃分。這樣,每個客戶端得到的資料標籤比例各不相同,更接近真實聯邦學習環境。
客戶端訓練指令碼是實驗的核心部分。我們定義了一個小型CNN模型(包含兩個卷積層和兩個全連線層),用於CIFAR-10的10分類任務。指令碼使用NVFlare的Client API進行初始化,接收伺服器下發的全域性模型引數,並在本地資料上進行訓練。對於FedProx演算法,我們引入了近端項(proximal term),透過在損失函式中新增模型引數與全域性模型引數的L2距離懲罰項來控制區域性更新偏離全域性模型的程度。教程中的mu引數設定為0.0(FedAvg)和0.1(FedProx)。
在伺服器端,我們使用NVFlare的Job API建立FedAvgJob。透過ScriptRunner將客戶端指令碼附加到每個模擬站點(site-1、site-2、site-3),並傳遞統一的實驗引數。然後,我們分別執行兩個實驗:標準FedAvg和帶近端項的FedProx。每個實驗結束後,訓練日誌以CSV格式儲存,包含每輪通訊後的全域性測試準確率。
最後,我們載入兩個實驗的準確率記錄,繪製學習曲線。曲線展示了隨著通訊輪次的增加,全域性模型在非獨立同分布CIFAR-10測試集上的表現。透過對比,我們可以直觀地觀察到FedProx相對於FedAvg在標籤不平衡場景下的潛在優勢。此外,教程還展示瞭如何定位最終的全域性模型檢查點,以便後續分析或複用。
總之,本教程提供了一個端到端的聯邦學習工作流程,涵蓋了從資料劃分、客戶端訓練、伺服器協調到結果視覺化的完整步驟。讀者可以基於此模板進一步探索其他聯邦學習演算法或調整引數,以應對更復雜的非獨立同分布資料場景。