免费注册!6月19-20日,「亚马逊云科技中国峰会」重磅来袭! 了解详情
写点什么

只看这三点就够:快速了解联邦学习框架!

  • 2020-11-26
  • 本文字数:3298 字

    阅读完需:约 11 分钟

只看这三点就够:快速了解联邦学习框架!

01 部署


在实际落地时,不同企业间往往无法达到机器配置和网络环境的统一,因此会造成较高的先期训练及推理环境准备带来的的人力成本,从以往的经验来看,较为便捷的方式是通过打包联邦学习应用以及依赖包,到一个可移植的轻量容器——docker 中,让其可以在任何安装了 Docker 的机器上运行,而不用关心底层操作系统,这类似船舶使用的集装箱,可以便捷地装配到轮船、汽车等运载工具上。



这种做法往往具有以下优点:


  • 不仅能节约时间,快速部署和启动(秒级甚至毫秒级),还能节约成本,相于较虚拟机动辄几个 G 的磁盘空间,docker 容器可以减少到 MB 级;

  • 方便部署,直接运行已经配好的容器,解决开发人员由于安装环境带来的部署困难;docker 的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现“这段代码在我机器上没问题”这类问题;

  • 方便持续集成,通过与代码进行关联使持续集成非常方便;

  • 方便构建基于 SOA 架构或微服务架构的系统,通过服务编排,更好的松耦合;

  • 标准化应用发布,可以多平台部署。


02 训练


在实际生产中进行联邦学习训练时,不仅要考虑到系统的耦合性、稳定性,还要考虑业务需求对接多个数据源,需要支持市面上的各种计算引擎如 Spark、Flink、Storm 等,抑或需要满足高可用进行集群部署等等。因此,为了应对复杂的业务需求,对系统的各个组件,我们往往需要在灵活与便捷之间寻找一个平衡点。


模型训练往往较为耗时,这对系统的稳定性要求极高,一个完备的训练服务应该支持前期校验、中期容错、后期重试、全周期监控、信息可追踪等功能特性。工程落地涉及众多问题,面临大量挑战,真正能够实现落地便已非常复杂,实际生产应用时出现的问题更待陆续解决。如在当前的联邦学习实践场景下,训练过程中的“断点续跑”便是一个重要待解决难题。在实际业务场景中,一个模型的训练往往长达数十个小时,在此过程中,如果由于网络不稳定等问题导致训练过程中断,则该模型需要重新训练,这将极大地增加训练模型的时间成本,带来十分不友好的用户体验。


一个完整的训练框架常需要支持以下服务:



图一 训练框架示意图


通信服务 :由于端与端之间需要通信,为了能尽可能少地向对方暴露我方服务的信息,以及简便性调用训练服务,我们需要引入网关服务实现服务路由,对外暴露 gRPC 接口以及 HTTP 接口,外部系统的所有请求都将委托给网关服务进行请求转发。


训练服务 :该服务包括校验组件、任务调度组件,元数据中心管理组件,联邦学习组件。校验组件:负责校验我们提交的配置参数。任务调度组件:负责解析配置参数,以及进行整个训练任务的调度。在这里我们引入了设计模式中的责任链模式,按照我们指定的组件运行顺序,将一个训练任务转化成一条责任链,并提交给任务线程池去执行。元数据中心管理组件:负责记录每个训练任务的进度以及运行状态,配置参数,以及联邦学习合作方以及角色。联邦学习组件:这里面有很多小组件,用来完成模型训练过程中需要的各种功能。


模型管理服务 :当完成训练任务后,训练服务将训练好的模型信息发送给模型管理服务,由模型管理服务完成持久化存储,分组等操作。


注册中心 :为了保证服务的高可用,引入如 ZooKeeper 的注册服务,当服务启动的时候,会将服务信息注册到 ZooKeeper 中,当向网关服务发起训练请求的时候,网关服务会从 ZooKeeper 中拉取到可用的服务,通过指定的负载均衡策略完成服务调用。


在此基础上,训练流程大致可以分为如下几个步骤:



图二 训练流程示意图


提交训练任务 :当我们向网关服务提交一个训练任务之后,网关服务会将请求路由到训练服务。


