云原生技术赋能联邦学习

2021-09-24 15:49:28 浏览数 (1)

题图:望京升明月,中秋节摄于北京奥林匹克观光塔

(本文作者系 VMware 中国研发云原生实验室架构师,联邦学习 KubeFATE / FATE 开源项目维护者和贡献者。)

相关信息:

招聘云原生开发工程师

2021智能云边开源峰会:云原生、人工智能和边缘计算

需要加入KubeFATE开源项目讨论群的同学,请关注“亨利笔记”公众号后回复 “kubefate” 即可。

在我们之前的关于联邦机器学习的文章“联邦学习:保护隐私安全以及克服数据孤岛的机器学习”中介绍了联邦学习的基本概念以及一些典型的用例。在这篇文章中,我们将紧接上篇文章,探索我们使用联邦学习的方式以及如何通过云原生的方式来解决其复杂性。

联邦AI技术的推动者

FATE 是一个由 Linux 基金会托管的开源项目,主要贡献者有微众银行、VMware等公司。它专注于提供一个安全的计算框架来支持联邦AI生态系统,实现了基于同态加密和多方计算的安全计算协议,同时也支持各种机器学习算法。

FATE 专为工业应用而设计,与其他开源联邦学习框架的不同之处在于:

  1. 该框架开箱即用,为数据工程和机器学习 (ML) 提供了常见和常用的横向和纵向联邦算法。它包括一个工作流引擎,用于构建定制的全生命周期机器学习任务。
  2. 它将各种安全协议——同态加密、秘密共享、RSA、Diffie-Hellman 等——应用于不同的算法,以符合安全、审计和法律的要求。
  3. 为大规模应用提供自主研发的分布式计算、传输和存储引擎。并且还包括与主要开源项目集成的能力,例如计算、传输或存储(Spark、Pulsar、RabbitMQ 和 HDFS)。

下图展示了 FATE 的基本架构

资料来源:微众银行

  • FederatedML 是包含联邦学习算法的组件。所有模块均以可插拔方式开发,并且可用作工作流引擎的组件以增强可扩展性。
  • FATE-Flow 就如名字所示——FATE 的工作流服务。它负责调度和管理任务的生命周期以构建端到端的联邦学习服务流。
  • FATE-Board 是用来可视化和衡量整个联邦学习训练过程的工具。
  • FATE-Serving 是一种高性能、可扩展的在线联邦学习服务模型,支持纵向联邦学习。

FATE架构的更多细节,请参考:

https://github.com/FederatedAI/FATE

云原生联邦学习解决方案

与其他模块化系统一样,FATE各个服务之间的自治与协作为我们避免了很多依赖以及扩展的烦恼。然而,这也带来了管理每个服务的复杂配置和将所有组件统一到系统中的挑战。联邦学习算法依赖于不同的数学库、优化指令库、设备驱动程序、多方计算库、加密库和其他库。与传统机器学习相比,网络配置本质上更加复杂,因为它必须考虑来自不同组织的参与方。大多数时候,一些组件需要部署在DMZ中。连接到联盟或协作方的端口通常受IT策略限制。

AI 模型、计算能力和数据是 ML 的三大核心支柱。但是在企业中部署 ML 应用程序时,还存在进一步的挑战,包括:

  1. 如何构建功能齐全的ML工作流
  2. 如何管理更大、更复杂的ML应用程序的基础设施环境
  3. 如何优化ML应用程序基础架构的效率和灵活性
  4. 如何确保恢复性并在发生故障时提供自我修复

这些挑战导致了新学科的出现:AIOps 或 MLOps。如果被采纳,这些将成为 ML 的第四大支柱。

VMware OCTO 团队正在运用虚拟化和基础架构方面的专业知识,致力于解决联邦学习的运营挑战。作为 FATE 项目的主要贡献者,我们提出了云原生联邦学习的概念,将联邦学习系统视为现代云应用程序,然后利用云计算的优势去简化使用门槛。

我们为云原生联邦学习领域贡献了两个主要项目:KubeFATE 和 FATE-Operator

1. KubeFATE

KubeFATE 在数据中心或多云环境中的 Kubernetes上配置、编排、操作和管理基于FATE的联邦学习平台。

KubeFATE 支持两种不同的部署环境: Docker-compose和Kubernetes, 分别用于实验和生产目的:

为了快速使用或算法验证,我们可以在三台安装了Docker-compose的机器上部署预设的两方FATE环境。

对于生产或严格的实验,我们强烈建议使用 KubeFATE 进行 Kubernetes 部署,它具有以下优势

  • Kubernetes上的声明式部署
  • 支持不同的引擎
  • 可定制灵活的部署
  • 部署版本管理
  • 集群管理
  • 操作功能,例如日志聚合功能支持

KubeFATE 通过部署 YAML 中的简单声明支持以下引擎

  • 计算引擎:EggRoll(roll-pair)、Spark
  • 存储引擎:EggRoll(egg-pair)、HDFS
  • 传输引擎:EggRoll(roll-site)、RabbitMQ、Pulsar

Kubernetes 环境支持

