联邦学习(fate)从主机安装到实现联邦学习

news2024/11/24 7:23:58

联邦学习(fate)从主机安装到实现联邦学习

  • 一、单机部署
    • 1.1虚拟机配置
    • 1.2安装python
    • 1.3端口检查
    • 1.4获取安装包,并解压
    • 1.5安装
    • 1.6启动
    • 1.7测试
    • 1.8安装FATE-Client、FATE-Test、FATE-Flow、jupyter notebook
      • 1.8.1FATE-Client、FATE-Test
      • 1.8.2FATE-Flow
      • 1.8.3FATE中的Jupyter Notebook
  • 二、用FATE从零实现横向逻辑回归
    • 2.1 数据集获取
    • 2.2 横向联邦数据集切分
    • 2.3 上传数据-修改文件
    • 2.4 上传数据-跳转目录
    • 2.5 模型训练与评估
      • 2.5.1 修改conf和dsl文件参数
      • 2.5.2 修改结束之后,在命令行输入以下命令(submit_ job)执行模型训练

一、单机部署

单机版提供3种部署方式,这里选择在主机中安装FATE(官方建议使用Docker镜像,但不熟悉Docker的人容易找不到FATE路径)

1.1虚拟机配置

使用虚拟机VMware进行实验,实验过程中随时拍摄快照,节约重装时间。

项目Value
虚拟机配置内存4G + 硬盘150G
操作系统centos 7

1.2安装python

  • 这里不重复写了,请参考(Ubuntu安装python)(CentOS安装python)
  • 或者安装anconda–linux版本

1.3端口检查

检查端口8080、9360、9380是否被占用

netstat -apln|grep 8080
netstat -apln|grep 9360
netstat -apln|grep 9380

1.4获取安装包,并解压

sudo wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/fate/1.8.0/release/standalone_fate_install_1.8.0_release.tar.gz --no-check-certificate
tar -xzvf standalone_fate_install_1.8.0_release.tar.gz

1.5安装

  • 进入解压后的目录并使用init.sh进行安装
  • 该脚本将自动完成:
    安装必要的操作系统依赖包
    安装python36环境
    安装pypi依赖包
    安装jdk环境
    配置FATE环境变量脚本
    配置fateflow
    配置fateboard
    安装fate client
cd standalone_fate_install_1.8.0_release
bash init.sh init

1.6启动

bash init.sh status
bash init.sh start

加载环境变量

source bin/init_env.sh	

1.7测试

部署成功后,通过网页访问 localhost:8080 可以进入FATE Board页面,账号密码默认为:admin

返回终端,开始测试

  • Toy测试
flow test toy -gid 10000 -hid 10000
  1. 如果成功,屏幕显示类似下方的语句:
    success to calculate secure_sum, it is 2000.0(我的显示的为1999.999999999)

  2. 之后进入FATE Broad,点击右上角JOBS,看到任务栏出现两项任务,并且状态为success则说明成功。

  • 单元测试
fate_test unittest federatedml --yes

如果成功,屏幕显示类似下方的语句:

there are 0 failed test

1.8安装FATE-Client、FATE-Test、FATE-Flow、jupyter notebook

1.8.1FATE-Client、FATE-Test

  • 为方便使用FATE,安装便捷的交互工具FATE-Client以及测试工具FATE-Test.
  • 请在环境内使用以下指令安装:
python -m pip install fate-client
python -m pip install fate-test

1.8.2FATE-Flow

  • 安装FATE-Client的过程会安装好FATE-Flow,这个工具是联邦学习端到端流水线的多方联邦任务安全调度平台,是执行任务的核心
  • 初始化
flow init --ip 127.0.0.1 --port 9380

1.8.3FATE中的Jupyter Notebook

参考:在Juypter Notebook中构建联邦学习任务

上边如果安装anaconda的则只需要执行下方第二步

  • 安装jupyter notebook
pip install notebook fate-client

