由于毕业设计需要,综合考虑了目前主流的联邦学习框架,最终选择了FATE进行本地化部署,本指南仅在VMware上部署作实验验证之用,生产环境视实际情况部署方式可能有所不同喔!
前期准备
-
VMware安装,这里就不赘述啦,大家自行百度哦,附官网链接
-
CentOS镜像文件下载,注意哦,目前FATE框架仅支持CentOS 7.2/Ubuntu 18.04以上
-
(以下以CentOS为例)
-
进入centos官网The CentOS Project
点击CentOS Linux
- 选择X86_64
- 下载源选择第一个阿里云即可
- 选择下图条目下载即可
-
环境配置
小伙伴们注意哦,再进行接下来的虚拟机配置前,最好保证硬盘有足够的空间,方便后期FATE的部署。
虚拟机配置
-
打开VMware选择创建新的虚拟机
-
进入向导页面选择->典型->稍后安装操作系统
-
-
配置名称及路径
-
配置硬盘空间,按照官方文档部署是在一块500G空盘上进行的,后续需要配置超过128G/节点作为虚拟内存,但是目前机子上没有足够的空余空间,因此每个节点我只配置了120G空间,不用担心会一下子把硬盘占满,虚拟机空间会随着实际使用的量来慢慢增加直至上限。
-
下一步选择自定义硬件,这里我调整了一下内存和CPU数量以及使用的镜像文件
ok,点击完成,接下来愉快的打开虚拟机咯♪(^∇^*)
进入引导界面后直接回车即可
接下来需要等待一段时间自检,这段时间干啥好呢?看会小说?当然不!等待过程中,我们可以重复上述步骤再创建一个新的虚拟机,它将作为我们集群中的另一个节点!当然,别忘了更改一个新的虚拟机名字哦,这里我使用了fate101
CentOS安装
-
首先是安装时的语言,这里选择中文即可
-
进入配置界面,为了以后命令方便,此处键盘我改为了英文键盘
-
点击软件选择
选择带GUI的服务器
-
点击安装位置进行手动分区(重要)
点击完成
这里可以先点自动创建,随后再修改大小
最后空间分配如下,仅供参考
完成->接受更改
-
再对网络和主机名进行配置
上图绿框部分大家根据自己实际情况修改,网关地址可以在VM的虚拟网络编辑器里查看,实在不知道如何修改的小伙伴可以评论区留言哈,别忘了点右下角保存喔!
随后点击调成打开,应该就可以看到刚才的配置项了!,这里忘了说下面的主机名记得要点右边的应用哦
最后点击完成退回配置界面,点击开始安装即可!
-
安装过程中可以顺便配置一下Root密码,这里就不赘述了
-
接下来的等待时间,同样按照上述操作配置另一台虚拟机,然后emm...这里应该没那么快,看会小说吧<( ̄︶ ̄)↗[GO!]
-
完成后记得点重启喔!
-
重启后先接受许可证,然后直接点击完成即可
-
后续的配置没啥难点,不再赘述,对另一台虚拟机也执行相同配置
-
顺利进入桌面啦,系统安装告一段落
系统杂项配置
以下配置在两台虚拟机上均需进行,标示重要的对后续实验有影响
hosts文件配置(重要)
root执行
cd /etc/
vim hosts
在原文件上添加上以下两行,即ip地址加主机名
节点连通性实验(重要)
即在fate100和fate101上分别使用ping命令测试网络连通性,双方都正常即可
系统参数修改(重要)
root执行
-
清理20-nproc.conf文件及my.cnf
cd /etc/security/limits.d ls -lrt 20-nproc.conf #若文件存在则执行 mv 20-nproc.conf 20-nproc.conf_bak cd /etc/ mv my.cnf my.cnf_bak
-
修改句柄数、进程数等
vim /etc/security/limits.conf
在文件中加入以下几行 * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535
重启或者注销后重新登陆即可生效
可以用
ulimit -a
查看是否生效
创建用户免密登录
由于仅作实验之用,这里就完全不考虑安全性问题,而是采取偷懒的办法提高效率,因为目前系统默认登录为之前进入系统配置的账户,不具有root权限,配置前需要提权,且可能存在后续权限不足情况,因此这里干脆一劳永逸即使用实验用到的app用户进行后续操作
root执行
groupadd -g 6000 apps
useradd -s /bin/bash -g apps -d /home/app app
passwd app
设置好密码后
vim /etc/gdm/custom.conf
在[daemon]模块后加入以下配置项
AutomaticLoginEnable=True
AutomaticLogin=app
接下来进行sudo配置
vim /etc/sudoers.d/app
#在文件中加入以下三行,具体位置如下图
app ALL=(ALL) ALL
app ALL=(ALL) NOPASSWD: ALL
Defaults !env_reset
随后重启系统即可,重启后可能会跳出配置对话框,全部前进或跳过即可
SSH免密配置(重要)
在fate100和fate101上app身份执行
ssh-keygen -t rsa # 三次回车即可
cat ~/.ssh/id_rsa.pub >> /home/app/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
接下来需要拷贝fate100的authorized_keys 到fate101 ~/.ssh目录下,追加到fate101的id_rsa.pub到authorized_keys,然后再拷贝到fate100
在fate100上app执行
scp ~/.ssh/authorized_keys app@192.168.32.101:/home/app/.ssh
输入yes及fate101上app密码
在fate101上app执行
cat ~/.ssh/id_rsa.pub >> /home/app/.ssh/authorized_keys
scp ~/.ssh/authorized_keys app@192.168.32.100:/home/app/.ssh
输入yes及fate100上app密码
最后,分别在fate100和fate101上执行ssh测试成功免密即可
exit退出ssh
这里建议大家再额外对本机进行一次SSH访问
比如在fate100上 ssh fate100
由于是第一次访问需要手动输入yes验证,后续可以避免部署的时候出bug
关闭防火墙
这是偷懒做法喔,实际开发需要保证安全性还是要仔细配置端口进出规则哈
在fate100和fate101上执行
(这里大家基于自己的防火墙类型执行,不同系统可能会有差异)
sudo systemctl disable firewalld
sudo systemctl stop firewalld
屏幕保护关闭
由于需要同时操作两个虚拟机,可能小伙伴们在切换工作窗口时会发现另一台虚拟机已经进入屏保状态,需要再次输入密码,非常影响体验,只需在设置里修改即可,如下图
FATE部署
以下仅在fate100上执行
FATE安装包下载
这里我下载的是最新版本V2.1.0
首先当然是创建一个项目文件夹
cd ~
mkdir project && cd project/
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/fate/2.1.0/release/fate_cluster_install_2.1.0_release.tar.gz
# 等待下载完成后解压
tar xzf fate_cluster_install_2.1.0_release.tar.gz
配置文件修改
vim fate_cluster_install_2.1.0_release/allInone/conf/setup.conf
这里也附上官方文档的配置项说明(长图警告)
我的配置项如下,标红的为修改项,小伙伴们结合自己实际修改哦
执行部署脚本
按照上述配置含义修改setup.conf文件对应的配置项后,在fate_cluster_install_2.1.0_release/allInone目录下执行部署脚本即可
cd fate_cluster_install_2.1.0_release/allInone
nohup bash ./deploy.sh > logs/boot.log 2>&1 &
yes!接下来只需等待部署完毕啦,曙光就在眼前,但是现在能做的也就是祈祷部署别报错啦哈哈哈,看到这里的小伙伴你已经很棒啦,久坐伤身,站起来伸个懒腰吧!
部署期间,大家也可以查看logs文件夹中的日志文件了解部署情况,这里附上官方说明
tail -f ./logs/deploy.log (部署结束,查看一下即可)
tail -f ./logs/deploy-guest.log (实时打印GUEST端的部署情况)
tail -f ./logs/deploy-mysql-guest.log (实时打印GUEST端mysql的部署情况)
tail -f ./logs/deploy-host.log (实时打印HOST端的部署情况)
tail -f ./logs/deploy-mysql-host.log (实时打印HOST端mysql的部署情况)
如果在部署完毕后日志出现ERR等错误,大家可以去官方说明的以下目录查看错误日志
1)eggroll日志
/home/app/project/fate/eggroll/logs/eggroll/bootstrap.clustermanager.err
/home/app/project/fate/eggroll/logs/eggroll/clustermanager.jvm.err.log
/home/app/project/fate/eggroll/logs/eggroll/nodemanager.jvm.err.log
/home/app/project/fate/eggroll/logs/eggroll/bootstrap.nodemanager.err
2)fateflow日志
/home/app/project/fate/fate_flow/logs/fate_flow
3)fateboard日志
/home/app/project/fate/fateboard/logs
4)osx日志
/home/app/project/fate/osx/logs/broker/
测试
成功部署后,大家可以运行一下FATE官方文档中的两个基准测试,结果正确就是成功了!下面是测试的具体参数及案例
参考文献
GitHub - FederatedAI/FATE: An Industrial Grade Federated Learning Framework