关于人工智能:极客星球-联邦学习与产品化之路

49次阅读

共计 3191 个字符,预计需要花费 8 分钟才能阅读完成。

一、背景——联邦学习与 fate 简介

1、联邦学习

联邦学习(Federated Learning)是一种新兴的人工智能根底技术,由谷歌最先提出于 2016 年,原用于解决安卓手机终端用户在本地更新模型的问题。其设计指标是在保障大数据交换时的信息安全、爱护终端数据和集体数据隐衷、保障非法合规的前提下,在多参与方或多计算结点之间发展高效率的机器学习,指标是在保证数据隐衷平安及非法合规的根底上实现独特建模,晋升 AI 模型的成果。总的来说,联邦学习实质上是一种分布式机器学习技术或机器学习框架。

2、FATE

Federated AI Technology Enabler(简称 FATE) 是由微众银行 AI 团队,于 2019 年 2 月推出的寰球首个工业级别联邦学习框架,能够让企业和机构在爱护数据安全和数据隐衷的前提下进行 AI 合作。FATE 我的项目应用多方平安计算 (MPC) 以及同态加密 (HE) 技术构建底层平安计算协定,以此反对不同品种的机器学习的平安计算,包含逻辑回归、基于树的算法、深度学习和迁徙学习等。

FATE 技术架构的底层是 Tensorflow / Pytorch(深度学习)、EggRoll /Spark(分布式计算框架)和多方联邦通信网络,下层为联邦平安协定,并在平安协定的根底上构建联邦学习算法库。

Federatedml 模块包含许多常见机器学习算法联邦化实现。所有模块均采纳去耦的模块化办法开发,以加强模块的可扩展性。具体包含:

  • 联邦统计: 包含隐衷交加计算,并集计算,皮尔逊系数等;
  • 联邦特色工程:包含联邦采样,联邦特色分箱,联邦特征选择等;
  • 联邦机器学习算法:包含横向和纵向的联邦 LR, GBDT,DNN,迁徙学习等;
  • 模型评估:提供对二分类,多分类,回归评估,联邦和单边比照评估;
  • 平安协定:提供了多种平安协定,以进行更平安的多方交互计算。

    二、Fate 产品化

    1、Fate 操作形式

1)配置 Json + fate_client 命令行
为了让任务模型的构建更加灵便,目前 FATE 应用了一套自定的域特定语言 (DSL:domain-specific language) 来形容工作。在 DSL 中,各种模块能够通向一个有向无环图(DAG)组织起来。通过各种形式,用户能够依据本身的须要,灵便地组合各种算法模块。

FATE 构建联邦学习 Pipeline 是通过自定义 dsl 和 conf 两个配置文件来实现的:

  • dsl 文件:用来形容工作模块,将工作模块以有向无环图(DAG)的模式组合在一起。
  • conf 文件:设置各个组件的参数,比方输出模块的数据表名;算法模块的学习率、batch 大小、迭代次数等。

执行示例:

2)pipeline 代码行
pipeline 是一个更高级的接口,它将下面提交工作的形式以及很多 fate flow client 命令进行了封装,应用 pipeline 建模就像传统形式一样在 python 里增加须要的模块、定义模块的参数,而后运行,而不必更改 dsl 的 json 文件,而后应用命令行提交工作。

2、产品化需要

1)工作配置繁琐
以上 fate 提交工作的两种形式,因为 Fate 外部模块泛滥,且不同的模块对应的参数不同,只有对 fate 框架比拟相熟的技术人员能力应用,有肯定的技术门槛,对一般业务人员不敌对

2)不反对 component 复用
在 1.7 以下的版本中,fate 并不反对不同 component 的独立运行、阶段复用,只能数据预处理、数据对齐、特色工程、模型训练等步骤一次性执行完结。如果两头任何一个环节呈现问题,整个工作必须从新从头执行;如果想应用雷同的数据、不同的训练参数从新训练,也必须批改好对应的 json 后从新提交,执行残缺流程。

这对于使用者来说,会带来不必要的工夫节约,如果单方的数据量较大,这个问题会更加显著。

