FATE(Federated AI Technology Enabler)是一个联邦学习框架。本文大部分内容来自官方文档整合,单独记录的原因是这次需要源码部署,官方部署文档 https://github.com/FederatedAI/FATE 中一些细节需要自己摸索,形成总结。
1.部署前环境检查
- python环境
- jdk
- Maven
- 本地8080、9360、9380端口是否被占用
netstat -apln|grep 8080
netstat -apln|grep 9360
netstat -apln|grep 9380
2. 设置环境变量
设置环境变量是因为FATA框架中,很多脚本要用到环境变量
export branch={分支名称, 若使用某个发布版本分支, 则为`v版本号`, 如`v1.7.0`}
export version={FATE版本号, 如1.7.0}
export version_tag={FATE版本标签, 如rc1/rc2/release}
3. 获取源码
git clone https://github.com/FederatedAI/FATE.git -b ${branch} --recurse-submodules --depth=1
#或者
git clone https://gitee.com/FederatedAI/FATE.git -b ${branch} --depth=1;
#更新代码
cd FATE;
bash build/common/update_submodule_from_gitee.sh
git pull
git submodule update --remote
4. 运行时环境变量
cd {上述代码的存放目录}
export FATE_PROJECT_BASE=$PWD
export version=`grep "FATE=" ${FATE_PROJECT_BASE}/fate.env | awk -F "=" '{print $2}'`
5. 安装FATE所需要的Python依赖包
5.1 修改依赖包说明文件
官方部署文档中 requirements版本要求非常严格,实际部署中,可能因为某些原因无法满足,比如我的环境是ARM版Ubuntu,tensorflow和pytouch的版本支持有限,这种情况下可以删除python/requirements.txt的版本描述。原则上版本高一点是可以的。
在 python/requirements.txt 增加
ruamel.yaml
peewee
apsw
dotenv
redis
cos-python-sdk-v5
beautifultable
kazoo
coverage
cloudpickle
lmdb
coverage
pycryptodomex
libsm3py
5.2 安装Python依赖包
cd ${FATE_PROJECT_BASE};
sh bin/install_os_dependencies.sh;
source ${FATE_VENV_BASE}/bin/activate;
pip install -r python/requirements.txt
6. 配置FATE
编辑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
检查conf/service_conf.yaml
全局配置文件中是否将基础引擎配置为单机版, 若default_engines
显示如下,则为单机版
default_engines:
computing: standalone
federation: standalone
storage: standalone
7. 启动fate flow server
cd ${FATE_PROJECT_BASE};
source bin/init_env.sh;
cd fateflow;
bash bin/service.sh status;
bash bin/service.sh start
显示如下类似则为启动成功,否则请依据提示查看日志
bash
service start sucessfully. pid: 111907
status:app 111907 75.7 1.1 3740008 373448 pts/2 Sl+ 12:21 0:17 python /xx/FATE/fateflow/python/fate_flow/fate_flow_server.py
python 111907 app 14u IPv4 3570158828 0t0 TCP localhost:boxp (LISTEN)
python 111907 app 13u IPv4 3570158827 0t0 TCP localhost:9360 (LISTEN)
8. 安装fate client
cd ${FATE_PROJECT_BASE};
source bin/init_env.sh;
cd python/fate_client/;
python setup.py install
初始化fate flow client
cd ../../;
flow init -c conf/service_conf.yaml
显示如下类似则为初始化成功,否则请依据提示查看日志
{
"retcode": 0,
"retmsg": "Fate Flow CLI has been initialized successfully."
}
9. FATE-Board 安装
FATE-Board的部署需要java环境和Maven
9.1 配置修改
修改 ${FATE_PROJECT_BASE}/fateboard/src/main/resources/application.properties 文件
spring.datasource.driver-Class-Name=org.sqlite.JDBC
···
fateboard.datasource.jdbc-url=jdbc:sqlite:路径/数据库文件名
9.2 打包
cd fateboard/
mvn clean package -DskipTests
9.3 启动 FATE-Board
nohup \
java -Dspring.config.location=${FATE_PROJECT_BASE}/fateboard/src/main/resources/application.properties \
-Dssh_config_file=${FATE_PROJECT_BASE}/fateboard//src/main/resources/ \
-Xmx2048m -Xms2048m -XX:+PrintGCDetails \
-Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError \
-jar ${FATE_PROJECT_BASE}/fateboard//target/fateboard-${version}.jar > /dev/null 2>&1 &
访问 http:127.0.0.1:8080
用户名 admin 密码 admin
10. 测试项
10.1 Toy测试
flow test toy -gid 10000 -hid 10000
如果成功,屏幕显示类似下方的语句:
success to calculate secure_sum, it is 2000.0
10.2 单元测试
cd ${FATE_PROJECT_BASE};
bash ./python/federatedml/test/run_test.sh
如果成功,屏幕显示类似下方的语句:
there are 0 failed test