公司动态

在 AWS 上使用 FedML、Amazon EKS 和 Amazon SageMaker 进行联邦

2026-01-27 13:33:26



在 AWS 上使用 FedML、Amazon EKS 和 Amazon SageMaker 的联邦学习

作者:Randy DeFauw Al Nevarez Arnab Sinha Chaoyang He Salman Avestimehr Hans Nesbitt Prachi Kulkarni Samir Lad Stephen Kraemer Tamer Sherif日期:2024年3月15日

关键要点

联邦学习 (FL) 是一种以分散式方式训练机器学习模型的技术,特别适合于需要保护数据隐私的情况。利用 FedML、Amazon EKS 和 Amazon SageMaker 可以在保持数据安全的情况下协作训练 ML 模型。在医疗保健领域,FL 可以提高患者预测的准确性,并遵从严格的数据隐私规范。

许多组织正在实施机器学习ML以通过自动化和使用大型分散数据集来增强商业决策。然而,跨不同地点共享未经清理的敏感信息会带来重大安全和隐私风险,特别是在医疗等受监管行业中。为了应对这一问题,联邦学习FL作为一种分散式的合作 ML 训练技术,提供了数据隐私的保障,同时保持准确性和忠实性。FL 训练在客户端的独立安全会话中进行,客户仅将输出模型参数发送到集中式伺服器,而不是实际数据。这一方式减轻了数据隐私的担忧,同时促进了有效的模型训练协作。

尽管 FL 为改善数据隐私和安全性迈出了一步,但并不是保证的解决方案。在缺乏访问控制和加密的安全网络中,敏感信息仍然会暴露给攻击者。此外,若通过推断攻击重建本地训练的信息也可能会泄露私人数据。为了减轻这些风险,FL 模型在与训练协调器分享信息之前,使用个性化的训练算法及有效的掩码和参数化。强大的网络控制可以进一步降低推断和导出风险。

在本文中,我们分享了一种使用 FedML、Amazon EKS 和 Amazon SageMaker 的 FL 方法,旨在提升患者预后的同时解决数据隐私和安全问题。

医疗领域中联邦学习的必要性

医疗领域在做出准确的患者护理预测和评估时,依赖于分散的数据源。为了保护隐私而限制可用的数据源,会对结果准确性造成负面影响,最终影响患者照护质量。因此,在 AWS 客户确保跨分散实体的隐私和安全时,ML 产生了挑战。

医疗组织必须遵循严格的合规性规定,例如美国的健康保险流通与问责法案HIPAA,同时实施 FL 解决方案。在医疗行业中,数据隐私、安全性和合规性的保障变得更加关键,这需要可靠的加密、访问控制、审计机制和安全通信协议。此外,医疗数据集通常包含复杂和异构的数据类型,这使得在 FL 设置中实现数据标准化和互操作性成为挑战。

使用案例概述

本篇中列出的使用案例涉及不同组织的心脏病数据,ML 模型将运行分类算法来预测患者的心脏病。由于这些数据来自不同组织,我们使用联邦学习来整合这些发现。

来自加州大学尔湾分校机器学习资料库的 心脏病数据集 是一个被广泛使用的心血管研究和预测建模数据集。它包含303个样本,每个样本代表一名患者,并包括临床和人口统计属性以及心脏病的有无。

这个多变量数据集包含患者信息的76个属性,其中14个属性最常用于开发和评估 ML 算法,以预测根据给定属性患者是否有心脏病。

FedML 框架

尽管市面上有多种 FL 框架可供选择,但我们选择使用 FedML 框架,因为它是开源的并支持多种 FL 模式。FedML 提供了一套流行的开源库、MLOps 平台和应用生态系统,用于 FL 解决方案的开发和部署。它提供全面的工具、库和算法,使用户能够在分散环境中实施和实验 FL 算法。FedML 解决了 FL 中的数据隐私、通信和模型聚合等挑战,并提供友好的用户界面和可定制组件。FedML 框架是模型无关的,包括最近新增对大型语言模型LLMs的支持。更多信息请参见 释出 FedLLM:使用 FedML 平台基于专有数据建立您自己的大型语言模型。

FedML Octopus

在实际的 FL 使用案例中,系统层级和异质性是主要挑战,因为不同数据孤岛之间的基础设施可能有所不同包括 CPU 和 GPU。在这种情况下,可以使用 FedML Octopus。

FedML Octopus 是一个工业级的跨孤岛 FL 平台,用于跨组织和跨账户的训练。结合 FedML MLOps,它允许开发者或组织以安全的方式在任何规模下进行开放合作。FedML Octopus 在每个数据孤岛内运行分散式训练范例,并使用同步或异步训练。

FedML MLOps

