*本文作者系VMware CTO办公室资深研究员彭麟
背景及KubeFATE架构
之前我们在文章《使用KubeFATE快速部署联邦学习实验开发环境(一)》、《使用KubeFATE快速部署联邦学习实验开发环境(二)》和《使用FATE进行图片识别的深度神经网络联邦学习》中介绍过如何使用KubeFATE部署一个基于Docker Compose的FATE联邦学习集群,以便于快速尝试体验联邦学习。但随着联邦学习的正式投入使用,训练集、模型都会逐渐变大。在生产环境里,我们会遇到以下问题:
FATE集群如何适应企业组织内部各种安全、合规要求,以及网络、安全域等IT环境;
一台服务器已经无法支撑联邦学习的算力需求,如何部署多计算节点,并易于管理;
某些节点出现问题,是否有自愈能力,保证服务的可靠性;
能否实现横向扩展,适应业务的成长;
FATE版本能否很好的升级管理;
一个组织内是否可以有不同的联邦集群,对应不同的业务、合作伙伴、应用场景需要,如何管理多个集群。
Kubernetes是目前最流行的基础设施平台,大量的实践证明,Kubernetes很适合作为企业内部运维大规模分布式系统的平台。根据Ovum的统计,截至2019年底,一半的大数据负载都运行在Kubrenetes之上。我们团队也推荐Kubernetes作为运行FATE联邦学习集群生产环境的平台。KubeFATE提供了在Kubernetes部署运维FATE的解决方案。
KubeFATE的Kubernetes部署两大模块:
- KubeFATE命令行工具:KubeFATE的命令行是一个可执行的二进制文件,用户可以用它快速初始化、部署、管理FATE集群。KubeFATE的命令行可以运行在Kubernetes外,与KubeFATE服务交互。中间使用https协议,可以进行SSL加密,并适配企业的防火墙规则。它的功能模块如下图所示:
- KubeFATE服务:KubeFATE服务作为应用部署在Kubernetes上,对外提供Restful APIs,可以容易与企业已有的网管运维等系统进行整合。
快速使用KubeFATE在一台Linux服务器上
基于MiniKube部署两方联邦学习
为了更好的体验KubeFATE的功能,下面我们会一步一步演示如何使用KubeFATE部署一个两方的联邦学习集群并进行验证。最终的部署结构如下图:
本文共出现两台机器:
用来做Demo的机器,是一台Linux机器,参照前置条件第一点;
使用浏览器访问FATE-Board的机器,要求可以访问用来执行Demo的机器。
前置条件
-
一台Linux的服务器,我们测试好的OS版本是Ubuntu 18.04
LTS,由于需要跑多方计算,服务器的推荐配置为:8核,16G内存以上; -
两个域名分别给KubeFATE服务和FATE-board使用。如果没有DNS解析条件,可以通过设置hosts方式,后面的介绍基于这种情况;
-
Linux服务器需要预先安装好Docker环境,具体参考Install Docker in Ubuntu;
-
要保证安装机器可以正常访问Docker Hub,以及Google存储;
-
预先创建一个目录,以便整个过程使用该目录作为工作目录,命令如下:
cd ~ && mkdir demo && cd demo
注意:下文介绍的MiniKube机器IP地址是10.160.112.145。请修改为你准备的实验机器IP地址!!!
安装需要的工具
为了使用KubeFATE部署FATE,我们需要以下工具:
-
MiniKube v1.7.3,如果我们已经有Kubernetes环境,可以直接跳转到部署KubeFATE服务;
-
kubectl v1.17.3:Kubernetes的命令行,需要与具体Kubernetes版本对应,这里的版本是对应MiniKube v1.7.3;
-
KubeFATE:
- Release: v1.3.1-a - 服务版本:v1.0.2 - 命令行版本:v1.0.2
安装kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.17.3/bin/linux/amd64/kubectl && chmod +x ./kubectl && sudo mv ./kubectl /usr/bin
执行完后可以验证是否成功,
layne@machine:~/demo$ kubectl version
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:14:22Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?
安装MiniKube
curl -