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

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

文章目录

  • 1. standalone-FATE、cluster-FATE、KubeFATE区别的个人理解
  • 2. 前期准备
    • 2.1 安装合适版本的docker和docker-compose
    • 2.2 多台机器之间互相免密码ssh登陆
    • 2.3 如果当前用户非root用户,需要赋予root权限
  • 3.用KubeFATE安装FATE步骤
    • 3.1 下载fate的docker镜像
      • 3.1.1 FATE-1.4.0(能找到fate_1.4.0-images.tar.gz)
      • 3.1.2 FATE-1.5.0(找不到fate_1.5.0-images.tar.gz)
    • 3.2 下载并解压 kubefate-docker-compose
    • 3.3 修改 docker-deploy/partie.conf 配置文件
    • 3.4 执行生成集群启动文件脚本
    • 3.5 执行启动集群脚本
    • 3.6 验证是否部署成功
  • 4.安装过程若干报错处理
    • 4.1 Permission denied
    • 4.2 Couldn't connect to Docker daemon - you might need to run docker-machine start default
    • 4.3 Error starting userland proxy: listen tcp 0.0.0.0:8080: bind: address already in use
    • 4.4 反复出现端口占用Error starting userland proxy: listen tcp 0.0.0.0:9380: bind: address already in use
    • 4.5 confs-10000_mysql_1 容器反复重启
    • 4.6 进入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

如果运行成功,其结果如下图所示:
FATE | ubuntu用KuteFATE在多台机器部署联合学习框架FATE——要点_第1张图片

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可以查看状态;

你可能感兴趣的:(#,Linux,/,Ubuntu,linux,docker)