FedML MLOps 允许本地编写的代码在 FedML 框架中部署。在启动训练之前,您需要先建立 FedML 帐户,然后在 FedML Octopus 中创建并上传服务器和客户端包。详细步骤可参考 步骤 和 介绍 FedML Octopus:将联邦学习扩展至生产环境并简化 MLOps。

解决方案概述

我们将 FedML 部署到多个 EKS 集群中,并与 SageMaker 集成来跟踪实验。我们使用 Amazon EKS Blueprints for Terraform 部署所需的基础设施。EKS Blueprints 有助于组建完整的 EKS 集群,这些集群与运行所需的作业软件完全引导。使用 EKS Blueprints,可以用基础设施即代码IaC蓝图描述 EKS 环境的预期状态,如控制平面、工作节点和 Kubernetes 附加组件。在配置蓝图之后,您可以使用持续部署自动化来跨多个 AWS 帐户和区域创建一致的环境。

本文中共享的内容反映了实际情况和经验,但重要的是要注意,不同地点的这些情况的部署可能有所不同。虽然我们使用单个 AWS 帐户和单独的 VPC,但重要的是要理解每个环境的具体情况和配置可能不同。因此,提供的信息应用作一般指南,并可能需要根据具体要求和当地条件进行调整。

以下图示展示了我们的解决方案架构。

除了 FedML MLOps 在每次训练运行中的追踪外,我们还使用 Amazon SageMaker Experiments 用来跟踪每个客户端模型和集中模型的性能。

SageMaker Experiments 是 SageMaker 的一项功能,允许您创建、管理、分析和比较 ML 实验。通过记录实验详情、参数和结果,研究者可以准确重现和验证他们的工作。这还便于对不同方法进行有效比较和分析,从而支持有根据的决策。跟踪实验还促进了迭代改进,提供了模型进展的见解,使研究者能够从以往的迭代中学习,最终加速更有效解决方案的开发。

我们将以下内容发送到 SageMaker Experiments 中:

模型评估指标 训练损失和曲线下面积AUC超参数 迭代次数、学习率、批量大小、优化器和权重衰减

前提条件

要跟随本文,您应具备以下前提条件:

龙猫机场一个 AWS 帐户本地访问 AWS 命令行界面 (AWS CLI) 或使用 AWS CloudShellTerraformkubectl一个 FedML 帐户 ID

部署解决方案

首先,将包含范例代码的库克隆到本地:

bashgit clone https//githubcom/awssamples/federatedlearningwithfedmlonaws

然后使用以下命令部署使用案例基础设施:

bashterraform initterraform apply

Terraform 模板可能需要 2030 分钟才能完全部署。部署完成后,请按照以下部分的步骤运行 FL 应用程序。

创建 MLOps 部署包

作为 FedML 文档的一部分,我们需要创建将由 MLOps 平台分发的客户端和服务器包,以开始训练。

要创建这些包,请运行位于根目录中的以下脚本:

bash /buildmlopspkgsh

这将在项目根目录的以下目录中创建相应的包:

bashmlops/distpackages

上传包到 FedML MLOps 平台

完成以下步骤以下载包:

在 FedML UI 上,选择导航窗格中的 我的应用程序。选择 新应用程序。

从您的工作站上传客户端和服务器包。

您还可以调整超参数或创建新参数。

触发联邦训练

要运行联邦训练,请完成以下步骤:

在 FedML UI 上,选择导航窗格中的 项目列表。选择 创建新项目。输入组名和项目名称,然后选择 确定。

选择新创建的项目,然后选择 创建新运行 来触发训练运行。

选择边缘客户端设备和集中聚合器服务器进行此次训练运行。选择在之前步骤中创建的应用程序。

更新任意超参数或使用默认设置。选择 开始 开始训练。

选择 训练状态 标签,并等待训练运行完成。您也可以浏览可用的标签。当训练完成后,选择 系统 标签查看您在边缘服务器的训练时间与聚合事件。

查看结果和实验详情

训练完成后,您可以使用 FedML 和 SageMaker 查看结果。

在 FedML UI 上的 模型 标签中,您可以看到聚合器和客户端模型。您也可以从网站下载这些模型。

您还可以登录到 Amazon SageMaker Studio,并在导航窗格中选择 实验。

以下截图显示了登录的实验情况。

实验追踪代码

在本节中,我们探讨整合 SageMaker 实验追踪与 FL 框架训练的代码。

在 AWS 上使用 FedML、Amazon EKS 和 Amazon SageMaker 进行联邦

在您选择的编辑器中,打开以下文件夹以查看注入 SageMaker 实验追踪代码的修改:

bashcd flfedmlai/

为了追踪训练,我们使用 创建 SageMaker 实验 的代码,通过 logparameter