Kubernetes 部署基于 Helm。KubeFATE 提供了类似的声明性文件格式 YAML 来定义系统应该是什么样子。以下是部署一方的 FATE 集群的 YAML 示例:

代码语言:javascript复制
name: fate-9999
namespace: fate-9999
chartName: fate
chartVersion: v1.6.0
partyId: 9999
registry: ""
imageTag: "1.6.0-release"
pullPolicy: 
imagePullSecrets: 
- name: myregistrykey
persistence: false
istio:
  enabled: false
podSecurityPolicy:
  enabled: false
modules:
  - rollsite
  - clustermanager
  - nodemanager
  - mysql
  - python
  - fateboard
  - client

backend: eggroll

rollsite: 
  type: NodePort
  nodePort: 30091
  partyList:
  - partyId: 10000
    partyIp: 192.168.10.1
    partyPort: 30101

python:
  type: NodePort
  httpNodePort: 30097
  grpcNodePort: 30092

servingIp: 192.168.9.1
servingPort: 30095

YAML 由几个关键部分组成

  • 集群的元数据。它包括集群的名称,部署到的Kubernetes集群的命名空间,如果启用了Istio或者集群数据是连续的则记录参与方ID,等等。
  • crChart的元数据。 这包括Chart的名称和版本。这两个属性决定了要部署的集群类型和版本。KubeFATE可用于部署和管理由Chart组织的不同类型的集群,例如 FATE、FATE-Serving、FATE with Spark、FATE with Spark and Pulsar、注册库、pull policy、pull seet 等。
  • 在此集群中部署的模块。 为了不同基础设施管理策略的灵活性KubeFATE 可以将 Chart 的部分组件部署为一个集群,从而将部署分布在多个命名空间甚至 Kubernetes 的不同实例中。
  • 每个组件的详细配置。

可以在(https://github.com/FederatedAI/KubeFATE/tree/master/docs/configurations)找到有关定义的更多详细信息。我们将在后续博客文章中讨论如何自定义集群的部署。

下面是 KubeFATE 的高层架构图:

来源:云原生联邦学习与KubeFATE

(https://octo.vmware.com/kubefate/)

它包括两部分:

  1. KubeFATE 命令行工具 (CLI),为 FATE 集群提供最常见的管理操作。
  2. KubeFATE 服务,作为应用程序部署在 Kubernetes 中。它公开了 REST API,这些 API 被设计成可以轻松扩展并集成到现有的云管理系统中。

更多细节请参考(https://github.com/FederatedAI/KubeFATE/tree/master/k8s-deploy)。

2. FATE-Operator

Kubernetes Operator 是一种部署和管理Kubernetes应用程序的设计模式。Operator使任务自动化,并关注特定应用程序或服务的行为方式、部署方式以及出现问题时的反应方式。一个Operator包含一个Kubernetes自定义资源定义 (CRD) 和一个关联的控制器。FATE-Operator 是我们作为Kubeflow官方子项目贡献的另一项重要工作:https://github.com/kubeflow/fate-operator 它支持在云原生平台中进行联邦学习。

Kubeflow 实际上是个云原生 ML平台,用于在Kubernetes 上开发和部署 ML 应用程序。随着市场(和 Kubernetes 的采用)的增长,在越来越多的多云和混合云环境中运行 Kubeflow 将成为一个关键主题。Kubeflow提供了一种运行 ML 完整生命周期的方法。当我们开发和部署 ML 应用程序时,它通常由几个阶段组成,例如识别问题、数据工程、选择算法和编码模型、对数据进行实验、调整模型、训练模型、为训练好的模型提供服务,等等。Kubeflow为每个阶段提供组件,以及用于构建、部署和管理工作流的Pipeline。

Kubeflow 训练是一组 Kubernetes Operator为使用不同框架的 ML 模块的分布式训练增加了 Kubeflow 支持。FATE-Operator 是我们添加到 Kubeflow 以启用联邦学习功能的内容。

FATE-Operator 包含三个 CRD:

  1. Kubefate:用于为FATE部署管理服务
  2. FateCluster:用于部署FATE集群
  3. FateJob:用于向已部署的FATE集群提交和运行联邦学习作业

FATE-Operator 的典型用例是:

  • 在Kubeflow中启用联邦学习并使用Kubefate CRD部署KubeFATE
  • 当联邦学习任务产生同时有一个新的协作方时,使用FateCluster CRD部署FATE集群
  • 使用FateJob CRD提交和运行联邦学习作业

除了Kubeflow,Kubefate和FateCluster,CRD还可以直接用于在Kubernetes集群(例如 Tanzu Kubernetes Grid Cluster)中部署和管理KubeFATE和FATE。

下一步

我们探索了联邦学习的优势和潜力,并简要讨论了基于云原生技术的项目,以使其能够在生产中使用。在后续文章中,我们将深入探讨 KubeFATE 的实际细节以及如何使用它来配置和管理 FATE 集群。如果在实际使用KubeFATE时,可参考官方文档及Wiki: https://github.com/FederatedAI/KubeFATE

0 人点赞