Fate框架教程
GitHub:https://github.com/webankfintech/fate
An Industrial Level Federated Learning Framework https://www.fedai.org/
这篇文章主要是整合Fate框架安装所需的软件环境的安装方法:
软件环境:jdk1.8+、Python3.6、pythonVirtualenv、mysql5.6+、redis-5.0.2
系统环境:Centos7
1.Python3.6的安装
https://www.cnblogs.com/charles8866/p/8366695.html
博客链接
(对照博客执行后将出现的问题解决了,按照下面的应该没啥大问题)
所有指令最好在管理员权限下执行,防止权限不够导致中断
先安装python3.6的依赖包(不然后面会报错)
命令 : yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
下载python3.6编译安装
命令:wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz
(如果没有安装wget, 先安装,命令 : yum install wget)
解压: tar -xzvf Python-3.6.0.tgz (解压在home目录)
指向路径: cd Python-3.6.0 (不知道文件夹在哪可以查找一下 用ls 指令查一下在那个目录下,然后cd)
编译: ./configure --prefix=/usr/local
如果遇到 configure: error: no acceptable C complier found in $PATH
解决: yum install gcc
继续 : 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安装及环境配置
https://www.cnblogs.com/zs-notes/p/8535275.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=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,应该可以忽略)
其中会出现一个日志提示修改密码的命令
./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 [email protected]’%’ 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)的安全计算协议.它支持联邦学习体系结构和各种机器学习算法的安全计算,包括逻辑回归、基于树的算法、深度学习和转移学习。
介入
加入我们的邮件列表命运-费代集团IO…你可以提出问题并参与开发讨论。
对于任何常见的问题,您都可以办理登机手续。常见问题.
请报告错误问题.
使用拉请求
安装
命运可以安装在Linux或Mac上。现在,FATE可以支持独立部署和集群部署。FATE可以通过以下方式安装在Linux上:
git clone https://github.com/WeBankFinTech/FATE.git
软件环境:jdk1.8+、Python3.6、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
下一篇: 《联邦学习》——个人笔记(四)