查看原文
其他

一文彻底搞懂Angel机器学习平台

一尘 跳动的数据 2023-09-29


概述


先介绍下Angel的源起


分布式机器学习了解如下图:




机器学习的目标



分布式的三种经典范式



Spark机器学习的瓶颈



  1. Driver成为参数汇总的单点瓶颈, 难以支撑大规模模型及数据

  2. 十亿级维度的模型训练, 实际应用中降维处理

  3.  Executor之间相互等待, 整体效率不高




1. Angel设计思想理念

Angel的整体设计理念,是简约而不简单,做一个灵活而强大的参数服务器,并在此之上,提供多种机器学习算法,和PS服务,扩展为一个分布式机器学习平台。

因此,在开发之时,Angel从如下5个方向,对整体进行了改进和设计,并在它们之间进行了平衡。包括:

  1. 易用性

  2. 灵活性

  3. 性能

  4. 可扩展性

  5. 稳定性

另外,Angel设计之初,并没有特地为深度学习量身定做,但随着深度学习日趋流行,而PS模式,也是深度学习实现多机多卡的方向之一,在最新的3.0版本支持了PyTorch。


易用性

  • 训练数据和模型自动切割:Angel根据配置的worker和task数量,自动对训练数据进行切分;同样,也会根据模型大小和PS实例数量,对模型实现自动分区。

  • 易用的编程接口:MLModel/PSModel/AngelClient


灵活性

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的功能。


