使用Docker Compose 部署FATE v1.5.0 - FederatedAI/KubeFATE GitHub Wiki

FATE已经发布了首个长期支持版本,怎样快速体验新版本的FATE来做联邦学习的实验任务呢,接下来我们带领大家一起使用docker-compose来快速部署FATE v1.5.0 LTS。

本文将指导你在两台Linux主机上使用docker-compose部署两方的FATE集群。

准备环境

使用docker-compose部署FATE需要三台Linux的机器,两个工作机和一个部署机。

硬件需求

  • 两台工作机,Linux系统,推荐配置为:8核,16G内存以上;

  • 一台部署机,只需要是Linux环境的机器就可以;

本文使用VMware workstation来新建两台虚拟机,部署机使用本机的Windows的WSL环境,也可以使用上边两台机器的任意一台。

安装部署环境信息如下:

Role hostname OS IP
工作机 partyA Centos7 192.168.0.9
工作机 partyB Centos7 192.168.0.10
部署机(WSL) localhost Ubuntu-18.04 localhost

本文运行FATE的主机使用的是centos环境,由于docker container的运行不依赖主机操作系统,所以使用 Ubuntu也是可以的,不过基础环境配置的命令会有一些不同。

基础环境

这部分需要同时在两个目标机器上操作

关闭防火墙

# 关闭防火墙
sudo systemctl stop firewalld
# 查看防火墙状态
sudo systemctl status firewalld

image-20201119121237430

安装docker

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# Step 3: 安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io
# Step 4: 开启Docker服务
sudo service docker start
# 验证Docker是否正确安装。
sudo docker run hello-world

image-20201119121359313

如果你使用上面的方式安装docker,不能成功,也可以使用docker-ce其他安装方式

安装docker-compose

# step 1: 下载Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# step 2: 增加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# step 3: 创建指向/usr/bin的符号链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# step 4: 测试安装结果
sudo docker-compose --version

image-20201119121607753

如果你使用上面的方式安装docker,不能成功,也可以使用docker-compose其他安装方式

新增用户

# 新增用户fate
sudo useradd -s /bin/bash -g docker -d /home/fate fate
# 设置用户密码
sudo passwd fate

image-20201119121931274

配置免密

这部分需要在部署机上操作

# step 1: 生成公私钥
ssh-keygen
# step 2: 发送到partyA
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
# step 3: 发送到partyB
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

image-20201118173911456

安装FATE

安装FATE比较简单,只需要下载相应的安装包,解压,配置,安装就可以了。接下来是具体操作:

下载安装包

在部署机下载FATE的docker-compose安装包

# 下载
wget https://github.com/FederatedAI/KubeFATE/releases/download/v1.5.0/kubefate-docker-compose-v1.5.0.tar.gz
# 解压
tar -xvf kubefate-docker-compose-v1.5.0.tar.gz
# 进入安装安装目录
cd docker-deploy

image-20201119115642991

FATE的各个版本的安装包都可以在这里找到https://github.com/FederatedAI/KubeFATE/releases

修改配置

我们在partyA上部署9999,在partyB上部署10000,按顺序填写party_id和party_ip。

$ vi parties.conf
#!/bin/bash

user=fate                                       # 运行FATE的系统用户(对应上文的新增用户)
dir=/data/projects/fate                         # 运行FATE的文件目录
party_list=(10000 9999)                         # 部署的party_id
party_ip_list=(192.168.0.10 192.168.0.9)     # 部署FATE的party_ip
serving_ip_list=(192.168.0.10 192.168.0.9)   # 部署FATE-Serving的party_ip

# computing_backend could be eggroll or spark.
computing_backend=eggroll                       # FATE的计算引擎

# 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

主要修改party_ip_listserving_ip_list,其他的可以默认不变。 如果想要使用spark计算引擎,修改computing_backend=spark即可。

image-20201118172800040

第一次部署的时候镜像需要从docker hub下载,由于国内用户经常不能链接docker hub,可以使用hub.c.163.com的镜像,只需要配置RegistryURI就可以。

$ vi .env
RegistryURI=hub.c.163.com                      # 使用国内的镜像地址
TAG=1.5.0-release
SERVING_TAG=2.0.0-release

# PREFIX: namespace on the registry's server.
# RegistryURI: address of the local registry
# TAG: tag of module images.

生成安装包

根据上文的配置生成相对应的安装文件包

bash generate_config.sh

image-20201118172907350

这一步会生成部署FATE的两方的所有tar包。如果修改了配置文件parties.conf或者.env,那么就需要重新生成安装包。

部署

部署双方的FATE和FATE-Serving

bash docker_deploy.sh all

image-20201119122815393

这一步会通过scp和ssh的方式将tar包拷贝到目标主机的对应目录,然后启动FATE集群。

这里使用了参数all直接部署了party10000和party9999的FATE与FATE-Serving,如果想要只部署一个部分,可以参考这里的详细使用

检查FATE是否部署成功

# 进入work目录
cd /data/projects/fate/confs-<party_id>/
# 查看containers状态
docker-compose ps
# 检查fateflow是否成功运行
docker-compose logs python

image-20201119123259199

image-20201119123816037

所有的组件状态都是Up并且python容器中出现"* Running on http://x.x.x.x:9380/ (Press CTRL+C to quit)"的日志消息代表FATE已经成功启动。

测试FATE是否部署成功

# 进入fateflow的container
docker-compose exec python bash
# 进入toy_example目录
cd ../examples/toy_example/
# 运行toy_example命令
python run_toy_example.py 9999 10000 1
# 如果是在partyB的机器,注意<party_id>的顺序
# python run_toy_example.py 10000 9999 1

image-20201119124929450

image-20201119124955174

显示job status is running代表任务已经开始运行,并且出现"success to calculate secure_sum, it is 2000.0"代表任务已经成功。

使用FATE

在使用WSL部署的时候,屏幕显示有fateboard和notebook的地址

image-20201119125336176

查看fateboard

在浏览器分别打开双方的fateboard

image-20201119130111075

image-20201119130143942

image-20201119130310123

使用notebook

查看notebook

image-20201119130507858

使用notebook运行toy_example

step 1: 打开partyA的notebook里面的toy_example示例,http://192.168.0.9:20000/notebooks/Toy_Example/toy_example_submit_job.ipynb

image-20201120114604594

step 2:修改默认的party_id

image-20201120115218592

step 3:运行toy_example

image-20201120115431527

出现success,使用notebook运行toy_example成功,接下来使用notebook完成自己的联邦学习模型建设吧!

参考文档:

https://github.com/FederatedAI/KubeFATE/blob/v1.5.0/docker-deploy/README.md

https://github.com/FederatedAI/FATE/blob/v1.5.0/examples/toy_example/README.md

⚠️ **GitHub.com Fallback** ⚠️