前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >坑挺多 | 联邦学习FATE:上传数据(一)

坑挺多 | 联邦学习FATE:上传数据(一)

作者头像
悟乙己
发布2022-06-20 08:15:25
1.2K0
发布2022-06-20 08:15:25
举报
文章被收录于专栏:素质云笔记素质云笔记

吐槽一下这个号称“最流行”的联邦学习框架,对新手入门非常不友好,从安装到上传数据,需要多个文档对着看,列举一下笔者在自己测试时候的坑:

  • 代码确实有,但是配套的说明文档不是一气呵成的,需要多个地方对着看才能看懂
  • 社群基数还不友好,很多问题难以找到解答,要么就是在官方群里问
  • 报错信息乱七八糟,丢了一堆,debug非常困难
  • 代码对新手不友好,基本需要你对这款比较熟悉,才能猜到一些默认参数会是什么
  • 很多依赖代码没说明白

几个需要对着看的官方文档: GITHUB readthedocs


文章目录


1 上传数据之前需要知道的坑点

1.1 在哪台机器上传数据?

笔者作为新手,一开始对官方[Pipeline Upload Data Tutorial]教程的以下代码感到很困惑:

代码语言:javascript
复制
!pipeline init --ip 127.0.0.1 --port 9380

因为127.0.0.1代表你启动的是本机的fate,也就是如果你有两台服务器,9999/10000,你应该需要挑选某一台进行上传数据/建模等其他操作? 那能不能由第三台服务器进行上传数据操作呢? 当然,答案是:可以的

在这里插入图片描述
在这里插入图片描述

1.2 如何连接fate server

首先各类教程里面,pipeline init就是启动了fate flow server,

代码语言:javascript
复制
!pipeline init --ip 127.0.0.1 --port 9380

但是你会发现,最坑的是,不论你ip换成啥,都会显示Pipeline configuration succeeded. 笔者一开始看到succeeded就觉得没问题了,但是跑后面的代码一直报错:

代码语言:javascript
复制
{
    "retcode": 100,
    "retmsg": "Connection refused. Please check if the fate flow service is started"
}

就一直报错,查了半天也没有什么教程解释;终于自己摸索了半天才发现:

代码语言:javascript
复制
!pipeline config check 
>>> Flow server status normal, Flow version: 1.7.2

这样才是正确的检查是否启动fate flow server的正确姿势

所以这里最好换成公有IP:

代码语言:javascript
复制
!pipeline init --ip 你的公有IP --port 9380
!pipeline config check 

1.3 需要及时切换IP才能上传两台服务器

笔者是在同一个jupyter里面测试,

代码语言:javascript
复制
!pipeline init --ip fate-9999.aliyun.xxxx.com --port 9380

首先我连接9999,然后上传数据; 之后想在10000上传数据,那么笔者当然以为在同一个kernel下pipeline init --ip 10000,就切换到了10000,然后就可以上传了; 但,这样是不行的,需要你restart kernel,才行。

2 上传数据代码

笔者自己根据实验总结如下的上传代码:

代码语言:javascript
复制
from pipeline.backend.pipeline import PipeLine
import os

def upload_fate_data(params,partition = 4,\
                     role = 'guest',party_id = 9999,guest=9999):
    pipeline_upload = PipeLine().set_initiator(role=role, party_id=party_id).set_roles(guest=guest)
    pipeline_upload.add_upload_data(file=params['file_name'],
                                table_name=params["name"],             # table name
                                namespace=params["namespace"],         # namespace
                                head=1, 
                                partition=partition)               # data info

    pipeline_upload.upload(drop=1)
    print('success upload!')


data_base = "/FATE-master/examples/data" # 数据地址
namespace = 'student_hetero'

host_train_data_params = {"name": "student_hetero_host",\
                          "namespace": namespace,\
                          'file_name':os.path.join(data_base,'student_hetero_host.csv')}
    
host_test_data_params = {"name": "student_hetero_host",\
                         "namespace": namespace,\
                         'file_name':os.path.join(data_base,'student_hetero_host.csv')}
    
guest_train_data_params = {"name": "student_hetero_guest",\
                           "namespace": namespace,\
                           'file_name':os.path.join(data_base,'student_hetero_guest.csv')}
    
guest_test_data_params = {"name": "student_hetero_guest",\
                          "namespace": namespace,\
                          'file_name':os.path.join(data_base,'student_hetero_guest.csv')}


#### guest网络
!pipeline init --ip fate-9999.aliyun.xxxx.com --port 9380
!pipeline config  check

upload_fate_data(guest_train_data_params,partition = 4)
upload_fate_data(guest_test_data_params,partition = 4)

上面在guest上传了两份数据,然后需要restart kernel,然后继续在10000上传数据

代码语言:javascript
复制
#### host网络
!pipeline init --ip fate-10000.aliyun.xxxx.com --port 9380
!pipeline config  check

upload_fate_data(host_train_data_params,partition = 4)
upload_fate_data(host_test_data_params,partition = 4)

当然,这里笔者继续吐槽,看到fateboard,因为笔者pipeline初始化,设置的是role = 'guest',但是现在上传role 显示是local,也把笔者恶心了一阵子… 当然,笔者后面无力继续究其原因,感觉,在上传数据环节,无论你role设置成啥,到最后,还是role为local

在这里插入图片描述
在这里插入图片描述

你上传了两个数据集,就会生成2个job

3 各类报错小记

3.1 最恶心笔者的:Connection refused. Please check if the fate flow service is started

代码语言:javascript
复制
{
    "retcode": 100,
    "retmsg": "Connection refused. Please check if the fate flow service is started"
}

刚刚提到过了,需要

代码语言:javascript
复制
!pipeline config check 

查看

3.2 各类依赖版本不对

代码语言:javascript
复制
AttributeError: type object 'h5py.h5r.Reference' has no attribute '__reduce_cython__'
>>> 需要重新安装h5py,先卸载,再重装

'_ipython_canary_method_should_not_exist_'

2022-06-14 21:09:13.653 | ERROR    | IPython.utils.dir2:get_real_method:74 - An error has been caught in function 'get_real_method', process 'MainProcess' (10068), thread 'MainThread' (23392):

遇到很多,反正看提示,重装。。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1 上传数据之前需要知道的坑点
    • 1.1 在哪台机器上传数据?
      • 1.2 如何连接fate server
        • 1.3 需要及时切换IP才能上传两台服务器
        • 2 上传数据代码
        • 3 各类报错小记
          • 3.1 最恶心笔者的:Connection refused. Please check if the fate flow service is started
            • 3.2 各类依赖版本不对
            相关产品与服务
            联邦学习
            联邦学习(Federated Learning,FELE)是一种打破数据孤岛、释放 AI 应用潜能的分布式机器学习技术,能够让联邦学习各参与方在不披露底层数据和底层数据加密(混淆)形态的前提下,通过交换加密的机器学习中间结果实现联合建模。该产品兼顾AI应用与隐私保护,开放合作,协同性高,充分释放大数据生产力,广泛适用于金融、消费互联网等行业的业务创新场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档