一、开始

首先,在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/bashuser=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_devname_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,根据日志返回之前步骤查看问题所在。

FATE联邦学习框架部署实践相关推荐

  1. Ubuntu Kylin使用docker单机部署Fate联邦学习框架

    Ubuntu Kylin使用docker单机部署Fate联邦学习框架 Fate联邦学习框架分为单机部署和集群部署,本文是在Ubuntu Kylin上使用docker单机部署Fate联邦学习框架,具体环 ...

  2. FATE联邦学习框架之KubeFATE部署(基于K8S)最详细过程

    概述:FATE(Federated AI Technology Enabler)是一个联邦学习框架,能有效帮助多个机构在满足用户隐私保护.数据安全和政府法规的要求下,进行数据使用和建模.但由于其系统的 ...

  3. 使用Kubernetes部署一个带有exchenge结点的FATE联邦学习网络

    系列文章目录 FATE联邦学习框架之KubeFATE部署(基于K8S)最详细过程_顿顿有鱼有虾的博客-CSDN博客_kubefate K8s初探入门详细教程(一)_顿顿有鱼有虾的博客-CSDN博客_k ...

  4. 百度开源联邦学习框架 PaddleFL:简化大规模分布式集群部署

    百度开源联邦学习框架 PaddleFL:简化大规模分布式集群部署 作者 | 钰莹近两年,联邦学习技术发展迅速.作为分布式的机器学习范式,联邦学习能够有效解决数据孤岛问题,让参与方在不共享数据的基础上联 ...

  5. 微众银行AI团队开源联邦学习框架,并发布《联邦学习白皮书1.0》

    (图片由AI科技大本营付费下载自视觉中国) 编辑 | Jane 来源 | <联邦学习白皮书1.0> 出品 | AI科技大本营(ID:rgznai100) [导语]2019年,联邦学习成为业 ...

  6. 联邦学习框架和数据隐私综述

    联邦学习 --新型的分布式机器学习技术. 一.联邦学习开源框架 1.联邦学习框架(按架构分类) 联邦学习常用的框架分为2种:中心化框架.去中心化框架,以中心化框架为主. 2.联邦学习的分类(按照参与方 ...

  7. MindSpore联邦学习框架解决行业级难题

    内容来源:华为开发者大会2021 HMS Core 6 AI技术论坛,主题演讲<MindSpore联邦学习框架解决隐私合规下的数据孤岛问题>. 演讲嘉宾:华为MindSpore联邦学习工程 ...

  8. Tensorflow Federated Framework 谷歌联邦学习框架:自底向上简明入门

    0.前言 参考:谷歌联邦学习框架.谷歌联邦学习Blog.Stack Overflow上的讨论 只使用TF实现联邦学习的另两篇博客:[联邦学习]用Tensorflow实现联邦模型AlexNet on C ...

  9. [tensorflow]联邦学习框架TFF安装记录(基于docker)

    1.介绍 tensorflow federated (下面简称为TFF) 是谷歌开发的一款开源联邦学习框架,该框架基于tensorflow (下面简称为TF) 运行.安装这个框架花了我两天时间,现在对 ...

最新文章

  1. 把Illustrator矢量图转化为代码:Drawscript
  2. linux 进程 setuid,linux特殊权限位之setuid、setgid和sticky
  3. python3虚拟环境使用教程_python虚拟环境完美部署教程
  4. 国产杀毒软件也开始支持虚拟化
  5. erwin模型导入mysql_使用erwin进行mysql建模
  6. ~~单调栈(数据结构)
  7. Python:获取代码运行时间方法
  8. ashx在web.config中如何配置_网络中,什么是半双工与全双工?它们如何配置
  9. mysql表添加字段_怎么给mysql数据表添加字段
  10. linux 下qt 中关于字符集及其转换
  11. 手机型号JSON数据
  12. 利用matlab聚类分析,利用Matlab软件实现聚类分析
  13. IDM安装及使用方法快速入门
  14. 中间件是什么意思?中间件技术简介
  15. 计算机编码怎么记忆,怎样有效记忆数字编码?
  16. 超声图像拼接及三维重建
  17. Liang Yichen
  18. 好安卓博客收集【2022年】
  19. [编程题]漂流船问题
  20. 地铁读书笔记-容量规划

热门文章

  1. 关于Android集成高德地图的那些事儿...显示地图
  2. 关于自己编写简单游戏编辑器的介绍
  3. 微软的APT服务器探针产品,网络探针介绍
  4. Python实现抠图给证件照换背景
  5. 网易游戏TTT面试总结
  6. 计算机网络(非常全,建议收藏)
  7. 关于eclipse的代码提示Content Assist
  8. oracle全表增量抽取,每日数据增量抽取问题讨论
  9. 轻轻松松理解Base64
  10. 对node工程进行压力测试与性能分析