检验参数 :在训练服务接受到网关服务请求之后,开始训练之前,我们会先检验配置参数的准确性,比如说需要的算法组件库是否存在、训练的参数是否合理、格式是否正确等,当校验通过后,训练服务会解析我们上传的配置参数,根据我们的配置去实例化所需要的联邦学习组件。


加载样本数据 :将不同类型的数据源(如: CSV 文件、HDFS、MySQL)的样本数据转换为训练服务可识别的格式类型。


特征数据相交 :比如 A 方的用户 ID 为 u1,u2,u3,u4,而 B 方的用户名为 u1,u2,u3,u5。交集后,A 方和 B 方知道他们相同的用户 ID,分别为 u1,u2,u3,但 A 方对 B 方的其他用户 ID(如 u5)一无所知,B 方对 A 方其它用户(u4)一无所知。


联邦训练 :指定联邦算法组件(如:LR、DNN)进行联合模型训练。


模型评估 :评估组件提供一些用于分类和回归的评估方法,它包含 AUC、KS 等指标用来评估模型。


模型存储 :完成训练任务后,训练服务会将训练好的模型信息发送给模型管理服务,由模型管理服务将模型进行分类,版本管理等等,然后将模型信息存储到存储服务中,并保存模型的元数据信息、地址等。


最后当我们将模型持久化存储后,我们可以通过评估组件选择出效果最好的模型,然后将模型导入到推理环境中进行预测,这样我们就可以将联邦学习的成果运用到了企业生产了。


03 推理


在我们完成联邦建模任务并且成功将最终训练好的模型存储在相应的存储模块后,发起方 A 端就可以发起推理任务,在与 B 端的配合下展开预测,根据双方的特征值,得到预测结果,而这个结果正是我们联合建模的最终目的。



与训练不同,由于具有实时调用场景,往往对推理服务的性能有很高的要求,并且要求推理服务能在不影响线上实时调用的基础上,实现无感知的服务升级。企业间的推理预测,往往涉及对账问题,于是对端监控变得极为重要,这能保证在推理完成后,合作方之间能够根据监控信息做到有帐可查,并能排查推理失败等异常情况。


一个完整的推理框架通常需要支持以下服务:



图三 推理框架示意图


通信服务 :端与端之间需要通信,所以我们需要一个代理,对外暴露 gRPC 接口跟 HTTP 接口,路由的转发以及外部系统的所有请求都委托给这一个代理,同时也可以根据业务的特点,决定负载均衡的方式,比如在接入代理之前部署 Nginx 来实现反向代理。


推理服务 :当一个新的推理请求过来时,它可以将所有推理相关的接口注册到如 ZooKeeper 的注册中心,外部系统可以通过服务发现获取接口地址加以调用;从远程存储系统中存储模型到本地,根据请求信息从本地存储系统中选择模型并加载模型;匹配到需要参与预测的用户信息,开展预测任务。


模型管理服务 :完成模型持久化存储,分组等,保存训练好的模型信息。


注册中心 :为了保证服务的高可用,引入如 ZooKeeper 的注册服务,当服务启动的时候,会将服务信息注册,当向网关服务发起推理请求的时候,网关服务会从注册服务中拉取到可用的服务,通过指定的负载均衡策略完成服务调用。


存储服务 :我们还需要将每次预测的结果存储起来以满足一些业务的需求,同时也需要将模型存储起来,持久化模型到本地可以保证在推理中某些组件发生问题时快速恢复过来,以及不需要每次发起推理请求时都从分布式存储系统中加载模型,从而保证安全也提高了效率。


在此基础上,整个推理的流程大致可以分为以下几个步骤:



图四 推理流程示意图


提交训练任务 :当我们向网关服务提交一个推理任务之后,网关服务会将请求路由到推理服务。


获取模型 :如果是第一次加载该模型,则会将其从分布式存储系统持久化到本地的存储系统系统中,如果已经被加载过,则直接从本地存储系统中读取。


预处理 &预测 :在 A,B 都加载完模型后,B 端根据 Featureid 从本侧外部系统中获取相应的特征信息,双方都需要对本地特征进行预处理,然后开始预测,并将结果通过通信服务传给 A 端。