启动 Juypter Notebook 服务并监听 20000 端口,待服务启动完毕后则可以通过的方式 “IP:Port” 的方式访问 Notebook


jupyter notebook --ip=0.0.0.0 --port=20000 --allow-root --debug --no-browser --NotebookApp.token= ''--NotebookApp.password= ''
  • 保持终端运行的状态,可以通过"IP:Port"的方式访问Juypter Notebook,此时notebook中的目录,就是Ubuntu中fate安装目录下的内容(按本教程的安装过程,fate根目录位于/home/fate/standalone_fate_master_1.8.0/)

二、用FATE从零实现横向逻辑回归

在开始本章之前,请确保已经安装Python和FATE单机版

2.1 数据集获取

from sklearn.datasets import load_breast_cancer
import pandas as pd 

breast_dataset = load_breast_cancer()
breast = pd.DataFrame(breast_dataset.data, columns=breast_dataset.feature_names)
breast['y'] = breast_dataset.target
breast.head()

2.2 横向联邦数据集切分

为了模拟横向联邦建模的场景,我们首先在本地将乳腺癌数据集切分为特征相同的横向联邦形式,当前的breast数据集有569条样本,我们将前面的469条作为训练样本,后面的100条作为评估测试样本

  • 从469条训练样本中,选取前200条作为公司A的本地数据,保存为breast_1_train.csv,将剩余的269条数据作为公司B的本地数据,保存为breast_2_train.csv。
  • 测试数据集可以不需要切分,两个参与方使用相同的一份测试数据即可,文件命名为breast_eval.csv。

from sklearn.datasets import load_breast_cancer
import pandas as pd 


breast_dataset = load_breast_cancer()
breast = pd.DataFrame(breast_dataset.data, columns=breast_dataset.feature_names)
breast = (breast-breast.mean())/(breast.std()) 
col_names = breast.columns.values.tolist()

columns = {}
for idx, n in enumerate(col_names):
	columns[n] = "x%d"%idx 
	
breast = breast.rename(columns=columns)	
breast['y'] = breast_dataset.target
breast['idx'] = range(breast.shape[0])
idx = breast['idx']
breast.drop(labels=['idx'], axis=1, inplace = True)

breast.insert(0, 'idx', idx)
breast = breast.sample(frac=1)
train = breast.iloc[:469]
eval = breast.iloc[469:]
breast_1_train = train.iloc[:200]
breast_1_train.to_csv('breast_1_train.csv', index=False, header=True)


breast_2_train = train.iloc[200:]
breast_2_train.to_csv('breast_2_train.csv', index=False, header=True)
eval.to_csv('breast_eval.csv', index=False, header=True)

运行完此程序之后会得到三个新的scv格式的数据集

2.3 上传数据-修改文件

在数据处理完之后,我们需要进行对数据进行上传。我们采用json格式进行上传。在FATE项目中有写好的上传json文件,在examples/dsl/v2/upload文件夹中,upload_conf.json此文件。在我的实验中,我将此文件复制到了我在FATE目录下新建的工作目录下,并对其进行了修改。

{
    "file": "examples/data/breast_1_train.csv",#指定数据文件
    "head":1,
    "partition": 10,
    "work_mode": 0,
    "table_name": "homo_breast_1_train",#指定DTable表名
    "namespace": "breast_1_train.csv" #指定DTable表名的命名空间
}

“file”:需要改为自己的csv路径
“work_model”:0 表示为单机部署模式
“table_name”:需要改为自己的table名

2.4 上传数据-跳转目录

为了方便后面的叙述统一,我们假设读者安装的FATE单机版本目录为:

fate_dir=/data/projects/fate-1.8.0-experiment/standalone-fate-master-1.8.0/

做完上述准备之后,我们需要进行以下操作

  1. 跳转到standalone-fate-master-1.8.0目录下
cd /data/projects/fate-1.8.0-experiment/standalone-fate-master-1.8.0
  1. 加载环境变量
