• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 3 月 19 日下午 2 點,鎖定 NVIDIA AI 網絡中文專場。立即注冊觀看
    數據科學

    集成 Flower和 NVIDIA FLARE,加速聯邦學習生態系統發展

    近年來, FlowerNVIDIA FLARE 等開源系統已成為聯邦學習 (FL) 領域的關鍵工具,每個系統都有其獨特的關注點。Flower 支持統一的 FL 方法,使研究人員和開發者能夠輕松設計、分析和評估 FL 應用。 隨著時間的推移,它積累了一套豐富的策略和算法,在學術界和行業中培育了一個蓬勃發展的社區。

    另一方面,NVIDIA FLARE 面向生產級應用程序,提供專為可靠性和可擴展性而構建的企業就緒型運行時環境。通過專注于強大的基礎設施,FLARE 使 FL 部署能夠無縫滿足現實世界環境的需求。

    本文介紹了我們在連接這兩個框架方面所做的努力,并展示了它們的聯合優勢如何提升整個 FL 生態系統。這種集成使使用 Flower 開發的應用能夠在 FLARE 運行時上以原生方式運行,而無需修改任何代碼。通過將 Flower 廣泛采用、易于使用的設計工具和 API 與 FLARE 的工業級運行時統一起來,這種集成簡化了端到端部署流程。

    結果如何?無縫、高效且易于訪問的 FL 工作流將研究創新與生產就緒性聯系起來,為研究人員和從業者等方面的聯合學習提供強力支持。

    集成目標:通過 FLARE 部署 Flower 應用

    愿景很簡單:讓用戶能夠直接在 FLARE 運行時中部署 Flower ServerApps 和 ClientApps,而無需修改代碼。

    工作原理如下。Flower 和 FLARE 基于客戶端/服務器通信擁有相似的架構基礎。Flower 和 FLARE 都依賴 gRPC 在客戶端和服務器之間進行通信,并且都提供了多作業支持,使多個作業能夠共享客戶端和服務器,而無需在服務器主機上額外打開端口。

    這種共享架構使集成這兩個框架變得簡單易行。通過將 FLARE 用作 Flower 應用的通信工具,您可以將任何 Flower 應用轉換為 FLARE 作業。此過程使 Flower 的 SuperNodes 不再通過 SuperLink 進行直接通信,而是通過 FLARE 的 runtime environment 進行路由 (圖 1)。

    A diagram shows a Flower ServerApp icon and three Flower ClientApp icons connected through the NVIDIA FLARE Runtime.
    圖 1。Flower 和 NVIDIA FLARE 集成

    這種集成不僅無縫,而且功能強大。它可以解鎖以下功能:

    • 輕松調配:FLARE 提供啟動套件 (包括證書) ,以簡化初始化。
    • 自定義代碼部署:您可以使用 Flower 用戶友好型 API 和開發環境,針對獨特的應用需求輕松部署定制代碼。
    • 經過測試的實現:您可以在 Flower 社區提供的 大量聯合算法庫 的基礎上進行構建。
    • 增強安全性:內置的身份驗證和授權機制可確保安全訪問和控制。
    • 可靠的通信:借助 FLARE 的 ReliableMessage 功能,可解決連接穩定性問題。
    • 協議靈活性:支持多種通信協議 (包括 gRPC、HTTP、TCP 和 Redis) ,可確保靈活實施。
    • 點對點通信:P2P 功能支持各方直接交互,開辟了多樣化的部署拓撲。
    • 多作業效率:FLARE 的運行時環境可以同時處理多個 Flower 應用,無需額外的端口。

    通過將 Flower 易于使用的開發工具和 API 與 FLARE 的強大運行時相結合,此集成彌合了 FL 研究和生產之間的差距,創建了一個從實驗輕松擴展到部署的緊密生態系統。

    集成設計:通過 FLARE 規劃 Routing Flower

    FL 在客戶端和服務器之間的高效通信中蓬勃發展。領先的 FL 框架 Flower 使用 gRPC 作為其通信協議。與 FLARE 集成時,您可以通過 FLARE 的運行時環境路由 Flower 的 gRPC 消息,以保持兼容性和可靠性。

    這是關鍵的調整。與其直接向服務器發送消息,不如將其端點重定向到每個 FLARE 客戶端內的本地 gRPC 服務器 (LGS) 。這種簡單的重新路由使 Flower 應用能夠在 FLARE 中無縫運行,而無需更改原始應用代碼 (圖 2) 。

    A diagram shows the FLARE server and gRPC client (LGC) communicating with Flower SuperLink and the ServerApp. There are bidirectional arrows leading from the server to two sites, each with FLARE Client, gRPC server (LGS), Flower SuperNode, and ClientApp.
    圖 2. 在 FLARE 中集成 Flower 應用

    以下是 Flower SuperNode 和 Flower SuperLink 之間的通信路徑:

    1. Flower SuperNode 會生成 gRPC 消息,并將其發送給 FLARE 客戶端中托管的 LGS。
    2. FLARE 客戶端將此消息作為可靠的 FLARE 消息轉發到 FLARE 服務器。
    3. 在 FLARE 服務器中,本地 gRPC 客戶端 (LGC) 與 Flower SuperLink 進行交互,將消息轉發到預期目的地。
    4. SuperLink 會處理消息,并將響應發送回 FLARE 服務器中的 LGC。
    5. FLARE 服務器將響應路由回 FLARE 客戶端。
    6. FLARE 客戶端通過 LGS 將響應發送到 Flower SuperNode。

    這種設計可確保 Flower 的 SuperNode 和 SuperLink 通過 FLARE 實現流暢通信。SuperNode 可以作為獨立進程運行,也可以在與 FLARE 客戶端相同的進程中運行,從而提供部署靈活性。

    通過此設置,您可以利用 FLARE 強大的運行時功能,同時保持應用程序的簡單性和模塊化,增強現實世界 FL 部署中的可用性和可擴展性。

    無需更改代碼即可集成

    要展示此集成,請直接在 FLARE 中運行 Flower 的 PyTorch-Quickstart 示例。

    首先,創建一個 Flower ServerApp:

    # Define strategy
    strategy = FedAvg(...)
     
    # Flower ServerApp
    def server_fn(context: Context):
        # Read from config
        num_rounds = context.run_config["num-server-rounds"]
     
        # Define config
        config = ServerConfig(num_rounds=num_rounds)
     
        return ServerAppComponents(strategy=strategy, config=config)
     
     
    # Create ServerApp
    app = ServerApp(server_fn=server_fn)

    接下來,定義 Flower ClientApp:

    # Define FlowerClient and client_fn
    class FlowerClient(NumPyClient):
        def fit(self, parameters, config):
            set_weights(net, parameters)
            results = train(net, trainloader, testloader, epochs=1, device=DEVICE)
            return get_weights(net), len(trainloader.dataset), results
     
        def evaluate(self, parameters, config):
            set_weights(net, parameters)
            loss, accuracy = test(net, testloader)
            return loss, len(testloader.dataset), {"accuracy": accuracy}
     
     
    def client_fn(context: Context):
        """Create and return an instance of Flower `Client`."""
        return FlowerClient().to_client()
     
     
    # Flower ClientApp
    app = ClientApp(
        client_fn=client_fn,
    )

    通過集成 Flower 和 FLARE,使用 Flower 框架開發的應用程序可在 FLARE 運行時中無縫運行,您無需進行任何更改。

    有關端到端示例,請參閱 NVIDIA FLARE 中的 Flower App(PyTorch)

    確保再現性:使用 FLARE 運行 Flower 應用

    集成框架最關鍵的一個方面是確保功能和結果保持不變。當將 Flower 應用集成到 FLARE 環境中時,我們的目標是保留與在獨立的 Flower 設置中運行應用時相同的結果。

    為了證明這一點,我們進行了一項實驗:

    1. 我們在兩個環境 ( FLARE 內的獨立 Flower 和 Flower) 中為客戶端使用相同的隨機種子初始化了 Flower 應用。
    2. 我們追蹤并繪制了這兩個場景的訓練曲線(圖 3)。
    Two graphs show exactly the same loss curves for two clients regardless of whether they were run in Flower natively or within the NVIDIA FLARE runtime environment.
    圖 3. 在本機 (a) 或 FLARE (b) 中運行 Flower 應用程序的對比

    當疊加兩個設置中的訓練曲線時,它們會精確對齊,確認通過 FLARE 傳遞的消息不會影響結果。

    這種一致性是一個重要的里程碑,因為它證明,將 Flower 與 FLARE 集成可保持訓練過程的完整性。它使您能夠將其 Flower 應用無縫過渡到 FLARE 的運行時環境,而無需擔心性能或結果的偏差。

    解鎖新的可能性:與 FLARE 實驗追蹤的混合集成

    想象一下,將兩種強大框架的精華結合起來:Flower 直觀的 FL 開發工具與 FLARE 強大的運行時功能。通過這種混合集成,愿景將變為現實。

    通過在 FLARE 運行時中部署 Flower 應用,您可以解鎖令人興奮的新功能,例如使用 SummaryWriter 的 FLARE 實驗追蹤。現在,當在 FLARE 的運行時環境中部署時,您可以將 FLARE 的 metric streaming 直接無縫集成到您的 Flower 客戶端代碼中。為此,請將 FLARE 的 SummaryWriter 添加到 Flower 的客戶端應用中:

    # initializes NVFlare interface
    from nvflare.client.tracking import SummaryWriter
     
     
    # Define FlowerClient and client_fn
    class FlowerClient(NumPyClient):
        def __init__(self, context: Context):
            super().__init__()
            self.writer = SummaryWriter()
            self.flwr_context = context
     
            if "step" not in context.state.metrics_records:
                self.set_step(0)
     
        def set_step(self, step: int):
            self.flwr_context.state = RecordSet(metrics_records={"step": MetricsRecord({"step": step})})
     
        def get_step(self):
            return int(self.flwr_context.state.metrics_records["step"]["step"])
     
        def fit(self, parameters, config):
            step = self.get_step()
            set_weights(net, parameters)
            results = train(net, trainloader, testloader, epochs=1, device=DEVICE)
     
            self.writer.add_scalar("train_loss", results["train_loss"], step)
            self.writer.add_scalar("train_accuracy", results["train_accuracy"], step)
            self.writer.add_scalar("val_loss", results["val_loss"], step)
            self.writer.add_scalar("val_accuracy", results["val_accuracy"], step)
     
            self.set_step(step + 1)
     
            return get_weights(net), len(trainloader.dataset), results

    在代碼示例中,您可以使用 Flower 的 metrics_records 跟蹤當前的訓練步驟。

    A plot shows how accuracy metrics are streamed to the server and visualized.
    圖 4。使用 FLARE 的實驗跟蹤運行并使用 TensorBoard 在中央服務器中可視化的 Flower ClientApps

    通過這種集成,研究人員和開發者可以:

    • 輕松監控進度 :直接在熟悉的 Flower 工作流程中精確追蹤實驗。
    • 使用統一的功能:利用 FLARE 的工業級功能,同時不會放棄 Flower 的簡單性。

    有關更多信息,請參閱在/NVIDIA/NVFlare GitHub 庫中使用 TensorBoard 流式傳輸運行模擬

    總結

    這僅僅是兩個前沿 FL 框架結合在一起時可能實現的目標的開始。Flower 和 NVIDIA Flare 集成為更高效、更可擴展且功能豐富的聯邦學習應用程序打開了大門!

    對于研究人員和開發者而言,在 FL 環境中保持再現性至關重要。通過這種集成,可確保再現性,從而確保對實驗和結果的信任。無縫集成也成為可能,消除了使用 FLARE 進行企業級部署的障礙。

    通過在兩個部署中保留相同的結果,我們確保您可以放心地使用 FLARE 的強大運行時,而不會影響其 Flower 應用程序的可靠性或性能。

    有關更多信息,請參閱以下資源:

    有任何問題或意見嗎?請通過 federatedlearning@nvidia.com 聯系我們。

    ?

    0

    標簽

    人人超碰97caoporen国产