Fate框架教程

GitHub:https://github.com/webankfintech/fatehtml

An Industrial Level Federated Learning Framework https://www.fedai.org/

这篇文章主要是整合Fate框架安装所需的软件环境的安装方法:

软件环境:jdk1.8+、Python3.六、pythonVirtualenv、mysql5.6+、redis-5.0.2
系统环境:Centos7
java

1.Python3.6的安装

http://www.noobyard.com/article/p-nvcdfhqf-w.html
博客连接
(对照博客执行后将出现的问题解决了,按照下面的应该没啥大问题)node

全部指令最好在管理员权限下执行,防止权限不够致使中断python

先安装python3.6的依赖包(否则后面会报错)
命令 : yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-develmysql

下载python3.6编译安装
命令:wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz
(若是没有安装wget, 先安装,命令 : yum install wget)linux

解压: tar -xzvf Python-3.6.0.tgz (解压在home目录)git

指向路径: cd Python-3.6.0 (不知道文件夹在哪能够查找一下 用ls 指令查一下在那个目录下,而后cd)github

编译: ./configure --prefix=/usr/localweb

若是遇到 configure: error: no acceptable C complier found in $PATH
解决: yum install gccredis

继续 : make

make altinstall

更改 /usr/bin/python连接

cd /usr/bin

mv python python.backup

ln -s /usr/local/bin/python3.6 /usr/bin/python
ln -s /usr/local/bin/python3.6 /usr/bin/python3