source bin/init_env.sh	
  1. 在加载环境变量的基础上,在在当前目录下($fate_dir/examples/federatedml-1.x-examples),在命令行中执行下面的命令,即可自动完成上传和格式转换:
python /opt/standalone_fate_install_1.8.0/fateflow/python/fate_flow/fate_flow_client.py -f upload -c /opt/standalone_fate_install_1.8.0/fate/upload_data/upload_train1.json

或者

flow data upload -c /opt/standalone_fate_install_1.8.0/fate/upload_data/upload_train1.json

出现如下界面说明成功:
成功截图

2.5 模型训练与评估

数据完成上传之后,下面需要对训练任务进行配置,在FATE项目中已经给出了很多写好的配置,我们可以在此基础上进行修改就能直接用了。

2.5.1 修改conf和dsl文件参数

书中的版本与v1.8.0完全发生了改变,我们需要重新配置dsl和conf文件,且书中是使用训练集建模训练集评估,与建模流程不符,我们改变书中流程,使用训练集建模训练集与测试集分开进行评估

在这里我使用的是homo_lr_train_conf.json和homo_lr_train_dsl.json,这两个文件在examples/dsl/v2/homo_logistic_regression目录中能够找到。接下来我们需要对其进行修改

  1. homo_lr_train_conf.json:用来设置各个组件的参数,比如输入模块的数据表名,算法模块的学习率,batch大小,迭代次数。
    一般使用默认值即可,需要修改的地方包括以下几处。
  • role字段:该字段包括guest和host分别对应两个参与方。需要修改三个参数。首先是name和namespace,代表训练数据的DTable表名和命名空间;此外,label_name表示的是标签列对应的属性名,
{
    
        "role": {
            "host": {
                "0": {
                    "reader_0": {
                        "table": {
                            "name": "mnist_host_train",  #注意此处换成对应的表名,在复制此代码时需要删除此注释
                            "namespace": "experiment"
                        }
                    },
                    "evaluation_0": {
                        "need_run": false
                    }
                }
            },
            "guest": {
                "0": {
                    "reader_0": {
                        "table": {
                            "name": "mnist_guest_train",#注意此处换成对应的表名,在复制此代码时需要删除此注释
                            "namespace": "experiment"
                        }
                    }
                }
            }
        }
    }
}
  • component_parameters字段:用来设置模型训练的超参数信息,包括优化函数与学习率,迭代次数
