登录  | 加入社区

黑狼游客您好!登录后享受更多精彩

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 186|回复: 0

云原生联邦学习平台KubeFATE原理详解

[复制链接]

959

主题

959

帖子

0

现金

黑狼菜鸟

Rank: 1

积分
0
发表于 2020-12-24 03:17:50 来自手机 | 显示全部楼层 |阅读模式 来自 法国

原标题:云原生联邦学习平台 KubeFATE 原理详解

w8VztBR4RTs3N233.jpg

题图摄于越南会安

(本文作者系 VMware 中国研发云原生实行室工程师,联邦学习 KubeFATE / FATE-Operator 开源项目维护者。)

必要参加KubeFATE开源项目讨论群的同砚,请关注亨利条记公众号后复兴 “ kubefate” 即可。

VMware雇用联邦学习、隐私盘算开辟工程师

关于FATE

FATE 是一个联邦学习的开源项目,旨在提供一个安全的盘算框架来支持团结AI生态体系。它实现了 多种安全盘算协议,以实现符合数据掩护法规的大数据协作。通过模块化的可扩展建模管道,清楚的可视界面和机动的调理体系,FATE 可以访问即用型可用性和精彩的运营性能。

关于Kubernetes

Kubernetes 是开源的一个 容器编排引擎,它支持主动化摆设、大规模可伸缩、应用容器化管理。在生产情况中摆设一个应用步伐时,通常要摆设该应用的多个实例以便对应用哀求举行负载平衡。

在 Kubernetes 中,我们可以创建多个容器,每个容器内里运行一个应用实例,然后通过内置的负载平衡计谋,实现对这一组应用实例的管理、发现、访问,而这些细节都不必要运维职员去举行复杂的手工设置和处置惩罚。

为什么要在 Kubernetes 上摆设 FATE

但随着联邦学习的正式投入利用,练习集、模子都会渐渐变大。在生产情况里,我们会碰到以下题目:

Kubernetes 是现在最盛行的底子办法平台,大量的实践证实,Kubernetes 很适互助为企业内部运维大规模分布式体系的平台。根据 Ovum 的统计,停止2019年底,一半的大数据负载都运行在 Kubernetes 之上。我们团队也保举 Kubernetes 作为运行 FATE 联邦学习集群生产情况的平台。KubeFATE 提供了在 Kubernetes 摆设运维 FATE 的办理方案。

睁开全文

在相识如安在 Kubernetes 上摆设 FATE 之前呢,你最好先相识 Kubernetes 和 FATE 的根本原理。

KubeFATE

KubeFATE 是 FATE 的容器化摆设的支持项目,重要包罗 FATE 的 docker-compose摆设和 Kubernetes 摆设,Juypter Notebook 支持等。

KubeFATE 重要由 VMware 中国研发中央云原生实行室、微众银行、社区用户共同到场开源贡献。随着容器化技能的发展,相干技能也越来越成熟,出现了多良好的项目 Kubernetes、Docker、Harbor 等。容器化摆设应用办理了许多摆设题目,还大大进步了研发运维服从,容器化摆设将是将来服务运维的紧张方式。在生产情况的容器化摆设起首想到就是 Kubernetes,利用 KubeFATE 摆设FATE将是你摆设FATE的主要选择。

KubeFATE是对 FATE 的 Kubernetes 摆设的详细实现。KubeFATE利用golang开辟,通过一个摆设在 Kubernetes 上的 server 服务来实现对 Kubernetes 的操纵,可以实现集群外对 FATE 的摆设操纵,通过简朴下令行实现简朴快速的 FATE 集群的摆设运维工作。

(必要参加KubeFATE开源项目讨论群的同砚,请先关注 亨利条记 公众号,然后复兴 kubefate 即可。)

KubeFATE摆设架构

SjPoZZZB7N065B9o.jpg

KubeFATE的相干知识

KubeFATE摆设 FATE 可以通过下令行大概 rest API 来操纵,可以操纵的资源如下:

Cluster

cluster是 KubeFATE的重要资源, KubeFATE每乐成摆设一个FATE就会天生一个cluster,每一个 cluster 对应一组 Kubernetes 的资源,包罗FATE (Training) 和 FATE-Serving 两种范例。

下令行和 API 重要有 install update delete describe list 五种操纵。

Job

