联邦计算 (FC) 服务器是设备端个性化 (ODP) 提供的联邦学习的一部分。本文档旨在介绍联邦计算服务器 (FC Server)、其组件以及所使用的技术。本文档首先简要概述了该架构,然后详细介绍了每个组件。本文还讨论了各组件如何协同工作以提供联邦学习环境,并提供了有关扩缩和分片工作负载的策略。
训练流程
训练包括 FC 客户端和 FC 服务器之间的数据流。FC 客户端是一个核心 Android 模块,可在设备上训练机器学习模型并与 FC 服务器互动。FC 服务器会在可信执行环境 (TEE) 中安全地处理和汇总来自 FC 客户端的结果。
训练包括以下步骤:
- 设备上的 FC 客户端从密钥服务下载公共加密密钥。
- FC 客户端向 FC 服务器签到并获取训练任务。
- FC 客户端下载训练计划以及最新版本的模型(版本 N)。
- FC 客户端使用本地数据和方案进行训练。
- FC 客户端使用在第 0 步中获得的公钥对相应设备的贡献进行加密,然后将其上传到 FC 服务器。
- FC 客户端会通知 FC 服务器其训练已完成。
- FC 服务器会等待,直到有足够多的客户端提交了贡献。
- 触发一轮聚合。
- 加密的贡献由汇总器加载到可信执行环境 (TEE) 中。
- 根据 NIST 的 RFC 9334 远程证明程序 (RATS) 架构,汇总器会向协调器证明自身。成功完成证明后,密钥服务会向其授予解密密钥。在 Shamir 密钥共享方案中,这些密钥可能会拆分到多个密钥提供方。
- 聚合器会进行跨设备聚合,根据适当的差分隐私 (DP) 机制进行剪裁和噪声处理,并输出添加噪声后的结果。
- 聚合器会触发模型更新器。
- 模型更新器会加载汇总的贡献,并将其应用于模型版本 N,以创建模型版本 N + 1。新模型已推送到模型存储空间。
FC 服务器可部署在支持 TEE 和相关安全功能的任何云服务上。我们正在评估公共云提供商和底层技术,但目前,以下部分将介绍使用 Confidential Space 的 Google Cloud 示例实现。
概要架构
FC 服务器在 Google Cloud 中部署了以下组件:
| 组件 | 说明 |
| 任务管理服务 | 用于管理训练任务的网络服务。合作伙伴应使用任务管理 API 来创建训练任务、列出所有现有训练任务、取消任务以及检索所有训练状态。 |
| 任务分配服务 | 一种基于 HTTPS 的 Web 服务,客户端设备会定期签入以获取训练任务并报告训练状态。 |
| 聚合器 | 在 Confidential Space 中运行的后台服务。它运行 ODP 编写的工作负载。它必须向协调器证明自己,协调器会限制对解密密钥的访问。只有经过成功证明的汇总器才能解密客户端设备提交的贡献,并执行跨设备汇总。 |
| 模型更新程序 | 在 Confidential Space 中运行的后台服务,用于将汇总的梯度应用于模型。 |
组件详情
以下各部分将概要架构细化为更多详细信息:
任务管理服务
任务管理服务包含两个子组件:任务管理 Web 服务和任务调度程序服务,这两个组件都部署在 GKE 上。
任务管理
这是一组前端 Web 服务,用于接收 HTTPS 请求并从任务数据库创建或获取任务。
任务调度程序
持续扫描任务数据库的后台服务。它负责管理训练流程,例如创建新的训练轮次和迭代。
任务数据库
符合 ANSI SQL 标准的数据库,用于存储任务、迭代和分配信息。在此实现中,Google Cloud Spanner 用作底层数据库服务。
任务分配服务
任务分配服务是托管在 GKE 上的前端 Web 服务。它接收来自 FC 客户端的请求,并在适用时分配训练任务。
此处的任务数据库与任务管理服务中的任务数据库是同一数据库实例。
Aggregator Service
聚合器和模型更新器
聚合器和模型更新器类似。它们是可在 Confidential Space 中安全处理数据的后台服务。离线作业之间的通信通过 PubSub 进行。
梯度、汇总梯度、模型和计划
- 用于存储客户端设备上传的(加密)梯度的梯度存储空间。
- 用于存储聚合、剪裁和添加噪声后的梯度信息的聚合梯度存储区。
- 用于存储训练计划、模型和权重的模型和计划存储空间。
收集器
收集器是一项后台服务,可在训练轮次期间定期统计客户端设备提交的数据。当有足够的提交内容时,它会通知汇总器开始汇总。
服务主机
所有无法访问敏感信息的服务都托管在 GKE 上。
可能会接触敏感信息的所有服务都托管在 Confidential Space 中。
所有敏感数据都使用由多个方拥有的密钥服务管理的加密密钥进行加密。只有在合法的、启用了保密计算的保密空间版本中运行的经过成功证明的 ODP 编写的开源代码才能访问解密密钥。
在一个服务单元中,计算资源如下所示:
可伸缩性
前面介绍的基础设施侧重于一个服务单元。
一个服务单元使用一个 Cloud Spanner。如需了解重要限制,请参阅 Spanner 配额和限制。
此架构的每个组件都可以单独扩缩。为此,您可以使用标准扩缩机制在 Confidential Space 或 GKE 集群内扩缩容量。实际上,可以通过添加更多以下实例来提高处理能力:
- 任务分配 Web 服务
- 任务管理 Web 服务
- 聚合器实例
- 模型更新器实例
弹性
FC 服务器的弹性通过使用复制存储的灾难恢复来处理。如果您对灾难恢复感兴趣,则应启用跨区域数据复制。这样一来,即使发生灾难(例如天气事件导致数据中心中断),服务也会从上一轮训练中恢复。
Spanner
FC 服务器的默认实现使用 Google Cloud Spanner 作为数据库来存储用于控制训练流程的任务状态。在选择多区域配置之前,您应根据业务需求评估一致性和可用性之间的权衡。
任何 Spanner 实例中均未存储任何用户数据或其衍生数据(无论是原始数据还是加密数据)。您可以随意使用 Spanner 提供的任何灾难恢复功能。
Spanner 会记录更改历史记录。聚合器和模型更新器会按训练轮次存储数据,并且每轮的结果会单独存储,不会相互覆盖。因此,在发生灾难时,服务可以从上一轮训练继续运行。
Google Cloud Storage
FC 服务器的默认实现使用 Google Cloud Storage 来存储 Blob 数据,例如模型、训练计划和加密的设备贡献。
此设计中有三个 GCS 实例:
- 设备贡献内容:从设备上传的加密设备贡献内容。
- 模型:训练计划、模型及其权重。
- 汇总梯度:由聚合器生成的汇总梯度。
存储在 GCS 中的数据可以是:
- 开发者提供的数据,例如训练计划 OR
- 潜在的私密数据,因为它们源自用户信号(受多协调器支持的加密保护),例如设备上传的梯度和汇总梯度;或者
- 从用户信号中派生但应用差分隐私技术后的非私密数据,例如模型权重。
您应评估一致性和可用性之间的权衡,并选择合适的 GCS 数据可用性和持久性功能。您应指定自己的数据保留政策。
复制和备份
除了 Google Cloud 提供的数据复制机制外,您还可以选择定期备份 Spanner 和 GCS 中的数据。例如,您可以使用跨云复制服务和产品。由于这些配置高度依赖于业务需求,因此 ODP 不提供示例。当前的设计考虑到了开发者对这类复制和备份的潜在需求。因此,它与第三方提供的复制和备份服务及产品兼容。