"component_parameters": {
        "common": {
            "data_transform_0": {
                "with_label": true,
                "output_format": "dense"
            },
            "homo_lr_0": {
                "penalty": "L2",
                "tol": 1e-05,
                "alpha": 0.01,
                "optimizer": "sgd",
                "batch_size": -1,
                "learning_rate": 0.15,
                "init_param": {
                    "init_method": "zeros"
                },
                "max_iter": 30,
                "early_stop": "diff",
                "encrypt_param": {
                    "method": null
                },
                "cv_param": {
                    "n_splits": 4,
                    "shuffle": true,
                    "random_seed": 33,
                    "need_cv": false
                },
                "decay": 1,
                "decay_sqrt": true
            },
            "evaluation_0": {
                "eval_type": "binary"
            }
        }
  1. homo_lr_train_dsl.json:用来描述任务模块,将任务模块以有向无环图的形式组合在一起。以下组件模块构成了最基本的横向联邦模型流水线。
  • homo_lr_0:横向逻辑回归组件
  • evaluation_0:模型评估组件,如果没有提供测试数据集,将自动使用训练数据进行模型评估。

2.5.2 修改结束之后,在命令行输入以下命令(submit_ job)执行模型训练

python /opt/standalone_fate_install_1.8.0/fateflow/python/fate_flow/fate_flow_client.py -f submit_job -d /opt/standalone_fate_install_1.8.0/fate/dsl_conf/homo_lr_train_dsl.json -c /opt/standalone_fate_install_1.8.0/fate/dsl_conf/homo_lr_train_conf.json

或者

flow job submit -d /opt/standalone_fate_install_1.8.0/fate/dsl_conf/homo_lr_train_dsl.json -c /opt/standalone_fate_install_1.8.0/fate/dsl_conf/homo_lr_train_conf.json

成功后显示如图
截图
通过箭头所指地址我们可以在浏览器中查看任务进度和信息
截图成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Newman+Jenkins实现接口自动化测试

一、是什么Newman Newman就是纽曼手机这个经典牌子,哈哈,开玩笑啦。。。别当真,简单地说Newman就是命令行版的Postman,查看官网地址。 Newman可以使用Postman导出的collection文件直接在命令行运行,把Postman界面化运…

【C++】stack 与 queue

stack 与 queuestackSTL 容器中 stack 的使用模拟实现 stackqueueSTL 容器中 queue 的使用模拟实现 queuestack 在数据结构中,我们了解到,stack 栈结构,是一种先进后出的结构,并且我们是使用顺序表来进行实现栈的操作的。 STL 容…

如何使用FindFunc在IDA Pro中寻找包含指定代码模式的函数代码

关于FindFunc FindFunc是一款功能强大的IDA Pro插件,可以帮助广大研究人员轻松查找包含了特定程序集、代码字节模式、特定命名、字符串或符合其他各种约束条件的代码函数。简而言之,FindFunc的主要目的就是在二进制文件中寻找已知函数。 使用规则过滤 …

C++回顾(六)—— 对象动态建立

6.1 new 和 delete 用法 6.1.1 概述 在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C提供了较简便而功能较强的运算符new和delete来取代malloc和f…

smart-doc Java Restful API 文档生成工具

smart-doc简介 官方地址smart-doc smart-doc 是一款同时支持 JAVA REST API 和 Apache Dubbo RPC 接口文档生成的工具,smart-doc 在业内率先提出基于 JAVA 泛型定义推导的理念, 完全基于接口源码来分析生成接口文档,不采用任何注解侵入到业…

vue基础学习笔记

1.v-text 设置标签的文本值&#xff0c;将标签内的内容完全替换为v-text绑定的值。 如果想要保留标签内的值&#xff0c;可以采用差值表达式的方式&#xff08;<h2>text{{message}}</h2>&#xff09; 内部值支持拼接 <!DOCTYPE html> <html lang"en…

Unity Asset Bundle学习 - 加载网络资源

昨天调试了一下加载本地资源 Unity Asset Bundle学习 - 加载本地资源 今天试一下用Asset Bundle加载网络数据 接着按照文档走 发现 有问题 引用命名空间一直报错 按文档走不通 就直接百度查了 查了好多 这个东西有很多前辈的经验 直接拷贝代码拿过来用的 下面这段是测试没问题…

技术分享 | OceanBase 集群扩容缩容

作者&#xff1a;杨文 DBA&#xff0c;负责客户项目的需求与维护&#xff0c;会点数据库&#xff0c;不限于MySQL、Redis、Cassandra、GreenPlum、ClickHouse、Elastic、TDSQL等等。 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用…

面试官:为什么说ArrayList线程不安全?

本博客知识点收录于&#xff1a;⭐️《JavaSE系列教程》⭐️ 1&#xff09;线程安全与不安全集合 我们学习集合的时候发现集合存在由线程安全集合和线程不安全集合&#xff1b;线程安全效率低&#xff0c;安全性高&#xff1b;反之&#xff0c;线程不安全效率高&#xff0c;安…

Yuga Labs发布“TwelveFold“进军BTC,新大陆的探索即将开启

Yuga Labs 正在将新的 NFT 引入比特币区块链&#xff0c;并于 2 月 28 日推出了一个名为 TwelveFold 的系列。该系列是比特币网络上“刻在 satoshis 上”的 300 个生成作品的限量版。据官方说明&#xff0c;TwelveFold将限量发行三百幅的生成式NFT 画作&#xff0c;每件NFT 作品…

AcWing3696. 构造有向无环图

先看题&#xff1a; 首先来看一下题目的要求&#xff1a;利用给定的边来构造一个有向无环图。 那么什么是有向无环图呢&#xff1f;我们来搜索一番&#xff1a;"所谓有向无环图其实就是&#xff1a;有方向的边&#xff1b;这些边在一个图中不会构成一个闭合的环路。"…

学习大数据应该掌握哪些技能

想要了解大数据开发需要掌握哪些技术&#xff0c;不妨先一起来了解一下大数据开发到底是做什么的~ 1、什么是大数据&#xff1f; 关于大数据的解释&#xff0c;比较官方的定义是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模…

C++STL详解(四)—— vector模拟实现

文章目录vector内置成员变量默认成员函数初始化列表构造迭代器区间构造函数赋个数赋值构造函数赋值构造的相关问题拷贝构造函数赋值运算符重载函数析构函数迭代器及迭代器相关函数begin和end范围for容量与扩容相关函数size和capacityreserveresizeemptyvector中的增删查改&…

「攻略手册」:ShardingSphere 与 Java 应用性能优化

笔者曾经写过一篇文章&#xff0c;介绍 ShardingSphere 在具体代码细节上的优化案例&#xff0c;但文章中没有介绍如何发现代码优化点。本文将结合之前笔者在 ShardingSphere 相关性能问题排查、优化经验&#xff0c;简要地介绍 ShardingSphere 性能问题排查、优化应如何入手。…

解决Sql WorkBench中数据库不能重命名的问题

解决Sql WorkBench中数据库不能重命名的问题mysql不支持直接重命名数据库1. 连接到数据库2. 打开菜单&#xff0c;选择迁移向导3. 点击Start Migration4. 填写源数据库的相应参数5. 填写目标数据库的响应参数6. 稍等片刻&#xff0c;点击Next7. 选择你要迁移的数据库。8. 进入一…

B站依然面临巨大风险,盈利之路可能会更加艰难

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 哔哩哔哩(BILI)虽然得到了阿里巴巴(BABA)和腾讯(00700)的支持&#xff0c;在扩大和多样化用户数量方面也取得了巨大的成绩。但哔哩哔哩还在继续亏损&#xff0c;随着国家的监管环境朝着对游戏行业有利的方向变化&#xff0…

【案例教程】GAMS电力模型

本专题主要针对电力系统领域中比较典型的优化问题、优化方法及其在GAMS中的实现进行分析。共分为五个部分&#xff0c;包括电力系统机组组合专题、最优潮流专题、水电优化运行专题、鲁棒优化和多能源互补优化专题、分布鲁棒优化专题等&#xff0c;从基本模型到复杂模型逐步深入…

MySql数据类型都是字符串(varchar),数据类型一样,但是联表查询不走索引,是什么原因呢

大家都知道,如果联表查询中,数据类型不一样,是很有可能不走索引的,但是有时候数据类型一样也是有可能不走索引的,我们往下看1 数据准备我们准备两个表,用来模拟联表查询1.1 user表CREATE TABLE user (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键,phone varchar(20) DE…

华为OD机试用Python实现 -【几何平均值最大子数组】| 2023年3月被抽中

华为OD机试题 最近更新的博客华为 OD 机试 300 题大纲几何平均值最大子数组题目描述输入描述输出描述说明示例一输入输出说明示例二输入输出说明Python 代码实现核心逻辑最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单</

测试只能干到35岁?35岁+的测试就会失业?

互联网行业在很多年轻人的眼中&#xff0c;是高薪的象征。前几年的软件测试行业还是一个风口&#xff0c;随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业&#xff0c;但是现在裁员潮涌现的时候&#xff0c;互联网行业首当其冲&#xff0c;互联网企业大量的裁员&…