热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【重磅】新一代Angel正式开源,性能超越XGBoost和Spark

经过漫长的准备和打磨,新一代的Angel终于开源了!新一代的Angel由腾讯和北京大学联合开发,兼顾业界的高可用性和学术界的创新性,欢迎分布式架构师,算法工程师和数据科学家一起深入

经过漫长的准备和打磨,新一代的Angel终于开源了!新一代的Angel由腾讯和北京大学联合开发,兼顾业界的高可用性和学术界的创新性,欢迎分布式架构师算法工程师数据科学家一起深入使用和协同开发,激发机器学习领域更多的创新应用和良好生态。

Github:Tencent/angel 欢迎大家Star,Fork和提PR。

作为一个高维度的分布式机器学习框架,Angel的第一次对外亮相是在去年的五月(面向高维度的机器学习计算框架-Angel),并在去年12月份KDDChina大会上(腾讯大数据第三代高性能计算平台-Angel),宣布将全面进行开源。

为了迎接对外开源,团队成员对Angel进行了多次重构和升级,可谓是淬火重炼。在此期间,Angel的架构反复改进,性能持续提升。开源前夕,它的性能已经超越了XGBoost和Spark。新一代的Angel,性能更快,功能更强,开发更方便。其改进主要集中在三方面:

《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》

生态性

引入PSAgent,支持PS-Service,便于接入其它机器学习框架。

函数性

融合函数式编程特性,自定义psFunc,利于开发复杂算法。

灵活性

支持Spark-on-Angel,Spark无需修改内核,运行于PS模式之上。

本文将从架构性能两方面,对新一代Angel,做一个初步的介绍,让大家了解它的改进,请移步Github(Tencent/angel)。

架构升级

1. PSService

在新一代的Angel开发中,我们对系统进行了一次重要的升级,引入了PSAgent,对PSServer的服务端进行隔离,从而提供了PS-Service的功能。升级后,系统的架构设计如下:

《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》

引入PSAgent后,PSClient不再直接和PSServer打交道了,而是通过PSAgent来沟通。作为新加的中间层PSAnget,有如下几个特性:

  • 对外屏蔽了PSServer中的模型分片,路由以及模型重组等复杂细节,提供了封装好的模型操作接口

  • 内置了Hogwild!机制,包含模型缓存和模型预取等性能优化

  • 提供了模型缓存(Cache)更新合并的功能,大大降低网络通信开销

PSAgent的引入,解耦了PSServer和Worker,使得Angel具备了PSService的能力。Angel的PSServer,不再只服务于Angel的Client,其它机器学习框架,只要实现AngelPSClient接口了,都能可以接入Angel。

PSService的抽象,为Angel接入Spark和深度学习框架,从架构的层面上提供了便利

2. psFunc

标准Parameter Server功能之一,就是要提供Model的拉取(pull/get)推送(push/update)。 很多早期PS,拿HBase,Redis等分布式存储系统,简单改改,进行模型的更新和获取,就搭建了一个简单的PS系统。

但实际应用中,算法对PSServer上的参数获取和更新,却远远不只这么简单,尤其是当复杂的算法需要实施一些特定的优化的时候,简单的PS系统,就完全不能应对这些需求了。

举个例子,有时候某些算法,要得到矩阵模型中某一行的最大值,如果PS系统,只有基本的Pull接口,那么PSClient,就只能先将该行的所有列,都从参数服务器上拉取回来,然后在Worker上计算得到最大值,这样会产生很多的网络通信开销,对性能会有影响。

而如果我们有一个自定义函数,每个PSServer在远程先计算出n个局部最大值,再交换确认全局最大值,这时只要返回1个数值就可以了,这样的方式,计算开销接近,但通信开销将大大降低。

为了解决类似的问题,Angel引入和实现psFunc的概念,对远程模型的获取和更新的流程进行了封装和抽象。它也是一种用户自定义函数(UDF),但都和PS操作密切相关的,因此被成为psFunc,简称psf,整体架构如下:

《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》

随着psFunc的引入,模型的计算,也会发生在PSServer端。PSServer也将有一定的模型计算职责,而不是单纯的模型存储功能。合理的设计psFunc,将大大的加速算法的运行。

3. Spark on Angel

作为目前非常流行的分布式内存计算框架,Spark 的核心概念是RDD,而RDD的关键特性之一,是其不可变性,它可以规避分布式环境下复杂的各种奇奇怪怪的并行问题,快速开发各种分布式数据处理算法。然而在机器学习的时代,这个设计反而制约了Spark的发展。因为机器学习的核心是迭代和参数更新,而RDD的不可变性,不适合参数反复多次更新的需求,因此诸多Spark机器学习算法的实现,非常的曲折和不直观。

