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