题图摄于越南会安
(本文作者系 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 ),以免错过更新。