sona:Spark on Angel大规模分布式机器学习平台介绍

本文介绍了Angel,一个大规模分布式机器学习平台,它支持Spark集成,提供了灵活的参数服务器支持和多框架兼容。Angel具备模型容错、自定义数据格式和多种同步协议,适用于多种算法如SVM、LR、KMeans等。它还提供了易用的编程接口,如MLModel、PSModel,以及自定义参数服务器接口psFunc。
摘要由CSDN通过智能技术生成
Angel是一个基于参数服务器(Parameter Server)开发的高性能分布式机器学习平台,它基于腾讯内部的海量数据进行了反复的调优。
Angel的核心设计理念围绕模型,将高维度的大模型切分到多个参数服务器节点,并通过高效的模型更新接口和运算函数,以及灵活的同步协议,轻松实现各种高效的机器学习算法。
Angel基于Java和scala开发,能在Yarn上直接调度运行,并基于PS Service,支持Spark on Angel,集成了部分图计算和深度学习算法。
Angel-PS实现了基于参数服务器的矩阵计算,将分布在多台PS Server上的参数矩阵抽象为PSModel,只需要完成PSModel的定义、实现其计算过程,就可以实现一个运行在参数服务器上的简单算法。
简单的angel-ps架构如下图所示
  • PS是存储矩阵参数的多台机器,向计算节点提供矩阵参数的拉取、更新服务
  • 每个worker是一个逻辑计算节点,一个worker可以运行一或多个task
机器学习的算法,一般以迭代的方式训练,每次迭代worker从PS拉取最新的参数,计算一个更新值,推送给PS
Angel整体架构
angel的架构分为三大模块:
1、 Parameter Server层:提供通用的参数服务器服务,负责模型的分布存储,通讯同步和协调计算,并通过PSAgent提供PS Service
2、worker层:基于Angel自身模型设计的分布式运行节点,自动读取并划分数据,局部训练出模型增量,通过PS Client和PS Server通信,完成模型训练和预测。一个worker包含一个或多个Task,Task是Angel计算单元,这样设计的原因是可以让Task共享Worker的许多公共资源。
3、Model层,这是一层虚拟抽象层,并非真实存在的物理层。关于Model的Push和Pull,各种异步控制,模型分区路由,自定义函数。。。是联通Worker和PSServer的桥梁。
除了这三个模块,还有2个很重要的类,
1、Client:Angel任务运行的发起者
  • 启动和停止PSServer
  • 启动和停止Angel的Worker
  • 加载和存储模型
  • 启动具体计算过程
  • 获取任务运行状态
2、Master:Angel任务运行的守护者
  • 原始计算数据以及参数矩阵的分片和分发
  • 向Gaia申请Worker和ParameterServer所需的计算资源
  • 协调,管理和监控Worker以及PSServer
 
通过上述设计,Angel实现了可扩展架构
  • PSServer层:通过PS-Service,提供灵活的多框架PS支持
  • Model层:提供PS必备的功能,并支持对性能进行针对性优化
  • Worker层:能基于Angel自主API,进行算法开发和创新的需求
 
Angel代码结构
1、 Angel-Core:核心层
Angel的核心层,包含如下组件:
  • PSServer
  • PSAgent
  • Worker
  • AngelClient
  • 网络:RPC & RDMA
  • 存储:Memory & Disk
2、 Angel-ML:机器学习层
Angel是面向机器学习的,所以机器学习相关的元素也加入到core层,只是在一个单独的目录下
  • Matrix
  • Vector
  • Feature
  • Optimizer
  • Objective
  • Metric
  • psFunc
要注意的是,在Core包中的ML层,大都是底层的基础接口,而相关的扩展和实现,还是在具体的算法层
3、 Angel-client:接口层
基于Angel本身的接口,开发了多个算法:
  • SVM 
  • LR (各种优化方法)
  • KMeans
  • GBDT
  • LDA
  • MF(矩阵分解)
  • FM(因式分解机)
