前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >联邦学习平台 KubeFATE 部署 FATE 的配置说明

联邦学习平台 KubeFATE 部署 FATE 的配置说明

作者头像
Henry Zhang
发布2023-04-04 09:10:26
6110
发布2023-04-04 09:10:26
举报
文章被收录于专栏:亨利笔记

题图摄于越南会安

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

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

相关文章

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

在Juypter Notebook中构建联邦学习任务

用KubeFATE在K8s上部署联邦学习FATE v1.5

使用Docker Compose 部署FATE v1.5

之前给大家介绍了 KubeFATE 的详细原理,本文接着介绍 KubeFATE 的配置说明,供用户参考。可点击阅读原文查看全文。

KubeFATE部署 FATE 的配置介绍

使用kubefate可以部署两种集群类型,包含 FATE(Training) 和 FATE-Serving,部署配置文件是 YAML 格式。

共同部分

  • name:集群名称,不能重复
  • namespace:对应Kubernetes的namespace资源,目前kubefate部署最好一个namespace下只部署这个FATE集群的资源
  • chartName:FATE集群的类型,包括fate和fate-serving
  • chartVersion:FATE集群的版本,更多版本可以在这里找到https://github.com/FederatedAI/KubeFATE/tree/gh-pages/package
  • partyId:FATE的概念,标识区分不同集群
  • registry:镜像资源,默认是Docker hub,其他资源:例如国内的一个镜像资源registry: "hub.c.163.com/federatedai"
  • pullPolicy:Kubernetes镜像资源拉取策略,不填写默认是IfNotPresent
  • persistence:集群是否支持数据持久化
  • istio:是否启用istio,(什么是istio?)
  • modules:Kubefate支持分模块部署,这里可以选择需要部署的不同模块

其余配置根据不同的部署模式选择不同的配置。

FATE (Training) 的配置

部署 FATE (Training) 集群。

必须组件包含 [python, mysql]

如果使用 eggroll 引擎,还需要[rollsite, clustermanager, nodemanager]

如果使用 Spark 引擎,还需要[spark, hdfs, nginx, rabbitmq]

可选组件[fateboard, client]

FATE支持两种计算引擎 eggroll 和 spark。所以下面针对两种配置做详细说明。

  • backend: FATE使用的计算引擎(eggroll、spark)
  • python:fateflow的一些配置
    • type:fateflow服务端口的暴露方式,对应Kubernetes的service的type
    • httpNodePort:如果上边选择的是NodePort,fateflow http端口的配置
    • grpcNodePort:如果上边选择的是NodePort,fateflow grpc端口的配置
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
    • spark:[FATE on spark](FATE on spark)的配置
    • hdfs:[FATE on spark](FATE on spark)的配置
    • rabbitmq:[FATE on spark](FATE on spark)的配置
    • nginx:[FATE on spark](FATE on spark)的配置
  • mysql:mysql的一些配置(使用其他mysql可以不配置这里)
    • ip:mysql的kubernetes内部名称(不要修改)
    • port:mysql的port(不要修改)
    • database:FATE使用mysql的数据库名称
    • user:mysql用户名
    • password:mysql密码
    • subPath:持久化的路径
    • existingClaim:是否使用已有PVC
    • storageClass:持久化的storageClass
    • accessMode:ReadWriteOnce
    • size:PV的大小
    • nodeSelector:将 Pod 分配给某一节点,nodeselector

如果使用其他mysql配置这些

  • externalMysqlIp:mysql的ip
  • externalMysqlPort:mysql的port
  • externalMysqlDatabase:mysql的数据库名称
  • externalMysqlUser:mysql的用户名
  • externalMysqlPassword:mysql的密码

如果要连接FATE-Serving才需要配置

  • servingIp:FATE-Serving的servingServer的入口ip
  • servingPort:FATE-Serving的servingServer的入口port

FATE on eggroll

使用 eggroll 计算引擎,除了基础组件,还需要[rollsite, clustermanager, nodemanager]这些组件。

使用cluster.yaml,默认会部署一个FATE on eggroll的FATE集群。

默认的部署实现,体现在Kubernetes上的资源有以下这些:

kubernetes组件

资源实例

Service

clustermanager,fateboard ,fateflow ,fateflow-client,mysql ,nodemanager-0,nodemanager-1,notebook,rollsite

Deployment

clustermanager,mysql,nodemanager-0,nodemanager-1,python,rollsite

Ingress

client,fateboard

ConfigMap

eggroll-config,fateboard-config,mysql-config,nodemanager-0-config,nodemanager-1-config,python-config,rollsite-config

下面是使用eggroll计算引擎需要的组件配置

  • rollsite: rollsite组件的一些配置
    • type:rollsite端口的暴露方式,对应Kubernetes的service的type
    • nodePort:如果上边选择的是NodePort,这里可以配置具体的端口号,Kubernetes默认的范围是(30000-32767)
    • exchange:rollsite连接的exchange信息(ip和port)
    • partyList:FATE连接其他party的信息,假如要连接已经使用kubefate部署了的一个FATE,根据前边查看FATE集群信息,从中可以得到partyId、NodePort和NodeIP。
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
  • nodemanager:nodemanager组件的一些配置
    • count:部署nodemanager的数量
    • sessionProcessorsPerNode:nodemanager的sessionProcessorsPerNode配置
    • subPath:nodemanager持久化的路径
    • storageClass:持久化的storageClass
    • existingClaim:是否使用已有PVC
    • accessMode:访问模式
    • size:所需PV的大小
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
  • clustermanager:nodemanager组件的配置
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
FATE on Spark

使用Spark计算引擎,除了基础组件,还需要[spark, hdfs, nginx, rabbitmq]这些组件。

使用cluster-spark.yaml,默认会部署一个FATE on spark的FATE集群。

默认的部署实现,体现在Kubernetes上的资源有以下这些:

kubernetes组件

资源实例

Service

fateboard, fateflow, fateflow-client, mysql, namenode, datanode, nginx, notebook, rabbitmq, spark-master, spark-worker-1

Deployment

datanode, mysql, namenode, nginx, python, rabbitmq, spark-master, spark-worker

Ingress

client, fateboard, rabbitmq, spark

ConfigMap

datanode-env, eggroll-config, fateboard-config, mysql-config, namenode-config, namenode-env, nginx-config, python-config, rabbitmq-config

下面是使用Spark计算引擎需要的组件配置

  • spark:Spark组件的一些配置
    • Image:worker的镜像
    • ImageTag:TAG
    • replicas:pod副本数量
    • cpu:请求CUP 数量
    • memory:请求内存数量
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
    • type:对应kubernetes的Service资源的type
    • Image:master的镜像
    • ImageTag:TAG
    • replicas:pod副本数量
    • cpu:请求CUP 数量
    • memory:请求内存数量
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
    • type:对应kubernetes的Service资源的type
    • master:master节点的配置
    • worker:worker节点的配置
  • hdfs:hdfs组件的一些配置
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
    • type:对应kubernetes的Service资源的type
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
    • type:对应kubernetes的Service资源的type
    • namenode:namenode配置
    • datanode:datanode配置
  • nginx:nginx组件的一些配置
    • <party_id>:其他party的id
    • proxy:其他party的proxy信息,对应对方party的nginx的ip和port
    • fateflow:其他party的fateflow信息,对应对方party的python模块的ip和grpcNodePort
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
    • type:nginx端口的暴露方式,对应Kubernetes的service的type
    • nodePort:如果上边选择的是NodePort,这里可以配置具体的端口号。
    • route_table:配置FATE连接其他party的proxy和fateflow信息,假如要连接已经使用kubefate部署了的一个FATE,
  • rabbitmq:rabbitmq组件的一些配置
    • <party_id>:其他party的id
    • host:其他party的rabbitmq的入口ip
    • port:其他party的rabbitmq的入口port
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
    • type:rabbitmq端口的暴露方式,对应Kubernetes的service的type
    • nodePort:如果上边选择的是NodePort,这里可以配置具体的端口号。
    • default_user:rabbitmq的配置default_user
    • default_pass:rabbitmq的配置default_pass
    • user:rabbitmq的配置user
    • password:rabbitmq的配置password
    • route_table:配置FATE连接其他party的rabbitmq信息
FATE Serving 配置

FATE-Serving 的部署与上边一样,相同的配置可以参考双方共同部分。

如果要部署 FATE-Serving 需要三个模块[servingProxy, servingRedis, servingServer]。

使用cluster-serving.yaml,默认会部署一个FATE-Serving的集群。

默认的部署实现,体现在Kubernetes上的资源有以下这些:

kubernetes组件

资源实例

Service

serving-proxy, serving-redis, serving-server

Deployment

serving-proxy, serving-redis, serving-server

Ingress

serving-proxy

ConfigMap

serving-proxy-config, serving-redis-config, serving-server-config

下面是FATE-Serving的集群的组件配置

  • servingProxy:servingProxy组件的一些配置
    • nodePort:servingProxy端口的暴露方式,供其他party的serving集群连接
    • ingerssHost:servingProxy的ingress host配置
    • partyList:连接其他party的配置,其他party 组件servingProxy的ip和port
    • nodeSelector:将 Pod 分配给某一节点
  • servingServer:servingServer组件的一些配置
    • type:servingServer端口的暴露方式,对应Kubernetes的service的type
    • nodePort:servingProxy端口的暴露方式,供自己的FATE(Training)集群的python模块连接
    • fateflow:自己的FATE(Training)集群的fateflow httpNodePort的入口
    • subPath:servingServer持久化的路径
    • storageClass:持久化的storageClass
    • existingClaim:是否使用已有PVC
    • accessMode:访问模式
    • size:所需PV的大小
    • nodeSelector: 将 Pod 分配给某一节点
  • servingRedis:servingRedis组件的一些配置(就是普通redis)
    • password:redis的密码
    • nodeSelector: 将 Pod 分配给某一节点
    • subPath:redis持久化的路径
    • storageClass:持久化的storageClass
    • existingClaim:是否使用已有PVC
    • accessMode:访问模式
    • size:所需PV的大小
其他配置
FATE exchange

如果只部署一个rollsite,则可以作为exchange 。

代码语言:javascript
复制
$ cat <<EOF | sudo tee cluster-exchange.yaml 
name: fate-exchange
namespace: fate-exchange
chartName: fate
chartVersion: v1.5.0
partyId: exchange
modules:
  - rollsite

rollsite: 
  type: NodePort
  nodePort: 30001
  partyList:
  - partyId: 9999
    partyIp: 192.168.9.1
    partyPort: 30091
  - partyId: 10000
    partyIp: 192.168.10.1
    partyPort: 30101
EOF

FATE-Serving exchange

如果只部署一个servingProxy,则可以作为serving-exchange 。

代码语言:javascript
复制
$ cat <<EOF | sudo tee serving-exchange.yaml 
name: fate-serving-exchange
namespace: fate-serving-exchange
chartName: fate-serving
chartVersion: v1.5.0
partyId: exchange
modules:
  - rollsite

rollsite: 
  type: NodePort
  nodePort: 30006
  partyList:
  - partyId: 9999
    partyIp: 192.168.9.1
    partyPort: 30091
  - partyId: 10000
    partyIp: 192.168.10.1
    partyPort: 30101
EOF

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

欢迎转发、收藏和点 “在看”,或者阅读原文。

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

相关链接

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

要想了解云原生、人工智能和区块链等技术原理,请立即长按以下二维码,关注本公众号亨利笔记 ( henglibiji ),以免错过更新。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 亨利笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (本文作者系 VMware 中国研发云原生实验室工程师,联邦学习 KubeFATE / FATE-Operator 开源项目维护者。)
相关产品与服务
联邦学习
联邦学习(Federated Learning,FELE)是一种打破数据孤岛、释放 AI 应用潜能的分布式机器学习技术,能够让联邦学习各参与方在不披露底层数据和底层数据加密(混淆)形态的前提下,通过交换加密的机器学习中间结果实现联合建模。该产品兼顾AI应用与隐私保护,开放合作,协同性高,充分释放大数据生产力,广泛适用于金融、消费互联网等行业的业务创新场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档