job是 KubeFATE摆设 cluster 的时间产生的中心资源,负责完成 cluster 在 Kubernetes 上对应的操纵,包罗三种范例 Install、Update 和 Delete。

实行的根本过程分四步:

1. 天生job的元数据,

2.实行对应范例的cluster操纵,

3.查抄操纵是否乐成,

4.更新job的状态。

下令行和 API 重要有 list, delete, describe 三种操纵。

Chart

chart是 KubeFATE存储差别范例差别版本的 FATE 的Yaml模板文件,是 Helm Chart 的超集,相比平凡 Helm Chart 多了一个 values-template 文件。全部的chart 文件可以从这里下载: http://github.com/FederatedAI/KubeFATE/tree/gh-pages/package

下令行和 API 重要有 upload, list, delete三种操纵。

User

KubeFATE对下令行的认证信息的表现。

摆设过程

下载KubeFATE安装包

KubeFATE安装包可以从 GitHub 的 KubeFATE release 下载 (http://github.com/FederatedAI/KubeFATE/releases)

$ version=v1.5.0

# 下载对应版本的 KubeFATE

$ wget http://github.com/FederatedAI/KubeFATE/releases/download/ ${version}/kubefate-k8s- ${version}.tar.gz

解压之后安装就可以利用:

$ mkdir -p kubefate

$ tar -zxvf -C kubefate kubefate-k8s- ${version}.tar.gz

$ chmod +x ./kubefate &&sudo mv ./kubefate /usr/bin

解压之后得到这些文件:

$ ls

cluster-serving.yaml cluster-spark.yaml cluster.yaml config.yaml examples kubefate kubefate.yaml rbac-config.yaml 安装KubeFATEserver

KubeFATE利用之前你必要在 Kubernetes 上摆设 KubeFATEserver。

这部门包罗 KubeFATEserver的 namespace 和 RBAC 权限,官方默认的权限是cluster-admin,对 Kubernetes 的 RBAC 机制比力相识的可以本身修改。

还包罗 KubeFATE所利用的秘钥,MySQL 的用户名暗码和 KubeFATE的用户名暗码,摆设之前发起先修改一下。

$ kubectl apply -f rbac-config.yaml

接下来就可以摆设 KubeFATEserver了。

这个摆设包罗两部门: KubeFATE和 MariaDB(MySQL),统共包罗 5 个 Kubernetes组件,分别是 KubeFATE和 MariaDB 的Deployment 与 Service、 kubefate 的Ingress。

$ kubectl apply -f kubefate.yaml

deployment.apps/kubefate created

deployment.apps/mariadb created

service/mariadb created

service/kubefate created

ingress.networking.k8s.io/kubefate created

可以看到5个 Kubernetes 组件乐成创建,假如 deployment 创建的 pod 状态正常那么阐明 KubeFATEserver已经摆设乐成。

KubeFATE下令行对接

KubeFATE下令行是 KubeFATEserver的API调用实现,通过架构图我们知道 KubeFATE摆设 FATE 是 KubeFATEserver 通过call Kubernetes API 来实现的, KubeFATE下令行与 KubeFATEserver 的通讯是通过 Ingress 袒露的 URL kubefate.net (该域名可修改)来实现,以是 KubeFATE下令行可以在恣意一台可以访问 Ingress 入口的呆板利用,只必要设置 hosts 文件即可。

比方:

$ echo"192.168.100.123 kubefate.net">>/etc/hosts

192.168.100.123 是 ingress 的入口 IP地点。

利用下令 kubefate version 查抄是否连通。

$ kubefate version

*kubefate service version=v1.2.0

*kubefate commandLine version=v1.2.0

这里报错,缘故原由一样平常有两点:

KubeFATE 服务摆设乐成就可以利用 kubefate 下令来摆设 FATE 了。

利用 kubefate 下令摆设FATE

利用 kubefate cluster install 下令,可以用 kubefate 安装一个指定FATE集群。利用 --help 参数可以更好的利用 kubefate 下令。

在安装之前,集群的参数可以通过设置 cluster.yaml 实现。具体的设置可以看设置先容部门。

$ kubefate cluster install -f cluster.yaml

create job success, job id=94107328-958e-4fa6-8fa7-9a2b975114de

kubefate 对集群的安装更改删除都会天生一个job,利用 kubefate job describe <job_id> 可以检察对应操纵的进度。

本文的 FATE 集群是 FATE 的泛指,包罗 FATE(Training) 和 FATE-Serving

本文的 FATE 集群是 FATE 的泛指,包罗 FATE(Training) 和 FATE-Serving

kubefate 的 job 分为三种:install、 update、 delete。

  • Install:创建Cluster 起首会在数据库创建job的记载,然后创建cluster的记载,接着检察数据库是否有对应版本chart存在(假如不存在则下载对应版本chart存储到数据库),然后调用helm安装Cluster,查抄等候安装乐成,更新job和cluster的记载。
  • Update:更新Cluster 起首会在数据库创建 job 的记载,然后创建 cluster 的记载,接着检察数据库是否有更新 Cluster 对应版本 chart 存在(假如不存在则下载对应版本chart存储到数据库),然后调用 helm 更新 Cluster,查抄等候更新乐成,更新 job 和 cluster 的记载。
  • Delete:删除Cluster 起首会在数据库创建 job 的记载,更改 Cluster 状态,然后调用 helm 删除Cluster,查抄等候删除乐成,接着删除 Cluster 记载,更新 job 的记载。

通过检察 job 的信息,可以知道对应 FATE 集群安装的进度

$ kubefate job describe 94107328-958e-4fa6-8fa7-9a2b975114de

UUID 94107328-958e-4fa6-8fa7-9a2b975114de

StartTime 2020-11-25 03:03:41

EndTime 2020-11-25 03:05:38

Duration 117s

Status Success

Creator admin

ClusterId 9e693e93-bf2a-4229-8485-ea922ed33dcf

Result Cluster install success

SubJobs mysql PodStatus: Running, SubJobStatus: Success, Duration: 83s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:05:05

nodemanager-0 PodStatus: Running, SubJobStatus: Success, Duration: 11s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:03:53

nodemanager-1 PodStatus: Running, SubJobStatus: Success, Duration: 11s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:03:53

python PodStatus: Running, SubJobStatus: Success, Duration: 116s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:05:38

rollsite PodStatus: Running, SubJobStatus: Success, Duration: 11s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:03:53

client PodStatus: Running, SubJobStatus: Success, Duration: 116s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:05:38

clustermanager PodStatus: Running, SubJobStatus: Success, Duration: 11s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:03:53

fateboard PodStatus: Running, SubJobStatus: Success, Duration: 116s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:05:38

当 job 的状态酿成 Success ,代表摆设使命乐成。

subjob 表现当前 job 中每个组件的子 job 的状态。

检察FATE集群信息

通过下令 kubefate cluster describe <cluster_id> 可以检察摆设的FATE集群的信息

$ kubefate cluster describe 9e693e93-bf2a-4229-8485-ea922ed33dcf

UUID 9e693e93-bf2a-4229-8485-ea922ed33dcf

Name fate-10000

NameSpace fate-10000

ChartName fate

ChartVersion v1.5.0

Revision 1

Age 9m3s

Status Running

Spec backend: eggroll

chartName: fate

chartVersion: v1.5.0

istio:

enabled: false

modules:

- rollsite

- clustermanager

- nodemanager

- mysql

- python

- fateboard

- client

name: fate-10000

namespace: fate-10000

partyId: 10000

persistence: false

pullPolicy: null

python:

grpcNodePort: 30102

httpNodePort: 30107

type: NodePort

registry: ""

rollsite:

nodePort: 30101

partyList:

- partyId: 9999

partyIp: 192.168.9.1

partyPort: 30091

type: NodePort

servingIp: 192.168.10.1

servingPort: 30105

Info dashboard:

- 10000.notebook.kubefate.net

- 10000.fateboard.kubefate.net

ip: 192.168.10.2

pod:

- clustermanager-76bb7d4dd4-hhpw6

- mysql-57b7d859bc-pw4x5

- nodemanager-0-8d85fd46c-pwcz2

- nodemanager-1-6d67b96bc-qp4bx

- python-9c857bbcc-lgx2d

- rollsite-6b685d468d-bcrzw

status:

modules:

client: Running

clustermanager: Running

fateboard: Running

mysql: Running

nodemanager-0: Running

nodemanager-1: Running

python: Running

rollsite: Running

当Status是"Running"的时间表现摆设的FATE已经正常运行。

集群的其他信息:

  • Name、NameSpace、 ChartName、 ChartVersion 这些是根本信息与设置文件字段对应
  • Status 代表摆设的 FATE 的状态("Running"表现正常运行)
  • Revision 代表 update 的次数,创建乐成也算一次。
  • Spec 对应摆设的时间的 cluster.yaml
  • Info 当前 FATE 的特有信息
    • dashboard 是摆设FATE包罗的ingress入口
    • ip 表现可以 Kubernetes 利用 NodePort 的一个 Node 的 IP 地点
    • pod 表现当前 FATE 集群在kubernetes 内里全部 pod
    • status 表现当前 FATE 集群全部 container 的状态
  • dashboard 是摆设FATE包罗的ingress入口
  • ip 表现可以 Kubernetes 利用 NodePort 的一个 Node 的 IP 地点
  • pod 表现当前 FATE 集群在kubernetes 内里全部 pod
  • status 表现当前 FATE 集群全部 container 的状态

要查抄 FATE 是否成可以运行 FATE 的一些测试使命,详细怎样利用可以参考 FATE examples,也可以参考。

FATE 互联

FATE 联邦学习的实现依靠多个 Party 的数据互换,多个 Party 的互联有两种方式,分别是直连模式(网状)和 exchange(星型)。

直连模式(网状):

N91ZI3kE8UUWoY9E.jpg

exchange(星型):

q821fkR00FluL4l7.jpg

一个Party的对外毗连信息包罗三项,

  • PartyID partyID摆设FATE的时间必须指定,
  • IP rollsite对外是通过NodePort的方式袒露,以是IP就是NodeIP(通过检察cluster的详细信息也可以得到 Info.ip ),
  • Port 就是设置的 rollsite.nodePort 。

直连模式

直连模式是指在一个联邦网络内某个Party包罗了他必要毗连的全部party的集群入口信息(PartyID、IP、Port),对应的对方Party也必须包罗它的信息。

当某个新的Party想要参加网络,必要设置一个网络内唯一的PartyID,还必要在 rollsite.partyList的设置项增长以是必要关联的Party的信息,而且对方也必要在本身的 rollsite.partyList增长己方的信息。

exchange 模式

也叫星型摆设模式,全部的 Party 只必要设置 exchange 集群的信息,就可以通过exchange毗连其他的Party,exchange负责管理全部Party的集群信息。

假如利用exchange模式摆设,只必要设置 rollsite.exchange即可毗连exchange集群。exchange集群则必要设置各方的Party信息([exchange集群设置](#FATE exchange))。

Spark 模式

当FATE利用 Spark 盘算引擎,集群的毗连方式差别于之前,雷同于直连模式,不外互联要包罗两个组件 nginx 和 rabbitmq。

FATE利用Spark 的 party 之间互联就必要设置 nginx 的 route_table 和 rabbitmq 的route_table。

  • nginx 的 route_table 必要设置对方集群的 nginx 和 python 的 grpcNodePort。
  • rabbitmq 的 route_table 则必要设置对方集群的rabbitmq。

停止当前版本v1.5.0,FATE on Spark不支持exchange模式.

限于篇幅,更多关于KubeFATE 摆设 FATE 设置参数的具体先容,请检察这篇文章:联邦学习平台 KubeFATE 摆设 FATE 的设置阐明 ,大概点击阅读原文。

停止当前版本v1.5.0,FATE on Spark不支持exchange模式.

限于篇幅,更多关于KubeFATE 摆设 FATE 设置参数的具体先容,请检察这篇文章:联邦学习平台 KubeFATE 摆设 FATE 的设置阐明 ,大概点击阅读原文。

必要参加KubeFATE开源项目讨论群的同砚,请先关注亨利条记公众号,然后复兴 “ kubefate” 即可。

相干链接

  • KubeFATE: http://github.com/FederatedAI/KubeFATE
  • FATE: http://github.com/FederatedAI/FATE
  • Kubernetes: http://kubernetes.io/

接待转发、收藏和点 “在看”。返回搜狐,检察更多

责任编辑:





上一篇:燕麦讲堂丨锁定账号实时掩护企业数据安全
下一篇:零售门店信息化数字化的分享
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

 

QQ|申请友链|小黑屋|手机版|Hlshell Inc. ( 豫ICP备16002110号-5 )

GMT+8, 2024-5-18 23:06 , Processed in 0.189663 second(s), 47 queries .

HLShell有权修改版权声明内容,如有任何爭議,HLShell將保留最終決定權!

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表