FedLCM (Federation Lifecycle Manager,联邦生命周期管理器)是VMware在2022年贡献到FATE社区的开源项目,通过FedLCM的部署管理服务和任务管理服务,我们可以用图形化的方式完成包括FATE集群的云原生部署、联邦运维以及联邦学习任务创建、数据和模型管理等功能。(点击此链接可查看FedLCM的基本介绍和使用指南。)本文将围绕着FedLCM的基础设施管理、FATE集群创建等几个方面的部分重点功能展开介绍。
K8s“基础设施”的特别用法
1.省略输入Kubeconfig
FedLCM是基于KubeFATE来完成FATE在Kuberentes集群上的部署的,因此在部署FATE之前,我们需要将K8s集群添加到FedLCM系统中,这里一般的方式是我们需要输入K8s集群的Kubeconfig内容。而如果FedLCM本身已经部署在同一个K8s集群上,用户可以直接使用FedLCM所在的Kubernetes集群而无需输入Kubeconfig文件。想要这样使用,部署FedLCM的时候就需要提供必要的权限,我们可以通过修改rbac_config.yaml文件来添加所需的权限,包括Role和RoleBinding或者ClusterRoleBinding。如下是绑定ClusterRole的RoleBinding示例:
# add below settings to enable FedLCM to operate in the specified namespace when adding the cluster as an infra using in-cluster-config
—
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: admin-binding-for-fedlcm
namespace:
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: admin
subjects:
– kind: ServiceAccount
name: fedlcm-admin
namespace: fedlcm
其中“”修改为我们想要使用的namespace名称即可。添加完权限,我们就可以在添加基础设施的时候,选择“使用当前服务的Service Account”,就可以使用到FedLCM所在的集群了。
2.仅使用K8s某个命名空间权限
在很多生产环境的实际场景中,我们对于所操作的K8s集群往往只有单个或某几个命名空间(namespace)的权限,或者即便我们有着整个集群的操作权限,我们也希望部署的KubeFATE和FATE以及它们的权限也仅存在于某个命名空间。
为了满足在这种权限限制下的FATE部署运行的需求,我们可以使用FedLCM在添加K8s集群作为基础设施的时候,打开界面上的“限定命名空间”的开关,并输入namespace名称。这样,之后在该基础设施上创建的KubeFATE和FATE集群以及衍生的权限都会仅存在于这个namespace。使用这种方式的时候需要注意的是,一个namespace下只能部署一个FATE集群或者一个FATE Exchange。如果我们想要部署多个FATE集群,就需要多个namespace的权限。
与非当前FedLCM部署的FATE互联
一般情况下,我们通过一个FedLCM服务在一个联邦里部署Exchange和多个FATE集群,集群间通过Exchange互联。但是有时候联邦学习是发生在不同组织、单位之间的,在这种情况下一般无法使用一个FedLCM服务管理不同组织各自的K8s和FATE集群。而FedLCM也支持这样的形态的联邦,即我们可以通过FedLCM部署FATE集群,并让其与其他组织的、非当前FedLCM部署的FATE集群互联,这里其他方的FATE集群可以是用另外的FedLCM实例部署的,也可以是用KubeFATE、AnsibleFATE等方式部署的。
假设有两个组织Party-9999和Party-10000,他们各自部署了自己的FedLCM,并想要组成联邦。如果Party-9999部署了FATE-Exchange和自己的FATE集群,那么另一方Party-10000可以通过“导入外部的FATE-Exchange”的方式来让自己部署的FATE集群连接到对方Party-9999的FATE-Exchange上。然后Party-9999再通过“导入外部的 Cluster”来让自己的FATE-Exchange可以连接到Party-10000部署的FATE集群。在这个过程中各方的FedLCM不会访问和操作对方的K8s集群和FATE实例,各方只需要提供用于互联的服务的连接地址即可。
(导入外部的Exchange,需要提供Exchange中Traffic Server和Nginx的地址)
(导入外部的Cluster,需要提供该FATE集群中Pulsar和Nginx的地址)
对接现有的基础引擎
通过FedLCM部署的FATE集群使用的基础引擎是Spark、HDFS和Pulsar。企业或组织在部署FATE时,默认情况下FedLCM会部署一套以容器形式运行的基础引擎服务。同时,若组织内已经部署和运行有这些服务,FedLCM也支持直接让FATE系统对接这些资源,而不再另行部署这些组件。这样可以充分利用组织内现有的稳定的服务,更好地管理和分配这些资源,并进一步提升效率。在使用FedLCM部署FATE的时候,可以在“选择是否使用已存在的基础引擎服务”页面中,打开服务名字后面的开关,并配置这些服务的相关信息。这种方式的配置内容和和注意事项(比如如何全部或部分使用已存在的基础服务,对Spark集群的要求等),可以参考FedLCM项目仓库中相关深入介绍的文档。
(配置对接外部已存在的基础引擎)
升级FATE与Exchange
过往的文章中介绍了KubeFATE对升级FATE集群的支持,升级的时候KubeFATE首先会停止原来的FATE集群,然后使用升级脚本升级 FATE集群的持久化数据,最后启动新版本的FATE集群。
基于KubeFATE的这个功能,FedLCM也支持了对FATE集群和FATE-Exchange的升级,当然,需要先升级FedLCM本身到新版本,然后才能升级它管理的FATE到新版本。对于FedLCM的升级,如果数据库使用了持久化的卷,那么可以直接使用新版本部署覆盖原来的版本就可以完成升级。如果数据库没有使用持久化的卷,那么需要先备份数据库,然后部署新版本的FedLCM,再使用备份的数据库恢复数据。
在升级FedLCM之后,新的FedLCM将会含有新版本FATE的部署chart,如下图所示,如果当前管理的FATE和Exchange不是最新版本,那么在FATE和Exchange的集群操作操作页面上就会出现升级选项:
(第一步:找到并点击待升级的FATE集群)
(第二步:选择目标版本并等待升级完成)
此时我们点击升级,并在升级操作页面选择升级版本即可,之后我们等待升级成功就可以使用新版本的FATE了。同样需要注意的是,升级功能需要在部署FATE时开启持久化,同时升级前请做好数据备份。
总结
以上就是FedLCM在v0.2和v0.3版本中引入的部分实用功能,除了这些之外,FedLCM中还有很多其他新增的功能,如自定义镜像仓库和登陆信息、Site Portal服务支持单独部署、支持纵向联邦学习算法等等,详细的介绍都可以在项目的文档目录中找到。项目地址是https://github.com/FederatedAI/FedLCM,欢迎大家关注,如果有任何想法或建议,以及代码贡献,也欢迎发起Issue和Pull Request 与开发者交流。后续FedLCM会增加更多适用于真实环境的功能支持,同时期待和社区一起进一步探索联邦学习落地实践中的方方面面。
作者团队介绍
本文由VMware中国研发中心云原生实验室贡献,该团队属于VMware CTO办公室的AI Labs部门,负责AI/ML、云原生等前沿技术领域的创新项目。VMware作为FATE TSC Board成员参与FATE开源项目的开发和维护工作,贡献了包括 KubeFATE、FedLCM等项目以加速FATE的运维管理。本文主要作者为该实验室工程师、KubeFATE和FedLCM项目维护者马陈龙和王方驰。
内容来源|公众号:VMware 中国研发中心
有任何疑问,欢迎扫描下方公众号联系我们哦~