性能

   同步协议

    • 支持多种同步协议:除了通用的BSP(Bulk Synchronous Parallel)外,为了解决task之间互相等待的问题,Angel还支持SSP(Stale Synchronous Parallel)ASP(Asynchronous Parallel)


    扩展性

    • psFunc:为了满足各类算法对参数服务器的特殊需求,Angel将参数获取和更新过程进行了抽象,提供了psf函数功能。用户只需要继承Angel提供的psf函数接口,并实现自己的参数获取/更新逻辑,就可以在不修改Angel自身代码的情况下定制自己想要的参数服务器的接口。

    • 自定义数据格式:Angel支持Hadoop的InputFormat接口,可以方便的实现自定义文件格式。

    • 自定义模型切分方式:默认情况下,Angel将模型(矩阵)切分成大小相等的矩形区域;用户也可以自定义分区类来实现自己的切分方式。


    稳定

    Angel在稳定性上,做了大量的工作,保证在机器学习过程中,单个Worker和PS挂掉,都不会影响整个作业的进度,而且能最快的找到备用的机器,快速启动,加载模型或者数据,继续训练过程。

    • PS容错

      PS容错采用了checkpoint的模式,也就是每隔一段时间将PS承载的参数分区写到hdfs上去。如果一个PS实例挂掉,Master会新启动一个PS实例,新启动的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拖慢整个任务的计算进度。


    2. Angel 参数服务器


    PS(参数服务器)是一个非常通用的架构。在大数据分析计算过程中,经常需要存储交换大量的参数。现在的机器学习应用基本都会面临模型数据大训练数据大的难题,那么参数服务器是实现大规模分布式机器学习的一个利器了。Angel就是围绕这样的思想开始做Angel。您可以使用ParameterServer,Angel支持PS服务工作模式:启动Angel应用时,只启动Angel PS和Angel Master,Angel PS负责参数的存储和交换,其他系统负责计算,计算交给其它系统,比如Spark等。


    Angel抽象了两个接口,AngelClient和MatrixClient。AngelClient负责启动Angel PS,MatrixClient负责与Angel PS交互。


    上图是一个PS基础的架构图




    上图是一个PS 与spark的结合


    李沐发表过一篇参数服务器http://www.cs.cmu.edu/~feixia/files/ps.pdf


    3.Angel计算平台特性



    1.高维稀疏特性: 适合大规模、稀疏的动态网络

    2.灵活性: 解决异构网络算法需求、支持多种算法类型

    3.生态兼容性: 兼备大数据生态和深度学习生态,将二者有机结合

    4.高可靠性: 稳定运行于共享集群与云环境


    4. Angel 架构设计



    Angel的整体设计比较简约,层次鲜明,容易上手,没有过多复杂的设计,关注模型和机器学习相关特性,追求高维度模型下的最佳性能。它的架构设计,从整体可以分为3大模块:

    1. Parameter Server层:提供通用的参数服务器服务,负责模型的分布存储,通讯同步和协调计算,并通过PSAgent提供PS Service

    1. Worker层:基于Angel自身模型设计的分布式运行节点,自动读取并划分数据,局部训练出模型增量,通过PS Client和PS Server通信,完成模型训练和预测。一个Worker包含一个或者多个Task,Task是Angel计算单元,这样设计的原因是可以让Task共享Worker的许多公共资源。

    1. Model层:这是一层虚拟抽象层,并非真实存在的物理层。关于Model的Push和Pull,各种异步控制,模型分区路由,自定义函数……是连通Worker和PSServer的桥梁。

    除了这3大模块,还有2个很重要的类,在图上没有显示,但是值得关注,它们是:

    1. Client:Angel任务运行的发起者

    • 启动和停止PSServer

    • 启动和停止Angel的Worker

    • 加载和存储模型

    • 启动具体计算过程

    • 获取任务运行状态

    1. Master:Angel任务运行的守护者

    • 原始计算数据以及参数矩阵的分片和分发

    • 向Gaia申请Worker和ParameterServer所需的计算资源

    • 协调,管理和监控Worker以及PSServer

    通过如上的设计,Angel的整体架构,有着相对良好的可扩展性

    • PSServer层:通过PS-Service,提供灵活的多框架PS支持

    • Model层:提供PS必备的功能,并支持对性能进行针对性优化

    • Worker层:能基于Angel自主API,进行算法开发和创新的需求

    因此,分布式计算工程师,可以对核心层进行各种优化;而算法工程师和数据科学家,则可以充分复用这些成果,致力于各种学术界算法技巧的实现,达到最佳的性能和最好的准确率。



    5.Angle系统架构



    6.Angel对算法的支持

    Ange以参数服务器为核心,大规模分布式机器学习平台,对算法场景的应用有着很对的沉淀,在腾讯内部有着长期的实践应用,特别是推荐场景的算法,特别的丰富,在3.0也已经支持了图计算的功能及深度学习结合的完善。下面介绍都有哪些算法支持。



    上图为Angel算法支持,算法场景丰富,在算法优化上都为腾讯内部实践而来


    Angel支持的图算法分别分成五类进行设计如下图

    三角结构



    连通分类



    节点测度



    图表示学习




    图神经网络



    7.Angel Serving

    Angel Serving是一个独立的模型服务系统,用于机器/深度学习模型,设计灵活、高性能。


    系统架构如下图



    下面是模型启动部署命令

    $SERVING_HOME/bin/serving-submit \ --port 8500 \ --rest_api_port 8501 \ --model_base_path /path/to/model \ --model_name lr \ --model_platform angel \ --enable_metric_summary true

    提供一个Restful Api 服务 ,这样部署方式,适用于使用docker环境部署



    8.Angel MLCore

    一个独立的机器学习套件,可以很容易地与Angel ps集成,

    mlcore的核心是计算图,它执行前向和后向计算,并自动计算梯度。variable和optimizer的抽象使得mlcore可以在任何地方运行,包括单节点、angel、Spark等等。以下是mlcore的体系结构:




    • pull parameters from local or parameter server (PS)

    • perform the forward calculation

    • perform the backward calculation to calculate gradient

    • push gradient to local or PS

    • finally, update parameter in local or PS



    9.Angel math2

    为稀疏计算优化的数学库



    10.Angel 腾讯应用场景


    上图是在Angel 在腾讯内部基于图的应用场景,Angel 在腾讯内部有这非常广泛的应用,比如广告,微信支付等等。



    相关文章:

    1. Angel基于参数服务器的规模分布式机器学习平台

    2.Angel分布式机器学习平台—LR算法示例

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存