FATE联邦学习框架部署实践

一、开始

首先,在github找到官方的项目文档,然后同时对照官方文档和本文进行部署。在实际操作过程中会遇到很多由于运行环境不同导致的问题。本文档包含了部分在各个环节遇到过的问题作为参考。(官方github仓库

二、部署方式

FATE框架的部署分为单机版本和集群版本,在单机版本中,参与训练的多方(即host和guest)将被安装在同一台服务器上,所以实际上并不适合作为实际工程使用的方式,一般用来学习框架内容和进行实验测试。

单机部署有三种方式:编译源码部署、使用已编译的安装包,以及Dokcer部署。在本文中,我们通过Docker的方式进行部署

集群部署有四种方式:原生安装、Ansible集群安装、Kubernetes安装、以及Docker Compose安装。在本文中,我们通过Docker Compose的方式进行部署

三、单机部署

单机部署较为简单。首先,看到官网的配置要求为8核16G内存,CentOS7以上系统。实际上通过测试发现Ubantu也是可以部署成功的,硬盘空间也无所谓,不要太小就好。此外,部署时需要root权限。

1.安装docker

ubantu使用以下命令安装:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

centOS使用以下命令安装:

sudo yum -y install docker-ce

安装好后通过docker version命令查看版本,如果能正常显示内容则安装成功

2.安装python

这里不重复写了,请参考(Ubuntu安装python)(CentOS安装python

3.拉取docker镜像

这里直接拉取最新版本,若需要特定版本则要在镜像名后加":{需要的版本号}",如果下载失败则尝试使用国内的镜像源。

docker pull federatedai/standalone_fate

4.启动

启动前先检查三个端口号是否被占用,一般刚安装好的系统是不会被占用的。

netstat -apln|grep 8080;
netstat -apln|grep 9360;
netstat -apln|grep 9380

检查无误后就可以通过docker run命令启动FATE镜像了:

docker run -d --name standalone_fate -p 8080:8080 federatedai/standalone_fate

实际上我们也可以不进行步骤3拉取镜像,直接输入这一行,docker会自行判断本地是否有对应镜像,若没有则从源进行拉取。

5.查看是否运行成功

docker ps

通过查看容器命令,若我们看到如下图的几个容器则说明运行成功

 如果没有看到,先通过以下命令:

docker ps -a

查看所有历史存在的容器,如果出现了几个Status为Exit(..)的容器,请在检查服务器配置后通过该命令查看具体问题:

docker logs <容器id>

若无显示任何容器,则返回去查看刚才输入docker run后的控制台输出内容,是否在运行时发生了问题。

6.测试

部署成功后,通过网页访问 ‘本机ip’:8080 可以进入FATE Board页面,账号密码默认为:admin

返回终端,输入

docker exec -it standalone_fate bash

进入对应容器(若无此容器,使用docker ps看一下是不是名字不一样)使用命令

flow test toy -gid 10000 -hid 10000

之后进入FATE Broad,点击右上角JOBS,看到任务栏出现两项任务,并且状态为success则说明成功。

四、集群部署

部署集群需要较多前置步骤,并且对于不同系统可能会存在一些差别,本文只在centOS下搭建集群。你需要准备至少两台主机,且拥有16G或以上内存。

注意:对于初次接触的人来说可能会弄混多台主机之间的步骤,强烈建议先单独处理完一台主机后,将其镜像拷贝为不同的主机,这样可以避免因为粗心导致的难以查找的问题。

1.环境准备

1)首先通过前文步骤安装docker和python,如果你之前在安装docker时未更新yum源,则安装的docker18.x可能会在后续安装中出现‘python Health XXX invaild...’的错误,尽管官方文档中只要求docker版本为18+,请将其升级为最新的19+以上。

2)此外还需要安装Docker-Compose

pip install -U docker-compose

#如果你的服务器上找不到pip命令,可以使用以下命令安装pip
yum -y install python-pip

3)新安装的centOS可能是没配置网卡的,集群部署要求多个主机之间能相互连通,如果发现不能联网,请尝试以下命令:

