原标题:联邦学习平台 KubeFATE 部署 FATE 的配置说明

题图摄于越南会安
(本文作者系 VMware 中国研发云原生实验室工程师,联邦学习 KubeFATE / FATE-Operator 开源项目维护者。)
需要加入 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
- 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)的配置
- 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
- 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
- type:rollsite端口的暴露方式,对应Kubernetes的service的type
- exchange:rollsite连接的exchange信息(ip和port)
- partyList:FATE连接其他party的信息,假如要连接已经使用 kubefate 部署了的一个FATE,根据前边查看FATE集群信息,从中可以得到partyId、NodePort和NodeIP。
- nodeSelector:将 Pod 分配给某一节点,nodeselector
- count:部署nodemanager的数量
- sessionProcessorsPerNode:nodemanager的sessionProcessorsPerNode配置
- subPath:nodemanager持久化的路径
- storageClass:持久化的storageClass
- existingClaim:是否使用已有PVC
- accessMode:访问模式
- size:所需PV的大小
- nodeSelector:将 Pod 分配给某一节点,nodeselector
- nodeSelector:将 Pod 分配给某一节点,nodeselector
使用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信息
- 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节点的配置
- nodeSelector:将 Pod 分配给某一节点,nodeselector
- type:对应kubernetes的Service资源的type
- nodeSelector:将 Pod 分配给某一节点,nodeselector
- type:对应kubernetes的Service资源的type
- namenode:namenode配置
- datanode:datanode配置
- <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,
- <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 需要三个模块[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的大小
- nodePort:servingProxy端口的暴露方式,供其他party的serving集群连接
- ingerssHost:servingProxy的ingress host配置
- partyList:连接其他party的配置,其他party 组件servingProxy的ip和port
- nodeSelector:将 Pod 分配给某一节点
- 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 分配给某一节点
- password:redis的密码
- nodeSelector: 将 Pod 分配给某一节点
- subPath:redis持久化的路径
- storageClass:持久化的storageClass
- existingClaim:是否使用已有PVC
- accessMode:访问模式
- size:所需PV的大小
如果只部署一个rollsite,则可以作为exchange 。
$ 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 。
$ 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 模式.
当前版本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/
责任编辑: