阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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

  • 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:001996

评论

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

内存数据库的分布式架构提升之道

鲸品堂

数据库

Python量化数据仓库搭建系列2:Python操作数据库

恒生LIGHT云社区

Python 量化

测试不趁早,“持续测试”搞不好

SoFlu软件机器人

DevOps 敏捷开发 自动化测试

前端开发之JavaScript优化

@零度

JavaScript 大前端

Rainbond通过插件整合SkyWalking,实现APM即插即用

北京好雨科技有限公司

Kubernetes 云原生 全链路追踪

react源码解析3.react源码架构

buchila11

源码 React React Hooks react源码

如何在P4中管理Unreal Engine 代码

龙智—DevSecOps解决方案

版本控制 游戏开发 版本管理 游戏引擎 虚幻引擎

百度商业大规模高性能全息日志检索技术揭秘

百度Geek说

软件架构

react源码解析4.源码目录结构和调试

buchila11

React React Hooks

大批量更新数据mysql批量更新的四种方法

大数据技术指南

11月日更

一些常用的hive sql函数

编程江湖

大数据 hive Hive SQL

并发编程中,你加的锁未必安全

华为云开发者联盟

线程 高并发 并发 线程安全

万字讲解WiFi为何物

华为云开发者联盟

wifi 物联网 无线通信 传输 无线

Google I/O 2021 What's new in Android Machine Learning

CatTalk

机器学习 tensorflow android Google

Java开发中常用的消息队列工具 ActiveMQ

编程江湖

Activemq Java 开发

大厂算法面试之leetcode精讲10.递归&分治

全栈潇晨

LeetCode 算法面试

PackML从会到不会——状态机(1)

陈的错题集

标准化 PackML

数仓开发详细剖析

五分钟学大数据

11月日更

一文讲透一致性哈希的原理和实现

万俊峰Kevin

微服务 高并发 哈希算法 go-zero Go 语言

博文推荐|深入解析 Apache Pulsar 中的事务

Apache Pulsar

大数据 架构 分布式 云原生 Apache Pulsar

爱奇艺TFServing负载均衡问题研究及改进实践

爱奇艺技术产品团队

移动计算云分布式数据缓存服务,实现快速可靠的跨区域多活复制

华为云开发者联盟

可用性 云数据缓存 跨区域多活 无冲突复制数据类型CRDT

java开发之DOS命令学习及运行环境配置安装

@零度

java开发学习 DOS命令学习

服务API版本控制设计与实践

vivo互联网技术

API 服务器端开发 客户端开发 迭代

Elasticsearch云生态下的开源共生之路

大咖说

云计算 elasticsearch 开源

dart系列之:时间你慢点走,我要在dart中抓住你

程序那些事

flutter 架构 dart 程序那些事 11月日更

Linux学习方法《Linux一学就会》Centos8软件包的管理与安装

侠盗安全

Linux linux运维 运维工程师 云计算架构师

如何使用 Java 代码给图片增加倒影效果

Jerry Wang

Java API 图片处理 11月日更 Java图片

直播预告|数以智用——大数据应用探索与实践

智联卓聘

大数据 数据管理 线上沙龙

Perforce用户文章转载:每个游戏从业者都应该学学P4

龙智—DevSecOps解决方案

版本控制 游戏开发 版本管理 perforce 游戏厂商

处理可能超时的异步操作

编程江湖

大前端

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