3.0版本又增加了很多算法,后续熟练后再补充
Angel的算法开发思路比较直接,都是围绕着PS上的模型进行,不停更新。算法的实现技巧也比较灵活,追求最优的性能
整体上,通过这4个层级的代码,用户可以全方位的积木式进行代码的设计,开发出高效的机器学习代码
Angel在设计上,考虑到现有的机器学习框架众多的问题,提供了2种模式。Angel支持两种运行模式: ANGEL_PS_WORKER和ANGEL_PS_SERVICE。
通过这2种方式结合Angel本身的worker模式,追求最大化的性能优势,主打速度。而PS-Service模式,主打对接,可以接入Spark,TensorFlow,Torch等平台,主打生态,从而实现最大程度的灵活性
  • Angel_PS_Worker:启动master,PS和Worker,Angel独立完成模型的训练
  • Angel_PS_service:PS Service模式,在这种模式下,Angel只启动Master和PS,具体的计算交给其他计算平台(如Spark,TensorFlow)负责,Angel只负责提供Parameter Server的功能
同步协议:
  • Angel支持多种同步协议:除了通用的BSP(Bulk Synchronous Parallel)外,为了解决task之间互相等待的问题,Angel还支持SSP(Stale Synchronous Parallel)和ASP(Asynchronous Parallel)
易用性:
  • 训练数据和模型自动切割:Angel根据配置的worker和task数量,自动对训练数据进行切分,同样,也会根据模型大小和PS实例数量,对模型实现自动分区。
  • 易用的编程接口:MLModel、PSModel、AngelClient
扩展性:
  • psFunc:为了满足各类算法对参数服务器的特殊需求,Angel将参数获取和更新过程进行了抽象,提供了psf函数功能。用户只需要继承Angel提供的psf函数接口,并实现自己的参数获取/更新逻辑,就可以在不修改Angel自身代码的情况下定制自己想要的参数服务器的接口。
  • 自定义数据格式:Angel支持Hadoop的InputFormat接口,可以方便的实现自定义文件格式。
  • 自定义模型切分方式:默认情况下, Angel将模型(矩阵)切分成大小相等的矩形区域;用户也可以自定义分区类来实现自己的切分方式
稳定性:
Angel保证在机器学习过程中,单个worker和PS挂掉,都不会影响整个作业的进度,而且能最快的找到备用的机器,快速启动,加载模型或者数据,继续训练过程。
  • PS容错:PS容错采用了checkpoint模式,也就是每隔一段时间将PS承载的参数分区写到hdfs上。如果一个PS实例挂掉,Master会新启动一个PS实例,新启动的实例会加载挂掉PS实例写的最近的一个checkpoint,然后重新开始服务。这种方案的优点是简单,借助了hdfs多副本容灾,缺点是不可避免的会丢失少量参数更新
  • worker容错:一个worker实例挂掉后,Master会重新启动一个Worker实例,新启动的Worker实例从Master处获取当前迭代轮数等状态信息,从PS处获取最新模型参数,然后重新开始被断掉的迭代。
  • Master容错:Master定期将任务状态写入hdfs,借助于Yarn提供的App Master 重试机制,当Angel的Master挂掉后,Yarn会重新拉起一个Angel的master,新的Master加载状态信息,然后重新启动Worker和PS,从断点出发重新开始计算。
  • 慢worker检测:Master将会收集一些Worker计算性能的一些指标,如果检测到有一些worker计算明显慢于平均计算速度,Master会将这些worker重新调度到其他的机器上,避免这些worker拖慢整个任务的计算进度。
 
Angel拥有两种不同的运行模式: ANGEL_PS_WORKER和ANGEL_PS
在angel_ps_worker模式下,angel可以独立完成模型的训练和预测等计算任务;在angel_ps模式下,angel启动ps服务,为其他的计算平台提供参数的存储和交换服务。目前基于angel_ps运行模式的是spark on angel,而且比较好的解决了Spark ML的单点瓶颈,能够支持很大规模的模型训练
Spark on Angel
 
Angel从1.0开始,就加入了PS-Service的特性,不仅仅可以作为一个完整的PS框架运行,也可以作为一个PS-Service,为不具备参数服务器能力的分布式框架,引入PS能力。Spark就是第一个尝试。spark on angel可以很方便的利用spark在数据分析方面的优势,在一个平台中完成数据预处理和模型训练两阶段的计算任务。
sona架构设计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值