3)缺失权限管制
这部分包含两个方面:

  • 对外:在原生 Fate 中,当单方配置相应的 party_id、ip、port 后,双方能够有限次发动工作,也能够应用枚举攻打获取另一方数据(例如手机号 MD5 枚举),会给合作方的硬件资源、数据安全等带来危害;
  • 对内:短少不同我的项目以及相干数据之间的权限管制,容易造成管理混乱

4)部署较为繁琐
现阶段的客户多违心采纳本地部署的形式而非云部署,官网尽管提供了各种本地部署领导以及 ansible 自动化部署脚本,但对于技术人员来讲,部署仍然较为繁琐;如果不同合作方波及多个不同的操作系统,部署会更加简单,也会带来较多的稳定性隐患。

三、产品化难点

1、component/ 步骤解耦

通过研读 fate 源码,发现各个 component 连接的外围在于如何读取上一个 component 的数据、Model 输入;而管制输出的模块则由 dsl 定义,在原生 fate 中,对应的是上一个 component 的代号【同一 job 内,job_id 固定】,不能人为指定。

因而,要实现解耦 / 复用,须要从新定义 DSL 中模块输出的参数,并在 fate_flow 中批改对应的解析逻辑,使后续的 component 能够读取上一个 component 的输入。

外围逻辑如下:

java 端提交 job 信息到 fate,fate 端解析 json 获取对应的 job_id、component、data_name;

tracker 组件从底层库表读取对应 component 输入的库表

2、通信信道安全性【信通院认证必选项】

1)双端口
在最早的求交产品中,咱们将工作相干的信息应用独自的 web 程序通过指定的端口进行通信,与 fate 本身的端口是互相独立的。然而这样一来,如果要满足认证所需的安全性,web 端通信的数据加密须要独自开发,技术难度较大,整个零碎也须要定义两套不同的加解密零碎,零碎设计会呈现不必要的冗余模块,因而被弃用。

2)对立 TLS 通道
Fate 的 eggroll 模块曾经实现 TLS 双向通信加密性能,只须要增加单方的公私钥文件,并在配置中开启即可。

因而能够利用 fate 中已有的 proxy_app 模块,通过 eggroll 定义好的 grpc 通信通道进行信息传递;

因为只波及申请事件信息传递,因而还须要在 java 端减少相应的解析执行模块,来实现具体的信息同步、数据入库、状态更新等动作。

3、兼顾数据安全的我的项目单干机制

1)配置全局单干 Token
在信通院版本的开发中,为了缩短开发周期,咱们应用了全局 Token 形式,对于某一合作方,咱们将单方协定好的 token 配置在数据库中,后续工作依据这一 token 进行权限认证(数据读取、job 执行权限);如果单干解除,任意一方删除 token 或勾销对应库表的受权即可;这样初步达到了权限管制的目标。

然而这种形式仍存在对方可通过枚举窃取数据的弊病,例如通过手机号枚举获取我方全库数据 id。

2)会话式我的项目单干 Token
这种形式执行单干前,须要先通过对话式的通信创立工作,每个任务分配一个单干 Token,并限定单干所波及的库表,这样就从根本上杜绝了枚举攻打的可能。

全局通信流程如下:
1)在我的项目创立阶段,通过 proxy_app + Java Hook 代理的形式实现申请信息传送、单方库表等信息互通更新;

2)在 job 执行阶段,先通过代理同步 job 信息,而后在各方本地通过 job_id 获取对应我的项目的 token 进行权限验证【同步启动状态刷新线程】;
3)具体的 job、我的项目状态更新由后盾异步线程实现。

四、产品介绍

1、整体架构

在 Fate 原生架构根底上,新增了 web 治理界面,用于数据、工作的提交及相干信息展现、治理

2、产品功能模块

1)数据管理
数据集的上传、治理等

2)求交
反对原始数据间接求交,下载数据交加

3)联邦建模
残缺的数据预处理、数据匹配(求交)、特色工程、模型训练流程

能够调整参数屡次训练

4)模型利用
应用训练好的模型进行批量打分

5)Docker 容器化部署
部署前导入打包好的 Docker 镜像,解压部署包,批改 env 中的参数,即可应用 docker-compose 启动我的项目实例

正文完
 0