怎么在mac下运行映像dmg_联邦学习开源框架FATE研究--MAC环境下的安装和运行

caf674badf730412847fd5b38b5a2a20.png

上篇简要介绍了FATE的基本信息,这篇简单介绍下如何在MAC环境将FATE跑起来

花京华:联邦学习开源框架FATE研究---入门简介​zhuanlan.zhihu.com
b7e8b5eb21639a1c5f5220433a6027a7.png

安装

为了后面我们在FATE上开发新代码,我们可以直接clone源代码(会比较慢),也可以使用单机安装版本的代码(比较快):

  1. 下载安装包:
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/eggroll​github.com

具体可参考

FedAI联邦学习:只看这一篇就够:快速了解联邦学习技术及应用实践​zhuanlan.zhihu.com
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了:

  1. 前面介绍了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

如果你也看到了输出以上信息,那么恭喜你,你的联邦学习程序运行成功!

通过输出信息可以看到,这个例子主要是在做以下几个任务:

  1. 提交examples/data/default_credit_homo_guest.csv 数据,数据格式如下:

faa15b4b3ffa084393d169725d8d8791.png

2. 提交examples/data/default_credit_homo_host.csv 数据,数据格式如下:

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,查看任务输出信息等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值