-
准备好求交后的mnist数据, 供fl训练器使用, 参见mnist_data和data_join
-
运行单机版前,将
fl_comm_libs
复制到这个目录
cp -r ../../src/Trainer/fl_comm_libs .
- 准备python3.6环境(推荐python3.6.8)
我们推荐使用virtualenv
来避免python相关的环境问题
运行pip install virtualenv
来安装virtualenv
yum install python3-devel
cd ~
# 创建一个python虚拟环境
virtualenv fl-env
# 激活环境
source fl-env/bin/activate
# 要求 tensorflow 1.15 和 protobuf 3.8.0
pip install -r ../../requirements.txt
# 配置tensorflow
wget https://github.com/tensorflow/tensorflow/blob/r1.15/tensorflow/python/pywrap_dlopen_global_flags.py
cp pywrap_dlopen_global_flags.py fl-env/lib/python3.6/site-packages/tensorflow_core/python/
如果不打算使用virutalenv, 请确保tensorflow版本为1.15且protobuf版本为3.8.0.
然后下载pywrap_dlopen_global_flags.py并拷贝到tensorflow目录, 例如site-packages/tensorflow_core/python/
- 运行mnist demo 我们提供了一个神经网络的例子来验证联邦学习框架的正确性: 一张mnist图片被分成两半,分别由leader和follower所有,leader和follower共同训练一个神经网络模型.
# 用联邦学习框架训练模型
bash run_mnist_local_leader.sh
bash run_mnist_local_follower.sh
# 用原生tensorflow训练模型
python baseline.py -d ${DATA_DIR}
- 比较loss 配置相同情况下, 联邦学习模型loss的变化情况应与原生tensorflow框架的loss变化一致
# 联邦学习模型的loss变化情况
grep loss logs/leader.log
- 先决条件
- hdfs, 训练数据和模型会放在hdfs上
- Kubernetes集群能访问hdfs, 为leader和folllower创建namespace(
fl-leader
,fl-follower
) - leader机和follower机python环境依赖jinjia2, 且需要能访问redis和Kubernetes集群.
- proxy
在leader机和follower机部署proxy
编译和部署proxy参见src/Proxy/README.md
需要修改redis配置和对端proxy配置, 默认对端请求监听8001端口,
redis默认使用6379端口
默认同侧请求监听8002端口, 日志在src/Proxy/logs
- coordinator
编译和部署参见src/Coordinator/README.md
同侧coordinator和proxy应使用相同redis
coordinator默认监听6666端口, 日志在src/Coordinator/logs
- Kubernetes准备
创建datacenter镜像(参见deploy/data_center/images),
leader训练镜像和follower训练镜像(参见DockerFile)
配置conf/ResourceManager/k8s.conf
修改proxy配置(默认8002端口), coordinator配置(默认6666端口), 镜像信息,模型目录
- 提交训练任务
根据需要修改conf/Trainer/leader.json
和conf/Trainer/follower.json
中的worker_num
和data_source_name
修改run_mnist_dist_follower.sh
和run_mnist_dist_leader.sh
中的redis配置
# follower
bash run_mnist_dist_follower.sh
# leader
bash run_mnist_dist_leader.sh