AI News HubLIVE
站内改写

使用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在標籤不平衡場景下的潛在優勢。此外,教程還展示瞭如何定位最終的全局模型檢查點,以便後續分析或複用。

總之,本教程提供了一個端到端的聯邦學習工作流程,涵蓋了從數據劃分、客户端訓練、服務器協調到結果可視化的完整步驟。讀者可以基於此模板進一步探索其他聯邦學習算法或調整參數,以應對更復雜的非獨立同分布數據場景。