FATE | ubuntu用KuteFATE在多台机器部署联合学习框架FATE——要点

【自己的理解和体验,可能有不对的地方,供新手参考,结合官方教程使用效果更佳】

1. standalone-FATE、cluster-FATE、KubeFATE区别的个人理解

Standalone-FATE:
如字面意思,单击版本的FTAE,适合用来自己学习FATE;

Cluster-FATE:
字面意思是集群FATE,个人感觉更容易的理解是“多个party”联合训练的FATE,我们要进行真正的多台机器联合学习,要部署这种FATE;

KubeFATE:
它是在研发和测试环境下,用来部署集群FATE(Cluster-FATE)的的工具。在多台机器上部署完之后它就没用了;例如要安装1.5版本的fate最好用1.5版本的KubeFATE,KubeFATE里面有个 .env 文件,里面有fate的组件的版本(其实是镜像的版本);

Kubernetes-FATE:
还没研究过,是生产环境下部署FATE用的,生产环境和研发测试环境还是差异比较大,所以需要的工具也不同。


2. 前期准备

2.1 安装合适版本的docker和docker-compose

可以参考ubutnu安装docker和docker-compose简易命令

2.2 多台机器之间互相免密码ssh登陆

可以参考:如何实现两台服务器相互免密码登录服务器之间实现免密登录的简易教程(这俩没试成功,仅供参考)。

或者参考官方教程 官方安装fate教程里面的免密码设置(没试过)。

2.3 如果当前用户非root用户,需要赋予root权限

可以参考ubuntu给用户sudo权限


3.用KubeFATE安装FATE步骤

3.1 下载fate的docker镜像

3.1.1 FATE-1.4.0(能找到fate_1.4.0-images.tar.gz)

(1)新建文件夹 KubeFATE,下载Docker镜像文件(FATE官方做好的镜像)到文件夹下:

wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/fate_1.4.0-images.tar.gz

(2)加载镜像

docker load -i fate_1.4.0-images.tar.gz

(3)验证镜像

docker images

如果运行成功,其结果如下图所示:
在这里插入图片描述

3.1.2 FATE-1.5.0(找不到fate_1.5.0-images.tar.gz)

可以运行下面的语句来pull需要的镜像:(可能需要几十分钟来pull镜像)

# 此版本号最好从相应版本的kube_fate的docker-deploy/.env文件里查看
version=1.5.0          
# 此版本号最好从相应版本的kube_fate的docker-deploy/.env文件里查看
version_server=2.0.0   
#
docker pull federatedai/eggroll:$version-release
docker pull federatedai/fateboard:$version-release
docker pull federatedai/python:$version-release
docker pull federatedai/client:$version-release
docker pull federatedai/serving-server:$version_server-release
docker pull federatedai/serving-proxy:$version_server-release
docker pull redis:5
docker pull mysql:8

在guest和host的两台机器上都要运行上述代码,就可以得到安装fate所有镜像,效果和3.1.1中一样。

有时候需要一些管理镜像的操作,比如删除镜像,删除容器等,请参考Docker 删除所有容器和镜像

3.2 下载并解压 kubefate-docker-compose

curl –L https://github.com/FederatedAI/KubeFATE/releases/download/v1.4.0/kubefate-docker-compose.tar.gz
tar -xzf kubefate-docker-compose.tar.gz

3.3 修改 docker-deploy/partie.conf 配置文件

user=ubuntu   ##你当前的用户名
dir=/home/ubuntu/FATE_party     ##要安装的所有机器上fate安装目录
partylist=(10000 9999)				##要安装的所有机器的party编号
partyiplist=(1.1.1.110 1.1.1.111)   ##要安装FATE的所有机器的IP地址
servingiplist=(1.1.1.110 1.1.1.111) ##模型预测服务的IP地址,这个我观察基本都是和partylist一样

如果用的是1.4.0版本的KubeFATE,可能需要修改 docker-deplpy/.env中的版本号。

3.4 执行生成集群启动文件脚本

sudo bash generate_config.sh

3.5 执行启动集群脚本

sudo bash docker_deploy.sh all

3.6 验证是否部署成功

(1)fate-1.4.0的验证方式

docker exec -it confs-10000_python_1 bash
cd /data/projects/fate/python/examples/toy_example/
python run_toy_example.py 10000 9999 1 ##后面三个整数分别是  运行例子的两个party ID和训练模式——1表示多台机器训练

(2)fate-1.5.0的验证方式

docker exec -it confs-10000_python_1 bash
#路径里少了python,1.5里examples和python在同一目录下
cd /data/projects/fate/examples/toy_example/  
python run_toy_example.py 10000 9999 1

