服务器 | |
---|---|
数量 | 1 or 2 |
配置 | 8 core /16GB memory / 500GB硬盘/10M带宽 |
操作系统 | CentOS linux 7.2及以上 |
依赖包 | yum源: gcc gcc-c++ make openssl-devel supervisor gmp-devel mpfr-devel libmpc-devel libaio numactl autoconf automake libtool libffi-devel snappy snappy-devel zlib zlib-devel bzip2 bzip2-devel lz4-devel libasan (可以使用初始化脚本env.sh安装) |
用户 | 用户:app,属主:apps(app用户需可以sudo su root而无需密码) |
文件系统 | 1. 500G硬盘挂载在/ data目录下; 2.创建/ data / projects目录,目录属主为:app:apps |
party | 主机名 | IP地址 | 操作系统 |
---|---|---|---|
PartyA | VM_0_1_centos | 192.168.0.1 | CentOS 7.2 |
PartyB | VM_0_2_centos | 192.168.0.2 | CentOS 7.2 |
1)修改主机名
在192.168.0.1 root用户下执行:
hostnamectl set-hostname VM_0_1_centos
在192.168.0.2 root用户下执行:
hostnamectl set-hostname VM_0_2_centos
2)加入主机映射
在目标服务器(192.168.0.1 192.168.0.2)root用户下执行:
vim /etc/hosts
192.168.0.1 VM_0_1_centos
192.168.0.2 VM_0_2_centos
在目标服务器(192.168.0.1 192.168.0.2)root用户下执行:
sed -i '/^SELINUX/s/=.*/=disabled/' /etc/selinux/config
setenforce 0
在目标服务器(192.168.0.1 192.168.0.2)root用户下执行:
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
在目标服务器(192.168.0.1 192.168.0.2)root用户下执行
systemctl disable firewalld.service
systemctl stop firewalld.service
systemctl status firewalld.service
1)创建用户
在目标服务器(192.168.0.1 192.168.0.2)root用户下执行
groupadd -g 6000 apps
useradd -s /bin/bash -g apps -d /home/app app
passwd app
1)配置sudo
在目标服务器(192.168.0.1 192.168.0.2)root用户下执行
vim /etc/sudoers.d/app
app ALL=(ALL) ALL
app ALL=(ALL) NOPASSWD: ALL
Defaults !env_reset
2)配置ssh无密登录
a. 在目标服务器(192.168.0.1 192.168.0.2)app用户下执行
su app
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> /home/app/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
b.合并id_rsa_pub文件
拷贝192.168.0.1的authorized_keys 到192.168.0.2 ~/.ssh目录下,追加到192.168.0.2的id_rsa.pub到authorized_keys,然后再拷贝到192.168.0.1
在192.168.0.1 app用户下执行
scp ~/.ssh/authorized_keys [email protected]:/home/app/.ssh
输入密码
在192.168.0.2 app用户下执行
cat ~/.ssh/id_rsa.pub >> /home/app/.ssh/authorized_keys
scp ~/.ssh/authorized_keys [email protected]:/home/app/.ssh
覆盖之前的文件
c. 在目标服务器(192.168.0.1 192.168.0.2)app用户下执行ssh 测试
注:此指导安装目录默认为/data/projects/,执行用户为app,安装时根据具体实际情况修改。
在目标服务器(192.168.0.1 具备外网环境)app用户下执行:
注意:服务器需已安装好git和maven 3.5+
进入执行节点的/data/projects/目录,执行:
cd /data/projects/
git clone https://github.com/FederatedAI/FATE.git
cd FATE/cluster-deploy/scripts
bash packaging.sh
构建好的包会放在FATE/cluster-deploy/packages目录下。
在目标服务器(192.168.0.1)app用户下执行
进入到FATE目录下的FATE/cluster-deploy/scripts目录下,修改配置文件allinone_cluster_configurations.sh.
配置文件allinone_cluster_configurations.sh说明:
配置项 | 配置项意义 | 配置项值 | 说明 |
---|---|---|---|
user | 操作用户 | 默认为app | 使用默认值 |
deploy_dir | Fate安装路径 | 默认为 /data/projects/fate | 使用默认值 |
party_list | Party的id号 | 每个数组元素代表一个partyid,只支持数字,比如9999,10000. | 只部署一个party,只填写一个partyid,部署两个party,填写两个partyid。 |
node_list | 所有party的待部署服务器列表 | 表示所有party中包含的服务器ip列表 | 部署一个party,只填写一个ip,部署两个party,填写两个ip。如果需要一个节点部署两个party,party_list处填写两个id,此处只填写一个IP。 |
db_auth | metaservice Jdbc连接数据库配置 | metaservice服务jdbc配置,填写数据库用户名和密码(此用户需要具有create database权限) | 两个party配置相同。 |
redis_password | Redis密码 | 默认 : fate_dev | 使用默认值,两个party配置相同。 |
cxx_compile_flag | 用于Storage-Service-cxx节点complie方法的切换 | 默认:false | 如果服务器系统不满足Storage-Service-cxx节点的编译要求,请尝试使用true。 |
1)两台主机partyA+partyB同时部署**
#!/bin/bash
user=app
deploy_dir=/data/projects/fate
party_list=(10000 9999)
node_list=(192.168.0.1 192.168.0.2)
db_auth=(fate_dev fate_dev)
redis_password=fate_dev
cxx_compile_flag=false
2)只部署一个party
#!/bin/bash
user=app
deploy_dir=/data/projects/fate
party_list=(10000)
node_list=(192.168.0.1)
db_auth=(fate_dev fate_dev)
redis_password=fate_dev
cxx_compile_flag=false
按照上述配置含义修改allinone_cluster_configurations.sh文件对应的配置项后,然后在FATE/cluster-deploy/scripts目录下执行部署脚本:
cd FATE/cluster-deploy/scripts
如果需要部署所有组件,执行:
bash deploy_cluster_allinone.sh build all
如果只部署部分组件:
bash deploy_cluster_allinone.sh build fate_flow
执行后可到各个目标服务器上进行检查对应模块的配置是否准确,每个模块的对应配置文件所在路径可在此配置文件下查看cluster-deploy/doc
在目标服务器(192.168.0.1 192.168.0.2)app用户下执行
cd /data/projects/fate
启动所有模块:
sh services.sh all start
启动单个模块:
sh services.sh proxy start
如果逐个启动模块,需要先启动eggroll再启动fateflow,fateflow依赖eggroll的启动。
在目标服务器(192.168.0.1 192.168.0.2)app用户下执行
查看各个服务进程是否启动成功:
cd /data/projects/fate
查看所有:
sh services.sh all status
查看单个模块:
sh services.sh proxy status
在目标服务器(192.168.0.1 192.168.0.2)app用户下执行
若要关闭服务则使用:
cd /data/projects/fate
关闭所有:
sh services.sh all stop
关闭单个模块:
sh services.sh proxy stop
在目标服务器(192.168.0.1 192.168.0.2)app用户下执行
source /data/projects/fate/init_env.sh
cd /data/projects/fate/python
sh ./federatedml/test/run_test.sh
显示“ok”表示成功,显示 “FAILED”则表示失败,程序一般在一分钟内显示执行结果。
此测试您需要设置3个参数:guest_partyid,host_partyid,work_mode。
此测试只需在guest方egg节点执行,选定9999为guest方,在192.168.0.2上执行:
source /data/projects/fate/init_env.sh
cd /data/projects/fate/python/examples/toy_example/
python run_toy_example.py 9999 10000 1
测试结果将显示在屏幕上。
在guest和host两方各任一egg节点中,根据需要在run_task.py中设置字段:guest_id,host_id,arbiter_id。
该文件在/data/projects/fate/python/examples/min_test_task /目录下。
在Host节点192.168.0.1上运行:
source /data/projects/fate/init_env.sh
cd /data/projects/fate/python/examples/min_test_task /
sh run.sh host fast
从测试结果中获取“host_table”和“host_namespace”的值,并将它们作为参数传递给下述guest方命令。
在Guest节点192.168.0.2上运行:
source /data/projects/fate/init_env.sh
cd /data/projects/fate/python/examples/min_test_task/
sh run.sh guest fast $ {host_table} $ {host_namespace}
等待几分钟,看到结果显示“成功”字段,表明操作成功。在其他情况下,如果失败或卡住,则表示失败。
只需在命令中将“fast”替换为“normal”,其余部分与快速模式相同。
Fateboard是一项Web服务。如果成功启动了fateboard服务,则可以通过访问http://192.168.0.1:8080和http://192.168.0.2:8080来查看任务信息。