(执行这些指令时什么都没有发生,不慌)
更改yum脚本的python 依赖
(这个改了不知道有什么用)
cd /usr/bin
ls yum*
vi /usr/bin/yum
vi /usr/libexec/urlgrabber-ext-down
(将执行指令后进入的文件的开头为
#!/usr/bin/python 改成 #!/usr/bin/python2)

以后python3.6就完成了.

2.virtualenv 和 virtualenvwrapper 安装配置

博客地址

安装virtualenv
pip3 install virtualenv
或者 yum install python-virtualenv
失败的话 直接 pip install virtualenv -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

建立python虚拟环境

命令 :virtualenv env1

启动虚拟环境: cd env1/
source bin/activate
python -V

退出虚拟环境: deactivate

https://blog.csdn.net/u010525694/article/details/82251216
博客地址
安装 virtualenvwrapper
命令 : pip install virtualenvwrapper
报错状况:setuptools , pip install 报错的那个东西
若是还报错 AttributeError: module ‘importlib._bootstrap’ has no attribute ‘SourceFileLoader’
升级一下setuptools :pip install --upgrade --ignore-installed setuptools
而后再次: pip install virtualenvwrapper

查找位置: find / -name virtualenvwrapper.sh
会获得一个或者两个位置 :结果咱们将会查找到两个位置

/usr/local/python3/bin/virtualenvwrapper.sh #python3中的
/usr/bin/virtualenvwrapper.sh #python2中的
(能够手动打开目录看看是那个版本的,要用到python3位置)

编辑配置文件:vim ~/.bashrc (我在home目录下手动打开编辑,.bashrc是一个隐藏文件)
将如下两个命令添加到最后面,指定了虚拟环境的位置。

export WORKON_HOME=~/.virtualenvs
source /usr/local/python3/bin/virtualenvwrapper.sh

执行.bashrc使文件生效: source ~/.bashrc

建立虚拟环境 mkvirtualenv -p /usr/bin/python3(根据找到的路径) blog_env_py3

(建立完后均可以用pip install requests 测试一下)

3.Java安装及环境配置

http://www.noobyard.com/article/p-qipkpknr-bw.html

管理员权限下执行:

第一步:建立jdk安装目录

mkdir -p /usr/local/src/jdk

第二步:查看安装程序

rpm -qa | grep -i jdk

    rpm -qa | grep java

(两条都查看一下)

若是有显示一些程序,把这些程序都删掉
用 rpm -e --nodeps 安装的包 卸载这些默认安装的jdk版本
https://jingyan.baidu.com/article/63f236287cb5c60208ab3d35.html

第三步:命令下载jdk包(注意要先定位到刚才建立的jdk目录下)

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz

第四步: 解压

tar -zxvf jdk-8u131-linux-x64.tar.gz

系统会自动生成一个名为:jdk1.8.0_131 的文件夹。可使用mv命令自定义文件名。

mv jdk1.8.0_131  jdk1.8

第五步: 配置环境变量

vi /etc/profile

shift + g 定位到最后一行,这个时候按一下a或i键,进入编辑模式
在末尾添加:
export JAVA_HOME=/usr/local/src/jdk/jdk1.8
export PATH= P A T H : PATH: JAVA_HOME/bin

第六步: 退出文件,保存

按Esc键   输入:wq   保存并退出(“:”也要按)

第七步:让配置文件生效

source /etc/profile

第八步:查看是否配置成功

java -version

(以前删干净后能够查看是否有残余,没有以后最后再输入命令出现版本信息即安装配置完成)
出现 :

java version “1.8.0_131”
Java™ SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot™ 64-Bit Server VM (build 25.131-b11, mixed mode)

即为配置成功

4.MYSQL安装及配置

参考博客

https://www.cnblogs.com/wangdaijun/p/6132632.html

1.下载连接

wget https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.45-linux-glibc2.12-x86_64.tar.gz

定位到/usr/local 目录进行解压

2.更改解压后的文件名

mv mysql-5.6.45-linux-glibc2.12-x86_64 mysql

3.添加mysql 用户组和 mysql 用户

先检查是否有mysql 用户组 和 mysql 用户

groups mysql
( 若是有mysql : mysql 则忽略, 若出先 no such user,则进行建立用户

groupadd mysql
useradd -r -g mysql mysql(可能会有警告)

查看是否建立用户成功 groups mysql
(会出现 mysql :mysql)

4.进入mysql 目录更改权限
命令 ll 查看权限
会发现都是 root root
执行命令修改权限 chown -R mysql:mysql ./
命令 ll 查看
发现都变成了 mysql mysql
5.
在mysql 目录下执行安装脚本

命令: ./scripts/mysql_install_db --user=mysql
(会出现一堆 note)(可能有warning,应该能够忽略)
报错:WARNING: Found existing config file ./my.cnf on the system.
Because this file might be in use, it was not replaced,
but was used in bootstrap (unless you used --defaults-file)
and when you later start the server.
The new default config file was created as ./my-new.cnf,
please compare it with your file and take the changes you need.
解决方法:删除 etc/my.cnf*和 mtsql目录下的my.cnf

其中会出现一个日志提示修改密码的命令
./bin/mysqladmin -u root password ‘new-password’
./bin/mysqladmin -u root -h localhost.localdomain password ‘new-password’(后面用到)

安装完以后修改当前目录拥有者为root 用户,修改 data 目录拥有者为 mysql
命令:
chown -R root:root ./
(ll 命令查看修改结果)
chown -R mysql:mysql data
(ll 命令查看修改结果, 会发现只有data 的拥有者为mysql,其他为root)

6.更改mysql密码
上一步安装脚本执行输出的日志中有提示如何修改密码,不过会报错

须要先启动mysql
命令: ./support-files/mysql.server start
(有些博客教程会把 mysql.server等一些文件单独放到一个service文件里面,命令就改成service mysql.server start, 后面会更改一下路径)
可能报错:启动mysql报错mysqld_safe error: log-error set to ‘/var/log/mariadb/mariadb.log’
解决https://blog.csdn.net/colsum/article/details/89226964
命令:mkdir /var/log/mariadb
touch /var/log/mariadb/mariadb.log
chown -R mysql:db /var/log/mariadb/ (可能报错,直接忽略。。。)
./support-files/mysql.server start

若是mysql启动报错,则多是已经存在mysql进程
执行命令: ps aux|grep mysql 查看进程

而后 kill -9 进程状态码
杀掉进程后从新启动 ./support-files/mysql.server start(成功会提示Success!)
启动后再执行指令更改密码

./bin/mysqladmin -u root -h localhost.localdomain password ‘root’

./bin/mysql -h127.0.0.1 -uroot -proot

此时会弹出mysql> 表示登入成功
7.
登录以后将其余用户密码也可改成root :
update mysql.user set password=password(‘root’) where user=‘root’;(注意’;'也要)

flush privileges;

增长远程登录权限:
一样再mysql>里面执行

grant all privileges on . to root@’%’ identified by ‘root’;

flush privileges;

8.将mysal 加入service 系统服务,不加也能够

cp support-files/mysql.server /etc/init.d/mysqld

chkconfig --add mysqld

chkconfig mysqld on

service mysqld restart(重启mysql)

service mysqld status
9.配置my,cnf

vim my.cnf
添加三条语句,位置能够看博客图片
character_set_server=utf8
lower_case_table_names=1
max_allowed_packet=100M

配置好以后重启mysqld服务
service mysqld restart (报错的话删除mysql下的my.cnf文件后重试)
service mysqld status

进入出mysql> :
./bin/mysql -h127.0.0.1 -uroot -proot

退出:exit;
./support-files/mysql.server start报错解决方法:
https://blog.csdn.net/colsum/article/details/89226964
不行的话尝试删除mysql下两个文件

5.Redis安装和配置

参考博客地址

https://cloud.tencent.com/developer/news/366992

1.下载源码包(习惯上定位到目录/usr/local 下进行下载)

wget http://download.redis.io/releases/redis-5.0.2.tar.gz

解压:tar -zxvf redis-5.0.2.tar.gz

先将解压文件从新命名

mv redis-5.0.2 redis

进入到redis目录下进行编译:

cd redis
make(编译)
(这一步可忽略)make test
(若是出现报错:
You need tcl 8.5 or newer in order to run the Redis test
make: *** [test] Error 1

安装tcl:

1.wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz  
2.tar xzvf tcl8.6.1-src.tar.gz 
3.cd  /usr/local/tcl8.6.1/unix/  
4../configure  
5.make  
6. make install   
)

make install PREFIX=/uer/local/redis

转移配置文件(博客上搞的)

mkdir -p /usr/local/redis/bin
mkdir -p /usr/local/redis/etc
(这些文件应该在/redis/src里面)
cp redis-server redis-cli redis-benchmark /usr/local/redis/bin/ (好像找不到redis-stat,就没搞这个)
(这个文件在redis里)
cp redis.conf /usr/local/redis/etc/

在建立的redis目录下找到配置文件redis.conf(就是进入到 /usr/local/redis/etc/)

vim /usr/local/redis/etc/redis.conf

daemonize:是否之后台daemon方式运行。改为yes

dir:数据快照的保存目录。改为/usr/local/redis

appendonly:是否开启appendonlylog,开启的话每次写操做会记一条log,这会提升数据抗风险能力,但影响效率

requirepass:Redis的链接密码。自行设置吧,默认是注释的,也就是免密码

bind 127.0.0.1:Redis默认绑定本机,也就是默认只容许本机链接访问,若是你想容许远程链接,能够修改IP或者直接注释掉这行,这样就容许所有IP链接访问了。这里须要注意的一点是,下面有一段说明,在redis3.2以后,redis增长了protected-mode,在这个模式下,即便注释掉了bind 127.0.0.1,再访问redisd时候仍是报错,解决办法是把protected-mode 改成no

修改好这些配置后,其余的保持默认,保存退出。咱们来启动Redis。

redis 启动

(我是在/usr/local/redis/src 里面启动的,博客上的启动不了

命令: ./redis-server)

启动以后就退不出来了,迷>…

查看redis 是否启动 ps -ef|grep redis
Redis开机自启动

vim /etc/rc.local

在里面添加:

/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

(意思就是开机调用这段开启redis的命令,固然也能够编写开机自启动脚本:

vim /etc/init.d/redis这里没亲测,就很少作描述)

Redis关闭

使用客户端关闭Redis,若是你没有设置密码,能够直接使用shutdown命令

redis-cli shutdown

若是设置了密码则须要输入密码先完成链接再关闭

redis-cli -a password shutdown

若是还不行,就简单粗暴的kill掉吧

pkill redis

————————————————————分界线—————————————————————

6.FATE运行测试

(后续部份内容待更新。。。)

☆如下为网页翻译结果:
宿命
FATE(FederatedAI TechnologyEnabler)是Webank人工智能部门发起的一个开源项目,目的是提供一个安全的计算框架来支持联邦AI生态系统。它实现了基于同态加密和多方计算(MPC)的安全计算协议.它支持联邦学习体系结构和各类机器学习算法的安全计算,包括逻辑回归、基于树的算法、深度学习和转移学习。

https://www.fedai.org/

介入
加入咱们的邮件列表命运-费代集团IO…你能够提出问题并参与开发讨论。

对于任何常见的问题,您均可以办理登机手续。常见问题.

请报告错误问题.

使用拉请求

安装
命运能够安装在Linux或Mac上。如今,FATE能够支持独立部署和集群部署。FATE能够经过如下方式安装在Linux上:

git clone https://github.com/WeBankFinTech/FATE.git
软件环境:jdk1.8+、Python3.六、pythonVirtualenv、mysql5.6+、redis-5.0.2

独立
码头版本
FATE $ sh build_standalone_docker.sh

**

可能会报错:(缘由:未安装docker)

解决方法:

#安装 yum -y install docker-io
#运行docker服务
service docker start

systemctl start docker
#再运行查看版本 docker -v

可能错误:File “/usr/bin/yum”, line 30 except KeyboardInterrupt, e:
解决方法:修改yum的Python解析版本为2.7
https://blog.csdn.net/eaxy_z/article/details/80798061
**

————————继续——————————

FATE $ CONTAINER_ID=docker run -t -d fate/standalone
FATE $ docker exec -t -i ${CONTAINER_ID} bash
下面有几种算法实例/文件夹,试试!

手册版本
FATE (venv) $ pip install -r requirements.txt
FATE (venv) $ export PYTHONPATH=pwd -P
聚类
命运还为大数据场景提供了分布式运行时架构。从独立迁移到集群只须要更改配置。无需修改算法。

若要在群集上部署命运,请参阅群集部署指南集群部署.

运行测试
在./Federatedml/test文件夹中提供了运行全部单元测试的脚本。

一旦安装了命运,就可使用如下方法运行测试:

sh./Federatedml/test/run_test.sh

若是命运安排得当,全部的联合测试都将经过。

示例程序
启动程序
“命运”中还提供了几个示例程序。实例/每一个算法的目录。您能够查看每一个特定算法目录中的详细文档。这里,咱们以异构LR为例。在……里面CONF目录中,咱们提供了几个json文件做为配置模板。json用于将数据加载到分布式数据库中。三个运行时_conf.json分别是仲裁器、来宾和主机的配置文件。请查看OUT文档中每一个参数的含义。

为了快速启动咱们的程序,咱们提供了一个独立的版本,模拟三方在一台机器。要启动独立版本,请运行准备好的shell文件以下:

CD$FATE_install_path/examples/hetero_logistic_regression/

运行逻辑回归标准

BOOM,一个HeteroLR计划已经启动。此程序将在配置文件中使用该设置。请注意,算法部分(例如,HeteroLR的LogsiticParam)中的参数应该是三方之间的身份。

运行群集版本
在集群版本中,您可使用任务管理器,这是一个帮助您轻松启动全部各方的工具。

CD$FATE_install_path/examples/hetero_logistic_regression/

负载数据
在启动群集版本任务以前,须要在全部数据提供程序之间加载数据。咱们已经准备了一些例子数据为杂-LR。您应该编辑文件conf/load_file_tm_来宾和conf/load_file_tm_host,以确保数据文件路径正确。而后使用如下方法上载数据:

角色嘉宾:

Python$FATE_install_path/arch/task_manager/task_manager_client.py-f上载-c conf/load_file_tm_guest.json

担任东道者:

Python$FATE_install_path/arch/task_manager/task_manager_client.py-f上载-c conf/load_file_tm_host.json

加载数据以后,您能够得到在配置文件中编辑的“table_name”和“命名空间”,而且请注意,对于每一个上传,“table_name”应该是不一样的。

运行任务
而后,您须要为角色客户编辑一个配置文件。示例配置文件,如test_heopo_lr_workflow.json已在此文件夹中提供。如样例文件所示,全部各方之间存在差别的参数应分别在角色_参数中设置。另外一方面,这些相同的参数应该放在算法参数中。

您应该使用来宾的加载数据中的“table_name”重写角色来宾的配置,并使用已有的“命名空间”重写“TRANS_INPUT_NAME”的配置。与在主机加载数据以后使用“table_name”和“命名空间”配置角色主机相同。

若是您想要预测,请编写“PRECT_INPUT_TABLE”和“PRECT_INPUT_NAME”的配置。角色来宾或主机中的“model_table”、“Predict_Output_table”和“估价_Output_table”的配置对于每一个任务都应该是不一样的。

完成编辑后,能够运行如下命令来启动任务:

Python$FATE_install_path/arch/task_manager/task_manager_client.py-f工做流-c conf/test_heedo_lr_workflow.json

运行此命令后,将自动为您生成一个JOBID。

检查日志文件
日志提供在原木目录。将生成一个名为JOBID的子目录.全部日志文件都列在此目录中。通过训练和验证的结果显示在Workflow.log中。请随时查看每一个日志文件以得到更多的培训细节。

许可证 Apache许可证2.0