4.安装过程若干报错处理

我发现每个人遇到的问题都不太一样,但是体会是用搜索搜错误,比github上issue里找答案要靠谱。这里仅仅是我自己遇到的几个问题。


4.1 Permission denied

【现象1】
在安装过程中,当安装程序登陆其他IP机器的时候,需要输入其他机器的密码,输入正确的密码,但是都会报错Permission denied (publickey);
【原因和解决办法1】
是因为在当前用户下,不同的机器之间不互信。也就是不能在A机器上用ssh登陆B机器。我是找的服务器运维的同事给开的互信。这个在一些商用云服务器上可能没有这个问题。

【现象2】
安装过程中(不是需要输入密码的时候),也会在中间某些行出现;
【原因和解决办法2】
这可能是因为party.conf文件中的 dir 设置到了root下,这时候需要修改dir,使其在当前用户目录下。这种情况一般出现在用户不是root的时候

【现象3】
安装过程中有时候解压 tar命令或者docker compose up 等操作中,有时候也会出现;
【原因和解决办法3】
可以直接修改 docker_deploy.sh代码中,在相应命令行前面加上 sudo。


4.2 Couldn’t connect to Docker daemon - you might need to run docker-machine start default

【现象】
最后安装过程中,当运行子命令 dorker-compose up -d或者运行 docker-compose down的时候,会出现报错。

【原因和解决办法】
(1)原因是当前用户没有root权限。解决办法是给当前用户root权限;
(2)如果(1)不管用,可以直接在docker_deploy.sh代码中给报错或者运行失败的代码前面加上 sudo


4.3 Error starting userland proxy: listen tcp 0.0.0.0:8080: bind: address already in use

【现象】
安装过程中出现,其中的端口号,可能有所不同。

【原因和解决办法】
有时候,一次运行不成功,会反复安装。这样有时候前面的容器或者进程占用端口。解决办法是找到这个端口,然后杀死程序,重新安装,这个参考了stackoverflow上的一个回答

docker stop $(docker ps -a -q)
docker ps # again to make sure containers is off
# now you get and list of process running and using 8080 
sudo lsof -i tcp:8080
sudo kill -9 yout_PID

4.4 反复出现端口占用Error starting userland proxy: listen tcp 0.0.0.0:9380: bind: address already in use

【现象】
这个和4.4的区别是,用4.4的方法不管用,还是总会有进程占用端口。观察发现关闭这个进程之后,过小会儿还会出现出现另一个进程号占用该端口,我遇到的是反复占用9380

【原因】
个人分析,原因是这个进程是另一个进程的子进程,是占用另一个端口的进程调用这个进程,所以“屡禁不止”。

【解决办法】
我尝试了多次,最后解决了,但是这个解决办法不一定百试百灵。
安装过程中出现这个问题,不要管这个错误,继续安装,看看是否还有其他端口被占用,调用4.4中的解决办法,把报错的端口的占用进程都关掉,然后重新运行deploy命令。我关掉的端口有 8000,8059,8869,9370,20000等,把这些都关掉就可以顺利重装了。


4.5 confs-10000_mysql_1 容器反复重启

【现象】
进入fate环境之后又退出,
docker ps发现mysql这个容器会反复重启,与此同时,python_1这个容器也在反复重启。
查看docker日志,报错信息是:

InnoDB: Unable to lock ./ibdata1, error: 11

【解决办法1】
进入这个文件所在的文件夹(我用的locate ibdata1找到的),然后拷贝一个这个文件:

mv ibdata1 ibdata1.bak 
cp -a ibdata1.bak ibdata1

这个解决办法来自 MySQL keeps crashing: InnoDB: Unable to lock ./ibdata1, error: 11的一个回答。
这个方法有点傻,因为还有好几个其他的文件,报同样的错,挨个进行这种操作,最后mysql_1 这个容器不会反复重启了。

【解决办法2】
sudo reboot 重启机器,然后重新安装fate。

4.6 进入FATE环境之后又退出

【现象】
执行 docker exec -it confs-10000_python_1 bash 之后,又退出。

如果用docker ps查看,会看到有些容器会自动重启。

报错信息包括但不限于:
(2003, “Can’t connect to MySQL server on ‘mysql’ (timed out)”)

【原因】
原因不明。只管来看,就是容器出问题。

【解决办法】
从别人那里听来的一个办法,可以尝试:
1)进入 /data/project/fate/ ;
2)进入 conf-partyid的目录 ;
3)docker-compose down;
4)等待所有的done后,再次启动,执行: docker-compose up -d;
5)都done之后,docker ps可以查看状态;

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值