引言
最近的课题方向就是基于联邦学习的框架进行数据分析处理,有一些粗浅的认识,但是搜寻资料散乱杂多,自己也记不太清楚,在虚拟机上也经常出错崩溃。这第三次重装Linux系统,打算把一些步骤记录下来,以备下次重来有个记录。
另外之后会把联邦学习的一些基础知识和资料搜集起来放在一起,以后也有一个参考。
这个安装过程是基于微众银行开源的FATE框架所需的环境和软件前提的搭建,FATE社区GitHub地址
同时综合了较多的教程和博客,主要参考了
Fate框架教程
https://blog.csdn.net/weixin_44002829/article/details/97619826感谢大佬的首篇博客指导。
安装虚拟机
在VMware15下安装Centos的软件,Centos7就可以,目前又出来Centos8,但是从官网下载下来在VMWare下不知道为什么显示的是早期版本,而且一系列的软件基础也都支持Centos7,所以目前以Centos7为主。
在虚拟机选项新建虚拟机,选择典型值,添加Centos7映像地址,之后选择虚拟机安装位置,创建即可。在开机后进行配置,我选择的是GNOME带图形界面(如果选择最小安装则没有图形界面),安装位置选择本地磁盘自动分区,打开以太网连接,一路点击完成,最后设置密码重启即可正常开机。
基础环境 Centos7
预装软件:jdk1.8+、Python3.6、python-Virtualenv、mysql5.6+、redis-5.0.2+
FATE 开源网站 GitHub:https://github.com/webankfintech/fate
[1 ] 安装python3.6要使用的依赖包,防止后续安装报错
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
[2 ] 下载python3.6安装包
yum install wget
#(如果Centos没有wget下载指令,先安装)
wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz
#python3.6有十个子版本(.0-.10)均可以下载
tar -zxvf Python-3.6.10.tgz
#解压在 root/home/ 文件夹下
cd Python-3.6.10
#进入解压后的文件夹
[3 ] 编译安装
./configure --prefix=/usr/local/python3 --enable-optimizations
#将python安装到 usr/local//python3文件夹下
( 如果遇到:configure: error: no acceptable C compiler found in $PATH
解决方法:yum install gcc
)
make
#编译
make altinstall
#安装,用make install容易在usr/bin 下产生两个python安装文件,后续可能报错
[4 ] 为Python3.6增加软连接
cd /usr/bin
mv python python.backup
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
[5 ] 更改yum的脚本依赖
cd /usr/bin
ls yum*
进入 vim 编辑以下两个文件
vi /usr/bin/yum
vi /usr/libexec/urlgrabber-ext-down
将上述两个文件的开头 #!/usr/bin/python
改为 #!/usr/bin/python2
(输入 i 来插入字符; 插入完后按esc停止插入,然后输入 “:wq” 保存后退出 ;“:q” 为不保存退出)
执行下一步之前先检查 pip是否可以正常运行,可以使用 # pip install --upgrade pip
升级最新的pip
我在运行pip后,发现并没有该命令python 官网的 pip install pip 自然也不管用
试用 yum install pip
同样发现没有该命令
首先先检查 usr/bin/中是否有 pip和pip3 的脚本文件,可能是没有添加到环境变量中去,从python3.6的安装位置找到pip和pip3(本文中的安装位置 usr/local/python3/bin/pip; usr/local/python3/bin/pip3),然后添加软链接
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
ln -s /usr/local/python3/bin/pip /usr/bin/pip
然后在终端中输入 pip -V
,会出现pip的版本信息
如果还是不好使,找到pip的位置删除 whereis pip
; rm -rf 搜索到的pip包
尝试以下的方法重新下载pip包
方法一:
进入子页面使用python官网解释页面下 :`curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py`
然后使用下载命令: ` python get-pip.py`
get-pip.py 可以有多种操作下载方式:
`python get-pip.py --no-index --find-links=/local/copies` #从本地复制安装pip
`python get-pip.py --user` #安装在指定位置
`python get-pip.py pip==20.0.2 wheel==0.30.0 setuptools==28.8.0` #指定版本安装
OR:方法二:
可以试试安装epel扩展源:yum -y install epel-release
更新完成之后,就可安装pip:yum -y install python-pip
安装完成之后清除cache: yum clean all
再次对pip进行升级:pip install --upgrade pip
OR:方法三:
直接从python官网pip解释页面下载 pip-20.0.2
wget [https://files.pythonhosted.org/packages/8e/76/66066b7bc71817238924c7e4b448abdb17eb0c92d645769c223f9ace478f/pip-20.0.2.tar.gz](https://files.pythonhosted.org/packages/8e/76/66066b7bc71817238924c7e4b448abdb17eb0c92d645769c223f9ace478f/pip-20.0.2.tar.gz)
下载完后进入安装包
tar -xzvf pip-20.0.2.tar.gz
cd pip-20.0.2
python setup.py install
virtualenv 是一个创建隔绝的Python环境的工具。virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用Python工程所需的包,同时可以使不同应用开发环境独立,环境升级不影响其他应用,也不会影响全局的python环境,它可以防止系统中出现包管理混乱和版本的冲突。
pip3 install virtualenv
pip install virtualenv
(两个都要执行,在python2.7和python3的环境下都进行安装,否则workon命令可能会报错)
or:yum install python-virtualenv
or:pip install virtualenv -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com (使用镜像源下载)
virtualenv env1
#名为env1的虚拟环境python3.6
),没有指定则由系统默认的解释器来搭建: virtualenv -p /usr/bin/python3.6 ${folder 虚拟环境的路径}
之后将会在当前的目录中创建一个名env1的文件夹,这是一个独立的python运行环境,包含了Python可执行文件, 以及 pip 库的一份拷贝,这样就能安装其他包了,不过已经安装到系统Python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的Python运行环境。
测试启动虚拟环境:
cd env1/
source bin/activate
python -V
成功后则显示进入 env1的虚拟环境内
退出虚拟环境: deactivate
(在前两次配置中安装后可以完美创建虚拟环境并运行;
但是在第三次配置过程中,我下载安装完virtualenv后,输入virtualenv env1
以创建虚拟环境时,
报错 AttributeError: module 'virtualenv' has no attribute 'main'
位置在 usr/bin/virtualenv 中的 virtualenv.main()处,第一次碰见这个问题,也没有查到有效的解决办法,唯一能做的就是从头再来,希望有经验的大佬可以指导)
在删掉冲来的的第四次终于安装成功,可以正常创建虚拟环境
> pip install virtualenvwrapper
> pip3 install virtualenvwrapper
如果报错,缺少什么就用 pip install #缺少的部分
;如果有 setuptools如果还报错 AttributeError: module ‘importlib._bootstrap’ has no attribute ‘SourceFileLoader’
升级一下setuptools :pip install --upgrade --ignore-installed setuptools
find / -name virtualenvwrapper.sh
#找到virtualenvwrapper.sh的路径
会得到一个或者两个位置 ,我们要使用python3的位置()
输入命令编辑配置文件:vim ~/.bashrc
(我在home目录下手动打开编辑,.bashrc是一个隐藏文件)
将以下两个命令添加到最后面,指定了虚拟环境的位置。
export WORKON_HOME=~/.virtualenvs
#设置环境变量
mkdir -p $WORKON_HOME
#创建虚拟环境管理目录
source /找到的python3路径
#激活virtualenvwrapper.sh
PS: 默认virtualenvwrapper安装在下面python解释器中的site-packages,实际上需要运行virtualenvwrapper.sh文件才行;所以需要先进行配置一下:
1.找到virtualenvwrapper.sh的路径:find / -name virtualenvwrapper.sh
2.运行virtualenvwrapper.sh文件:source /找到的路径
执行.bashrc使文件生效: source ~/.bashrc
mkvirtualenv env_py3
这会在virtualenvs 中创建 env_py3的虚拟环境
选择虚拟环境工作
workon env_py3
停止虚拟环境
deactivate
其他的一些命令:
lsvirtualenv #列举所有的环境。
cdvirtualenv #导航到当前激活的虚拟环境的目录中,比如说这样您就能够浏览它的 site-packages。
cdsitepackages # 和上面的类似,但是是直接进入到 site-packages 目录中。
lssitepackages #显示 site-packages 目录中的内容。
virtualenvwrapper命令集合
我每次安装的centos都自带了jdk1.8,可以提前查看
java -version
如果出现jdk版本号,则已经存在,可跳过本步骤;若没有则继续安装
mkdir -p /usr/local/jdk
rpm -qa | grep -i jdk
rpm -qa | grep java
如果有显示之前存在的一些程序,把这些程序都删掉
用 rpm -e --nodeps 存在的包
卸载这些默认安装的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 #解压
mv jdk1.8.0_131 jdk1.8 #重命名文件夹
vi /etc/profile
可以看到这个文件的内容,profile文件有点类似于windows系统里面的环境变量的配置,
shift + g 定位到最后一行,输入i进入编辑模式
export JAVA_HOME=/usr/local/jdk/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
完成后按esc 输入”:wq“保存后退出
source /etc/profile
java -version
出现jdk的相关版本信息就证明安装成功MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。有以下的特点:
1.数据以表格的形式出现
2.每行为各种记录名称
3.每列为记录名称所对应的数据域
4.许多的行和列组成一张表单
5.若干的表单组成database
所以关系型数据库可以简单的理解为表格的合集。
[1 ] 下载安装包并解压
wget https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.45-linux-glibc2.12-x86_64.tar.gz
tar -zxvf mysql-5.6.45-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.6.45-linux-glibc2.12-x86_64 mysql #重命名为mysql
[2 ] 添加用户
先检查是否有已有的用户
groups mysql
(如果出现用户名则可以进行下一步,若出现 no such user 则表明没有用户,需要添加)
groupadd mysql #添加组
useradd -r -g mysql mysql #在组中添加用户
再次检查 groups mysql
出现 mysql mysql
则表明添加成功
[3 ]更改权限
进入mysql目录 :cd mysql
输入 “ll”
查看权限,当前权限都是root
执行 chown -R mysql:mysql ./
后,在输入“ll“
发现权限都变为mysql
[4 ] 安装
在 mysql的目录下
./scripts/mysql_install_db --user=mysql
安装完成后可能会出现报错
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
安装完成后修改目录权限
chown -R root:root ./
chown -R mysql:mysql data
在输入”ll“
查看,发现除了data的权限为mysql,其余的权限均为root
./support-files/mysql.server start
mkdir /var/log/mariadb
touch /var/log/mariadb/mariadb.log
chown -R mysql:db /var/log/mariadb/ (可能报错,直接忽略。。。)
./support-files/mysql.server start
如果启动还报错,可能是已经启动 查看进程 ps aux|grep mysql
如果已经启动则 kill -9 进程号
杀掉进程后重新启动
成功后会提示 Starting MySQL SUCCESS!
之后开始修改密码
./bin/mysqladmin -u root -h localhost.localdomain password ‘root’
./bin/mysql -h127.0.0.1 -uroot -proot
代表用户名为root 密码为root,在启动MySQL之后,直接输入./bin/mysql -h127.0.0.1 -uroot -proot
可进入mysql数据库界面。
mysql>
后输入 grant all privileges on . to root@’%’ identified by ‘root’;
flush privileges;
cp support-files/mysql.server /etc/init.d/mysqld #将mysql加入service服务(可不加入)
chkconfig --add mysqld
chkconfig mysqld on
service mysqld restart(重启mysql生效)
service mysqld status
service mysqld restart
service mysqld status
在控制界面输入 exit
可退出,或是时间较长无操作后数据库会自动退出
Ps:MySQL数据库使用教程链接
Redis 是遵守BSD协议,高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3.Redis支持数据的备份,即master-slave模式的数据备份。
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
wget http://download.redis.io/releases/redis-5.0.2.tar.gz
tar -xzvf redis-5.0.2.tar.gz #解压
mv redis-5.0.2 redis #重命名文件夹
cd redis-5.0.2
make
make test
make test
有可能会出现错误,缺少tcl
包,
You need tcl 8.5 or newer in order to run the Redis test
make: *** [test] Error 1
下载安装tcl
即可解决。
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar xzvf tcl8.6.1-src.tar.gz
cd /usr/local/tcl8.6.1/unix/
./configure
make
make install
安装成功后重新执行 make test
,成功后继续下一步。
执行 make install PREFIX=/usr/local/redis
,将resis安装在/usr/local/文件夹下
从/usr/local/redis/src 中找到 redis-server、 redis-cli 、redis-benchmark 、 redis.conf 四个文件,
复制到 父文件夹redis下,可以直接在 /usr/local/redis/ 文件夹下启动redis。
vim /usr/local/redis/redis.conf
以下几个参数可以进行修改
daemonize
:是否以后台daemon方式运行。改成yes
dir
:数据快照的保存目录。改成安装目录 /usr/local/redis
appendonly
:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率,可以不管。
bind 127.0.0.1
:Redis默认绑定本机,也就是默认只允许本机连接访问,如果你想允许远程连接,可以修改IP或者直接注释掉这行,同时把protected-mode 改为no,这样就允许全部IP连接访问了。
redis-server
ps -ef | grep redis
redis-cli shutdown
pkill redis
Architecture for a horizontal federated-learning system.
[1 ] FATE
目前的FATE框架支持横向联邦学习、纵向联邦学习以及联邦迁移学习
具体算法文档在federatedml
FATE在Linux下可以有多种安装方式,根据不同使用目的选择不同的形式。
Native部署: 单机部署和集群部署;
KubeFATE部署
1)主机需要能够访问外部网络,从公共网络中拉取安装包和docker镜像。
2)依赖docker和docker-compose,docker建议版本为18.09,docker-compose建议版本为1.24.0,您可以使用以下命令验证docker环境:docker --version和docker-compose --version,docker的起停和其他操作请参考docker --help。
3)执行之前,请检查8080、9060和9080端口是否已被占用。 如果要再次执行,请使用docker命令删除以前的容器和镜像。
首先需要先安装docker和docker-compose,
yum update #升级yum
yum install -y yum-utils device-mapper-persistent-data lvm2 #安装驱动依赖
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #设置镜像源
*(如果报错,编辑报错文件 vim service.conf,因为文件开头python没有改为python2,这样才能调动python3)*
yum list docker-ce --showduplicates | sort -r #查看源仓库中的docker版本,这里要安装18.09
yum install docker-ce-.x #18.09.x的具体版本可以任选,替换版本号即可
systemctl start docker #启动docker
输入 docker-version
出现dockers的版本即安装成功
PS :docker基本用法
docker run -i -t 容器id /bin/bash/
启动容器 = docker create
+docker start
docker -ps a
查看所有的容器
docker stop[-t|--time[=10]]
终止容器
docker rm 容器id
删除容器,需要先停止
curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose #更改权限
docker-compose -version
或者可以离线下载
下载地址
链接:https://pan.baidu.com/s/1MMob-u3jsR5OK8u4r1uZDA
提取码:2336
由windows传到虚拟机然后再进行安装
1. cd /usr/local/bin
2. mv docker-compose-Linux-x86_64 docker-compose
3. sudo chmod +x docker-compose
安装完成后检查docker-compose version
#获取安装包
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/docker_standalone-fate-1.3.0.tar.gz
tar -xvf docker_standalone-fate-1.3.0.tar.gz
#执行部署
cd docker_standalone-fate-1.3.0
bash install_standalone_docker.sh
#验证和测试
CONTAINER_ID=`docker ps -aqf "name=fate_python"`
docker exec -t -i ${CONTAINER_ID} bash
bash ./federatedml/test/run_test.sh
如果所有测试都可以通过,则本地单机部署完成,可以运行示例,进入文件夹"./examples/federatedml-1.x-examples"
输入 python quick_run.py
出现下述代码则为测试成功,可以查看任务日志查看细节。
stdout:{
"data": {
"board_url": "http://localhost:8080/index.html#/dashboard?job_id=20190815211211735986134&role=guest&party_id=10000",
"job_dsl_path": "${your install path}/jobs/20190815211211735986134/job_dsl.json",
"job_runtime_conf_path": "/data/projects/fate/python/jobs/20190815211211735986134/job_runtime_conf.json",
"model_info": {
"model_id": "arbiter-10000#guest-10000#host-10000#model",
"model_version": "20190815211211735986134"
}
},
"jobId": "20190815211211735986134",
"meta": null,
"retcode": 0,
"retmsg": "success"
}
Please check your task in fate-board, url is : http://localhost:8080/index.html#/dashboard?job_id=20190815211211735986134&role=guest&party_id=10000
The log info is located in ${your install path}/examples/federatedml-1.x-examples/../../logs/20190815211211735986134
通过以上的步骤,已经将FATE本地单机框架部署完成,可以进行测试和开发的工作。
后续会继续更新总结联邦学习的相关知识点和概念,由于还未完全搞清楚联邦学习的隐私计算原理和各客户端之间通讯的要点,还有很多细节问题需要解决,相关算法原理还没有完全搞清楚,更多的部署环境和操作方法还不太明了,下一步会慢慢搞清楚,争取落实到具体算例上。