现在,基于Angel提供的PSServicepsFunc,Spark可以充分利用Angel的PS,用最小的修改代价,具备高速训练大模型的能力,写出更加优雅的机器学习算法代码。

Spark on Angel实现的基本架构设计如下:

《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》

可以看出,该实现非常灵活,它对Spark没有任何侵入式的修改,是一种插件式设计,因此完全兼容社区Spark,对原生Spark的程序不会有任何影响。它的基本执行流程如下

  1. 启动SparkSession

  2. 初始化PSContext,启动Angel的PSServer

  3. 创建PSModelPool, 申请到PSVector

  4. 核心调用:在RDD的运算中,直接调用PSVector,进行模型更新。这将使得真正运行的Task,调用AngelPSClient,对远程PSServer进行操作。

  5. 终止PSContext

  6. 停止SparkSession

关于Spark on Angel的具体开发,可参考:Github《Spark on Angel编程手册》((Tencent/angel) )。在线上,基于真实的数据,我们对Spark on Angel和Spark的做了性能对比测试,结果如下:

《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》

显而易见,Spark on Angel能轻松获得30%或更多的加速比,越复杂的算法和模型,性能提高的比例越大。虽然PSServer会耗费了额外的资源,但是比起算法编写的便捷性能的提升,这是划算的。对于Spark的老用户,这是低成本切入Angel的一个途径,也是算法工程师基于Spark实现高难度算法的优雅姿势。

Spark on Angel是Angel生态圈的第一个成员,后续会有更多基于PS-Service的框架接入,包括深度学习。

性能优势

新版本的Angel,添加了诸多新功能,最终的目的,就是让算法工程师能更加从容地进行算法优化,融入更多的算法的Trick,让算法的性能,得到了一个飞跃的提升。

相关性能的细节数据,在Github的各个算法介绍文档都可以看到,欢迎点击文末“阅读原文”移步GitHub。

1.GBDT

众所周知,XGBoost的强项之一,就是GBDT算法,性能飞快,使用简单,在众多算法比赛中,是选手们的最爱。尽管如此,Angel的GBDT算法,却还是超越了它,这是一个非常不错的性能背书。

  • 性能比较

《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》

《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》

  • 数据:腾讯内部某性别预测数据集,3.3×10^5 特征,1.2×10^8 样本

  • 详细文档:GBDT on Angel(Tencent/angel)

2.LDA

众所周知,LDA是一个非常消耗资源的主题模型算法,新一代的Angel,在LDA上的性能,不但超越了Spark,也已经超越了之前开源过的Petuum。(由于Petuum已经不开源多时,所以比对数据,这里就不再贴出了)

《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》

  • 数据:PubMED

  • 详细文档: LDA on Angel(Tencent/angel)

3.GD-LR

LR是广告推荐中广泛应用的一个算法,Angel分别提供了利用Gradient Descent、ADMM两种优化方法计算的LR算法。这两种算法,无论是耗费的资源,还是性能、收敛速度,都远比原生的Spark实现优越。

  • GD-LR

《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》

  • 数据: 腾讯内部某推荐数据,5×10^7 特征,8×10^7 样本

  • 详细文档: LR on Angel(Tencent/angel)

  • ADMM-LR

《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》
《【重磅】新一代Angel正式开源,性能超越XGBoost和Spark》

  • 数据:腾讯内部某推荐数据,5千万特征,1亿样本

展望

一把好的宝剑,经过千锤百炼,讲究的是刚柔并济,不但削铁如泥,也要有极好的韧性,百折不断。同样的,一个好的开源项目,也是如此。它不但需要有强大的功能和性能,也需要有良好的适配性,能形成好的生态。

超大样本和超高维度的机器学习,在腾讯的多个真实生产环境中,有着非常普遍的应用场景,这是Angel的切入点,但不是终点和约束,在未来,Angel还将深入到图计算和深度学习领域,借助开源的力量,做出更多的探索,无论是Wider还是Deeper的模型,Angel都希望能像天使一样,在多个机器学习框架上为它们提速,帮助各个业务提升效果,为腾讯AI的发展插上翅膀。

更多内容欢迎关注“腾讯大数据”(微信号:tencentbigdata)公众号。

腾讯大数据平台关注大数据平台构建、数据挖掘、数据应用等。信息共享,促进行业交流。通过多年产品建设,腾讯大数据已成功为开发者提供腾讯移动分析(MTA)、腾讯移动推送(信鸽)、腾讯推荐等数据产品,同时与腾讯云合作,推出大数据处理套件(数智),对外提供了可靠、安全、易用的大数据处理能力。


推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
author-avatar
徘徊在堕落边缘的魔鬼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有