Fate单机版部署以及新增自定义算法组件的运行和修改
Fate单机版部署以及新增自定义算法组件的运行和修改1. Fate单机版部署2. 自定义算法在Fate上的运行;3. 自定义算法在Fate上运行后,修改代码在Fate上的实时结果查看。
Fate单机版部署以及新增自定义算法组件的运行
本文实现目标:
- Fate单机版部署(网盘上(提取码:akai)有FateV1.7.0的源码,以及所需的各种资源包,相比去github下载省事很多)
- 自定义算法在Fate上的运行;
- 自定义算法在Fate上运行后,修改代码在Fate上的实时结果查看。
1 虚拟机配置
2 部署前环境检测
检查:本地8080、9360、9380端口是否被占用
netstat -apln|grep 8080
netstat -apln|grep 9360
netstat -apln|grep 9380
3 获取源代码
3.1 源代码
源代码放在此链接(提取码:akai,压缩包名:Fate_DeployAndDevelop_Resource.zip),名叫FATE.zip的压缩包(这是Fate v1.7.0版本的)
3.2 配置源代码路径
3.2.1 创建Fate文件夹并解压
mkdir Fate
cd Fate
# 将压缩文件 FATE.zip 上传并解压在此( yum install unzip 下载unzip命令)
mkdir FATE
unzip FATE.zip -d FATE
cd FATE
3.2.2 设置后面所需环境变量
# pwd的结果如下所示
pwd
cd /Fate/FATE
export FATE_PROJECT_BASE=$PWD
export version=`grep "FATE=" ${FATE_PROJECT_BASE}/fate.env | awk -F "=" '{print $2}'`
注意:
- 这些环境变量只在当前终端内生效,关闭终端则失效;
- 下次开启终端如果需要用到这些环境变量(包括后面 步骤所设置的环境变量),请再次设置
4 安装并配置Python环境
4.1 安装Python环境
请安装或者使用已有的Python 3.6 或者 3.7 版本,最好使用3.6.5,其为FATE团队官方大量测试版本
4.1.1 解压 Python-3.6.5.tgz
压缩包放在此链接中(提取码:akai,压缩包名:Fate_DeployAndDevelop_Resource.zip),和上方Fate源码放在同一个目录,名叫Python-3.6.5.tgz的压缩包。
# 将压缩包放入/Python下
mkdir /Python
cd /Python
# 安装Python3.6可能使用的依赖(中途提示输入 :y)
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++
# 解压**python**压缩包
tar -zxvf Python-3.6.5.tgz
4.1.2 编译安装
4.1.2.1 创建安装目录
mkdir -p /usr/local/python3
4.1.2.2 跳转到解压的Python安装目录
cd Python-3.6.5
4.1.2.3 指定安装目录
./configure --prefix=/usr/local/python3
4.1.2.4 编译安装
把源码包里面的代码编译成linux服务器可以识别的代码.(先进行make,执行完成之后,才开始执行make install)
make
make install
可能需要两、三分钟。
4.1.3 配置环境变量
vim ~/.bash_profile
在此文件中填入以下两行
export PYTHON_HOME=/usr/local/python3/bin
PATH=$PATH:$PYTHON_HOME
保存文件: ESC + :wq 进行保存文件
4.1.4 生效环境变量
source ~/.bash_profile
4.1.5 测试是否安装成功
python3
exit()进行退出
4.2 安装virtualenv,并创建虚拟环境
4.2.1 安装virtualenv
pip3 install virtualenv
4.2.2 创建虚拟环境
4.2.2.1 查看virtualenv 版本
virtualenv --version
4.2.2.2 创建虚拟环境
cd /Python
virtualenv venv
4.2.3 配置Fate所需环境变量
export FATE_VENV_BASE=/Python/venv
# 进入虚拟环境
source ${FATE_VENV_BASE}/bin/activate
5 安装Fate所需要的Python依赖包
cd ${FATE_PROJECT_BASE};
bash bin/install_os_dependencies.sh;
source ${FATE_VENV_BASE}/bin/activate;
# 可以使用我准备好的 python依赖包 :site-packages.zip,使用后便可不执行此命令,
# 注意:如果使用我的 依赖包,最好是处于一个新的python环境,不然会影响你原来已有的依赖
pip3 install -r python/requirements.txt
由于安装 Fate所需的Python依赖包太慢,我提前准备到了上文链接(提取码:akai,压缩包名:Fate_DeployAndDevelop_Resource.zip),文件名称为:site-packages.zip:
解压到: /Python/venv/lib/python3.6/,命令如下
# site-packages.zip放入此目录
cd /Python/venv/lib/python3.6
rm -rf site-packages
unzip site-packages.zip -d site-packages
6 配置FATE
6.1 编辑bin/init_env.sh
环境变量文件
cd ${FATE_PROJECT_BASE}
sed -i.bak "s#PYTHONPATH=.*#PYTHONPATH=$PWD/python:$PWD/fateflow/python#g" bin/init_env.sh;
sed -i.bak "s#venv=.*#venv=${FATE_VENV_BASE}#g" bin/init_env.sh
6.2 检查`conf/service_conf.yaml
检查conf/service_conf.yaml
全局配置文件中是否将基础引擎配置为单机版, 若default_engines
显示如下,则为单机版
cat conf/service_conf.yaml
default_engines配置和下图显示一样表示为单机版。
7 启动fate flow server
cd ${FATE_PROJECT_BASE}
source bin/init_env.sh
cd fateflow
7.1 显示当前fate flow状态
bash bin/service.sh status
7.2 启动fate flow
bash bin/service.sh start
8 安装Fate client
cd ${FATE_PROJECT_BASE}
source bin/init_env.sh
cd python/fate_client/
python setup.py install
8.1 初始化 fate flow client
cd ../../;
flow init -c conf/service_conf.yaml
显示如下类似则为初始化成功,否则请依据提示查看日志
9 测试
9.1 Toy测试
flow test toy -gid 10000 -hid 10000
9.2 单元测试
cd ${FATE_PROJECT_BASE};
bash ./python/federatedml/test/run_test.sh
10 编译包安装fateboard
-
由于 FATE.zip 里面我已经搭好了Java环境和fateboard的编译安装包;
-
如果你前面装的 FATE地址 和 我装的地址 相同的话,直接略过此章节到 11 即可,例如:我的FATE地址:/Fate/FATE,和我的一样就直接可以看 11 章节
echo ${FATE_PROJECT_BASE}
-
如果你前面装的 FATE地址 和 我装的地址 不同的话就需要去修改一些文件。
cd ${FATE_PROJECT_BASE}; sed -i.bak "s#JAVA_HOME=.*#JAVA_HOME=$PWD/env/jdk/jdk-8u192/#g" bin/init_env.sh sed -i.bak "s#fateboard.datasource.jdbc-url=.*#fateboard.datasource.jdbc-url=jdbc:sqlite:$PWD/fate_sqlite.db#g" $PWD/fateboard/conf/application.properties; sed -i.bak "s#fateflow.url=.*#fateflow.url=http://localhost:9380#g" $PWD/fateboard/conf/application.properties
11 启动FateBoard
11.1 查看状态并给java设置可执行权限
cd fateboard;
bash service.sh status;
# 防止java命令执行时权限不够,而导致无法启动
chmod +x ${JAVA_HOME}bin/java
11.2 启动FateBoard
bash service.sh start
11.3 关闭防火墙
systemctl stop firewalld
**注意:**此操作最好是在本机虚拟机上执行,切勿执行在可能会有外部访问的环境中。
请求: IP:8080 即可看到FateBoard
12 编写自定义算法
12.1 编写算法
具体的算法编写规范见:Develop Guide - FATE
12.2 编写组件,用来让Fate flow读取自定义算法
在 /Fate/FATE/python/federatedml/components添加一个组件:my_data_split.py 组件名称为:myDataSplit
cd /Fate/FATE/python/federatedml/components
cat > my_data_split.py <<EOF
...(下方py文件)
EOF
from .components import ComponentMeta
from federatedml.util import LOGGER
# 组件名称
homo_data_split_cpn_meta = ComponentMeta("myDataSplit")
# 算子入参的实体对象,
@homo_data_split_cpn_meta.bind_param
def homo_data_split_param():
# 调用的地址
from federatedml.param.data_split_param import DataSplitParam
# 只是添加了日志,并未修改算子
LOGGER.debug("my_data_split my_data_split my_data_split my_data_split -----------------!")
LOGGER.debug("Data_split1 parameter into -----------------!")
return DataSplitParam
# guest方执行的算子
@homo_data_split_cpn_meta.bind_runner.on_guest
def homo_data_split_guest_runner():
# 调用的地址
from federatedml.model_selection.data_split.homo_data_split import (
HomoDataSplitGuest,
)
# 只是添加了日志,并未修改算子
LOGGER.debug("my_data_split my_data_split my_data_split my_data_split -----------------!")
LOGGER.debug("Data_split1 guest into -----------------!")
return HomoDataSplitGuest
# host方执行的算子
@homo_data_split_cpn_meta.bind_runner.on_host
def homo_data_split_host_runner():
from federatedml.model_selection.data_split.homo_data_split import HomoDataSplitHost
# 只是添加了日志,并未修改算子
LOGGER.debug("my_data_split my_data_split my_data_split my_data_split -----------------!")
LOGGER.debug("Data_split1 host into -----------------!")
return HomoDataSplitHost
12.3 如何训练模型
官方文档:Develop Guide - FATE
12.3.1 上传数据集
由于是单机部署,所以同时上传guest和host方数据。
guest:
cat > my_guest.json <<EOF
...(下方json文件)
EOF
{
"file": "examples/data/breast_homo_guest.csv",
"head": 1,
"partition": 16,
"table_name": "breast_homo_guest",
"namespace": "experiment",
"count": 227
}
host:
cat > my_host.json <<EOF
...(下方json文件)
EOF
{
"file": "examples/data/breast_homo_host.csv",
"head": 1,
"partition": 16,
"table_name": "breast_homo_host",
"namespace": "experiment",
"count": 228
}
上传数据集:(先上传guest方数据集)
mv my_guest.json /Fate/FATE
mv my_host.json /Fate/FATE
flow data upload -c my_guest.json
flow data upload -c my_host.json
12.3.2 开始建模任务
12.3.2.1 编写dsl.json
cd /Fate/FATE/examples/dsl/v2/data_split
# 将homo_data_split_0的module对应的值改为自定义的组件名称:
cat > my_dsl.json <<EOF
...(下方json文件)
EOF
{
"components": {
"reader_0": {
"module": "Reader",
"output": {
"data": [
"data"
]
}
},
"data_transform_0": {
"module": "DataTransform",
"input": {
"data": {
"data": [
"reader_0.data"
]
}
},
"output": {
"data": [
"data"
],
"model": [
"model"
]
}
},
"homo_data_split_0": {
"module": "myDataSplit",
"input": {
"data": {
"data": [
"data_transform_0.data"
]
}
},
"output": {
"data": [
"train_data",
"validate_data",
"test_data"
]
}
}
}
}
12.3.2.2 编写conf.json
cat > my_conf.json <<EOF
...(下方json文件)
EOF
{
"dsl_version": 2,
"initiator": {
"role": "guest",
"party_id": 10000
},
"role": {
"host": [
10000
],
"guest": [
10000
]
},
"component_parameters": {
"common": {
"homo_data_split_0": {
"test_size": 0.3,
"validate_size": 0.2,
"stratified": true
}
},
"role": {
"host": {
"0": {
"reader_0": {
"table": {
"name": "breast_homo_host",
"namespace": "experiment"
}
},
"data_transform_0": {
"with_label": true
}
}
},
"guest": {
"0": {
"reader_0": {
"table": {
"name": "breast_homo_guest",
"namespace": "experiment"
}
},
"data_transform_0": {
"with_label": true,
"label_name": "y",
"label_type": "int",
"output_format": "dense"
}
}
}
}
}
}
12.3.2.3 提交任务
flow job submit -d my_dsl.json -c my_conf.json
**此时会报错:**myDataSplit组件不存在
12.3.2.4 重启Fate flow 服务
cd /Fate/FATE/fateflow/bin
bash service.sh stop
# 以debug模式启动,则原有的算法和组件修改后,仍可直接运行
bash service.sh start --debug
12.3.2.5 回到dsl和conf文件目录
cd /Fate/FATE/examples/dsl/v2/data_split
flow job submit -d my_dsl.json -c my_conf.json
12.4 查看结果
在FateBoard看到了我自定义组件打印的日志
12.5 修改自定义算法
12.5.1 进入组件目录
cd /Fate/FATE/python/federatedml/components
修改组件日志 如下图
12.5.2 重新执行任务
cd /Fate/FATE/examples/dsl/v2/data_split
flow job submit -d my_dsl.json -c my_conf.json
12.5.3 查看Fate Board debug日志
更多推荐
所有评论(0)