![caf674badf730412847fd5b38b5a2a20.png](https://img-blog.csdnimg.cn/img_convert/caf674badf730412847fd5b38b5a2a20.png)
上篇简要介绍了FATE的基本信息,这篇简单介绍下如何在MAC环境将FATE跑起来
花京华:联邦学习开源框架FATE研究---入门简介zhuanlan.zhihu.com![b7e8b5eb21639a1c5f5220433a6027a7.png](https://img-blog.csdnimg.cn/img_convert/b7e8b5eb21639a1c5f5220433a6027a7.png)
安装
为了后面我们在FATE上开发新代码,我们可以直接clone源代码(会比较慢),也可以使用单机安装版本的代码(比较快):
- 下载安装包:
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/standalone-fate-master-1.2.0.tar.gz
tar -xvf standalone-fate-master-1.2.0.tar.gz
下载后的文件大小为2.1G
2. 解压后得到目录如下
$ ls
arch examples federatedml logs workflow
data fate_flow init.sh miniconda3-fate-1.1
eggroll fateboard jdk research
简单介绍几个重要目录和文件:
fate_flow:联邦学习模块运行和管理的主要模块,用于提交任务、解析参数、生成作业、执行作业、保存和查询日志等功能
federatedml:联邦机器学习的主要实现模块,包括各类特征预处理、横向/纵向场景的机器学习等,这个模块是我们后面需要详细了解的
arch:由于我们的框架可以进行分布式计算,所以fate对后台的计算框架进行了api层面的封装,如基础的数据表计算和存储操作、变量数据传输的封装
eggroll:微众开发的一个分布式计算框架,fate同时支持eggroll和fate作为后端的计算框架
https://github.com/WeBankFinTech/eggrollgithub.com具体可参考
FedAI联邦学习:只看这一篇就够:快速了解联邦学习技术及应用实践zhuanlan.zhihu.com![4ab16b5fe75891c9ca17683b48d23cd2.png](https://img-blog.csdnimg.cn/img_convert/4ab16b5fe75891c9ca17683b48d23cd2.png)
3. 安装python3和pycharm, mac上直接brew install python3 就好了,我这边安装好,是3.7版本,该版本自带虚拟环境
4. 如果使用的是linux机器,那么需要运行根目录下的init.sh,会进行各类以来的安装,对于mac ,只需要安装几个重要的依赖:
brew install gmp libmpc mpfr hdf5 leveldb
这几个软件是后面安装跟目录requirements.txt的前提,否则直接用pip安装会报错
5. 在根目录下运行:pip3 install -r requirements.txt 安装python依赖,pip3安装加速的方法这里就不写了,网上非常多,选阿里云或者豆瓣的镜像就行
运行
完成以上安装后,我们可以开始探索fate了:
- 前面介绍了fate的目录里面有个fate-flow,这个是用于联邦学习任务管理的模块,我们直接在pycharm中启动fate-flow目录下的fate-flow-server.py,输出信息如下:
init table name:fragments, namespace:__META__
init table name:__gc_dce06ca0-39e2-11ea-9610-6c96cfdd2e1d, namespace:dce06ca0-39e2-11ea-9610-6c96cfdd2e1d
* Running on http://0.0.0.0:9380/ (Press CTRL+C to quit)
表明fate-flow-server 启动成功
2. 进入examples/federatedml-1.x-examples 目录,我们看到有个quick_run.py脚本,直接使用pycharm进行启动,将输出如下信息:
/Users/xxx/venv/bin/python /Users/xxx/Documents/workspace/python/FATE/examples/federatedml-1.x-examples/quick_run.py
Upload data config json: {'file': 'examples/data/default_credit_homo_guest.csv', 'head': 1, 'partition': 10, 'work_mode': 0, 'table_name': 'default_credit_homo_guest', 'namespace': 'default_credit_homo_guest_guest'}
stdout:{
"data": {
"board_url": "http://192.168.31.58:8080/index.html#/dashboard?job_id=202001181915023702281&role=local&party_id=0",
"job_dsl_path": "/Users/xxx/Documents/workspace/python/FATE/jobs/202001181915023702281/job_dsl.json",
"job_runtime_conf_path": "/Users/xxx/Documents/workspace/python/FATE/jobs/202001181915023702281/job_runtime_conf.json",
"logs_directory": "/Users/xxx/Documents/workspace/python/FATE/logs/202001181915023702281",
"namespace": "default_credit_homo_guest_guest",
"table_name": "default_credit_homo_guest"
},
"jobId": "202001181915023702281",
"retcode": 0,
"retmsg": "success"
}
Upload data config json: {'file': 'examples/data/default_credit_homo_host.csv', 'head': 1, 'partition': 10, 'work_mode': 0, 'table_name': 'default_credit_homo_host', 'namespace': 'default_credit_homo_host_host'}
stdout:{
"data": {
"board_url": "http://192.168.31.58:8080/index.html#/dashboard?job_id=202001181915058443762&role=local&party_id=0",
"job_dsl_path": "/Users/xxx/Documents/workspace/python/FATE/jobs/202001181915058443762/job_dsl.json",
"job_runtime_conf_path": "/Users/xxx/Documents/workspace/python/FATE/jobs/202001181915058443762/job_runtime_conf.json",
"logs_directory": "/Users/xxx/Documents/workspace/python/FATE/logs/202001181915058443762",
"namespace": "default_credit_homo_host_host",
"table_name": "default_credit_homo_host"
},
"jobId": "202001181915058443762",
"retcode": 0,
"retmsg": "success"
}
dsl_path: /Users/xxx/Documents/workspace/python/FATE/examples/federatedml-1.x-examples/user_config/train_dsl.config_1579346108_9453, conf_path: /Users/xxx/Documents/workspace/python/FATE/examples/federatedml-1.x-examples/user_config/train_conf.config_1579346108_7399
stdout:{
"data": {
"board_url": "http://192.168.31.58:8080/index.html#/dashboard?job_id=202001181915093328073&role=guest&party_id=10000",
"job_dsl_path": "/Users/xxx/Documents/workspace/python/FATE/jobs/202001181915093328073/job_dsl.json",
"job_runtime_conf_path": "/Users/xxx/Documents/workspace/python/FATE/jobs/202001181915093328073/job_runtime_conf.json",
"logs_directory": "/Users/xxx/Documents/workspace/python/FATE/logs/202001181915093328073",
"model_info": {
"model_id": "arbiter-10000#guest-10000#host-10000#model",
"model_version": "202001181915093328073"
}
},
"jobId": "202001181915093328073",
"retcode": 0,
"retmsg": "success"
}
Please check your task in fate-board, url is : http://192.168.31.58:8080/index.html#/dashboard?job_id=202001181915093328073&role=guest&party_id=10000
The log info is located in /Users/xxx/Documents/workspace/python/FATE/examples/federatedml-1.x-examples/../../logs/202001181915093328073
Task is running, wait time: 10.55770993232727
Task is running, wait time: 21.68661403656006
Task is running, wait time: 32.47444009780884
Task is running, wait time: 43.21940803527832
Task is running, wait time: 53.8386709690094
如果你也看到了输出以上信息,那么恭喜你,你的联邦学习程序运行成功!
通过输出信息可以看到,这个例子主要是在做以下几个任务:
- 提交examples/data/default_credit_homo_guest.csv 数据,数据格式如下:
![faa15b4b3ffa084393d169725d8d8791.png](https://img-blog.csdnimg.cn/img_convert/faa15b4b3ffa084393d169725d8d8791.png)
2. 提交examples/data/default_credit_homo_host.csv 数据,数据格式如下:
![f1297a2dbf4e96125461affd62c28ac0.png](https://img-blog.csdnimg.cn/img_convert/f1297a2dbf4e96125461affd62c28ac0.png)
这里的有两个单词,一个是guest,代表联邦学习的发起方(可以认为是想通过联邦学习来提升模型性能的一方),一个是host,代表数据的参与方(可以认为是提供更多数据给guest进行建模的一方)
另外,可以看到,两个数据集有着相同的特征列表(特征重叠较多),但是样本id是不一样的(数据重叠少),这种场景被称为横向联邦学习。(为什么被称为横向?可能是由于我们一般的数据集的行代表样本、列代表特征,因为特征重叠较多,所以被称为横向???)
3. 提交了dsl和runtime conf文件,这两个文件描述了本次联邦学习的所有信息,quick_run.py里面的文件配置如下:
DSL_PATH = 'homo_logistic_regression/test_homolr_train_job_dsl.json'
SUBMIT_CONF_PATH = 'homo_logistic_regression/test_homolr_train_job_conf.json'
quick_run.py脚本主要使用这两个配置进行稍微修改,然后跑了一个横向的逻辑回归模型,对信用卡评分进行建模
- dsl文件描述了联邦学习过程中各个模块(数据准备、特征预处理、建模、评估)的输入输出信息,我们看homo_logistic_regression/test_homolr_train_job_dsl.json文件的配置:
{
"components" : {
"dataio_0": {
"module": "DataIO",
"input": {
"data": {
"data": [
"args.train_data"
]
}
},
"output": {
"data": ["train"],
"model": ["dataio"]
}
},
"homo_lr_0": {
"module": "HomoLR",
"input": {
"data": {
"train_data": [
"dataio_0.train"
]
}
},
"output": {
"data": ["train"],
"model": ["homolr"]
}
},
"evaluation_0": {
"module": "Evaluation",
"input": {
"data": {
"data": [
"homo_lr_0.train"
]
}
},
"output": {
"data": ["evaluate"]
}
}
}
}
总共定义了三个模块,分别是dataio homo_lr evaluation ,这三个模块执行的任务为载入数据、横向逻辑回归建模、评估
- runtime conf文件如下:
{
"initiator": {
"role": "guest",
"party_id": 10000
},
"job_parameters": {
"work_mode": 0
},
"role": {
"guest": [
10000
],
"host": [
10000
],
"arbiter": [
10000
]
},
"role_parameters": {
"guest": {
"args": {
"data": {
"train_data": [
{
"name": "default_credit_homo_guest",
"namespace": "default_credit_homo_guest_guest"
}
]
}
}
},
"host": {
"args": {
"data": {
"train_data": [
{
"name": "default_credit_homo_host",
"namespace": "default_credit_homo_host_host"
}
]
}
},
"evaluation_0": {
"need_run": [
false
]
}
}
},
"algorithm_parameters": {
"dataio_0": {
"with_label": true,
"label_name": "y",
"label_type": "int",
"output_format": "dense"
},
"homo_lr_0": {
"penalty": "L2",
"optimizer": "sgd",
"eps": 1e-05,
"alpha": 0.01,
"max_iter": 10,
"converge_func": "diff",
"batch_size": 500,
"learning_rate": 0.15,
"decay": 1,
"decay_sqrt": true,
"init_param": {
"init_method": "zeros"
},
"encrypt_param": {
"method": "Paillier"
},
"cv_param": {
"n_splits": 4,
"shuffle": true,
"random_seed": 33,
"need_cv": false
}
}
}
}
这个模块主要描述了各个模块的具体运行时的配置参数,包括任务的发起者、训练数据表名、训练参数、加密方式等
好,我们已经将联邦学习的实例跑起来了,后面我们将介绍如何使用pycham进行debug,查看任务输出信息等