后期处理 :A 端将 B 端的结果进行整合,在本地进行规则映射等后期处理,并将最终的结果保存。


综上所述,整个推理流程都比较简单,但是当我们以工程的角度去看的时候是远远不够的,不管考虑到系统的耦合性还是稳定性,例如,当业务需求是要将整个推理从联邦系统中抽出来单独部署的时候,当我们要查询不同模型不同版本预测的历史结果的时候,又或者需要满足高可用进行集群部署的时候等等。因此为了应对复杂的业务需求,对系统的各个组件,我们亦需在灵活与便捷之间寻找一个平衡点。由于在实际生产中有着复杂的业务需求以及不可预测的问题,因此需要我们根据实际情况完善架构,例如添加相应的服务治理功能,以及线程池的规划等等。


本文转载自公众号京东数科技术说(ID:JDDTechTalk)。


原文链接


只看这三点就够:快速了解联邦学习框架!


2020-11-26 14:002270

评论

发布
暂无评论
发现更多内容

Ubuntu安装教程【超多图】

坚果

Ubuntu20.04 11月日更

Vue进阶(幺柒捌):延伸阅读Sass、Scss、Less与Stylus编程特性

No Silver Bullet

CSS Vue 11月日更

架构实现训练营|第 8 课|作业

Frode

Android C++系列:JNI调用时的异常处理

轻口味

c++ android jni 11月日更

#低码系列#低代码来了,程序员会失业吗?

布鲁

低代码开发 低代码平台

聊聊开源精神

baiyutang

11月日更

ALB Ingress 发布!轻松应对云原生应用流量管理

阿里巴巴云原生

阿里云 容器 云原生 ALB

自动化测试之框架分类与思考

刘冉

软件测试 自动化测试

CRM User Status profile中Business Transaction字段的用途

汪子熙

CRM SAP 订单 11月日更

【LeetCode】检测大写字母Java题解

Albert

算法 LeetCode 11月日更

今天参加了“2021全球架构师峰会”...

后台技术汇

11月日更 全球架构师峰会

quarkus接触研究个人总结

weir威尔

架构 微服务架构 istio Service Mesh 服务网格 Quarkus

【Flutter 专题】09 图解页面小跳转 (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

如何用20分钟就能获得同款企业级全链路灰度能力?

阿里巴巴云原生

阿里云 微服务 云原生 MSE

Apache Pulsar与Apache Kafka在性能、应用、生态等全方位对比

五分钟学大数据

11月日更

Flink SQL 扩展维表 Keyby 的三种实现方式

大数据技术指南

11月日更

数据服务系统0到1落地实现方案

架构 数据 系统架构 数据平台 数据服务

【高并发】深度解析线程池中那些重要的顶层接口和抽象类

冰河

Java 并发编程 多线程 高并发 异步编程

外包学生管理系统设计文档

波波

「架构实战营」

测试策略实践之移动应用的测试策略与测试架构

刘冉

软件测试 软件自动化测试 移动测试

性能测试之问题与思考

刘冉

软件测试 性能测试 软件自动化测试

设计千万级学生管理系统的考试试卷存储方案

deng

架构实战营

了解一下OpenVINO的API

IT蜗壳-Tango

11月日更

Prometheus HTTP API 查询(七)管理员接口

耳东@Erdong

Prometheus PromQL HTTP API 11月日更

今年双 11,阿里业务 100% 上云,云原生有哪些技术亮点?

阿里巴巴云原生

阿里云 技术 云原生 双11

软件测试新趋势-2018

刘冉

软件测试 软件自动化测试

一个基于web服务器的PoW案例(二)

Regan Yue

区块链 11月日更 趣讲区块链

基于业务和平台理解数字营销概念

架构 CDP DSP DMP 数据服务

设计消息队列存储消息数据的MySQL表格

白开水又一杯

#架构实战营

【Promise 源码学习】第六篇 - 实现 Promise 的链式调用

Brave

源码 Promise 11月日更

架构实战营-模块四

瓜子葫芦侠

「架构实战营」

只看这三点就够:快速了解联邦学习框架!_容器_京东数科风险算法与技术_InfoQ精选文章