cd /etc/sysconfig/network-scripts/
vi ifcfg-网卡名称

#将文件中的ONBOOT=no改为yes

#重启网卡
service network restart

4)禁用selinux,否则可能导致后续过程中mysql服务无法启动的问题。由于不同系统版本的selinux文件位置不同,可以根据网上对应的教程进行关闭,这里只做示范。

sudo vi /etc/sysconfig/selinux
#将SELINUX=enforcing改为SELINUX=disabled

2.下载部署脚本以及对应镜像

在官方发布页面下载对应的部署脚本(发布页面)找到kubefate-docker-compose-....那一项,在服务器根目录下建立名为kubeFATE的文件夹,将脚本下载并解压至该目录。

通过docker pull命令下载多个框架组件的镜像,镜像的下载是非必须的,因为在后续执行部署文件时也会自动检测是否需要下载。

docker pull federatedai/eggroll
docker pull federatedai/fateboarde
docker pull federatedai/python
docker pull federatedai/serving-server
docker pull federatedai/serving-proxy
docker pull federatedai/serving-admin
docker pull bitnami/zookeeper:3.7.0 
docker pull mysql:8.0.28

3.配置部署机连接

如果之前的配置都是在一台服务器上进行的,此时已经可以将其镜像打包至其他服务器了。待所有机器全部启动完毕后,找到它们对应的ip地址。

选取任意一台作为部署机,部署机需要对其他所有机器能够进行无密码ssh连接,在其他所有主机执行以下命令:

ssh-keygen -t rsa 生成密钥
ssh-copy-id <部署机ip> 发送密钥

输入命令后会有很多参数要求设置,全部按回车即可。之后在部署机上使用 ssh  <目标ip> 测试是否能直接连接。

4.配置部署脚本文件

vi kubeFATE\docker-deploy\parties.conf

打开文件后可以查看到以下配置:

#!/bin/bash

user=root
dir=/data/projects/fate
party_list=(10000 9999)
party_ip_list=(192.168.1.244 192.168.1.129)
serving_ip_list=(192.168.1.244 192.168.1.129)

# backend could be eggroll, spark_rabbitmq and spark_pulsar spark_local_pulsar
backend=eggroll

# true if you need python-nn else false, the default value will be false
enabled_nn=false

# default
exchangeip=

# modify if you are going to use an external db
mysql_ip=mysql
mysql_user=fate
mysql_password=fate_dev
mysql_db=fate_flow

# modify if you are going to use an external redis
redis_ip=redis
redis_port=6379
redis_password=fate_dev

name_node=hdfs://namenode:9000

# Define fateboard login information
fateboard_username=admin
fateboard_password=admin

注意party_list、party_ip_list、serving_ip_list这三项,请将ip替换为对应的本机ip,party_list为部署后集群节点的编号,在使用FATE-flow时需要对应上,可以自行设置。若为第一次部署,建议其他的参数不要修改,以免出错。

5.执行部署脚本

在部署机上执行:

cd kubeFATE\docker-deploy
bash ./generate_config.sh
bash ./docker_deploy.sh all 

若无报错,则可以在各个节点使用 docker ps 命令查看容器是否成功启动

6.在mysql内创建用户

如果在上步骤很久后,federatedai/python容器依然不停重启、退出,使用命令:

docker logs <federatedai/python容器对应ID>

查看日志,是否是因为mysql拒接连接。此时需要手动在mysql容器内创建fate用户和数据表(若无)

进入mysql容器并登陆,使用以下SQL语句创建一个名为fate的用户:

create user fate@'%' identified by 'fate_dev';
grant all privileges on *.* to fate@'%' with grant option;
FLUSH PRIVILEGES;
commit;

7.验证部署

若所有容器均已正常启动,使用以下命令进行验证服务是否正常:

$ docker exec -it confs-10000_client_1 bash                        #进入python组件容器内部
$ flow test toy --guest-party-id 10000 --host-party-id 9999        #验证

登陆各个节点的FATEBoard查看任务是否完成成功。

若为failed,选择任务,点击dashboard查看任务logs,根据日志返回之前步骤查看问题所在。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值