搜索内容

【期货开户】最低交易所手续费+1分钱,保证金可+0%广告
【外盘外汇开户】正规英国大国监管,行情稳定低点差广告

简单的java代码?腾讯大数据将开源高性能计算平台Angel,机器之心专访开发团队

沪深 0 199
生成海报
默念我很长
默念我很长 2021-03-16 11:44
阅读需:0

腾讯

深度学习是近年来人工智能技术发展的核心,随之而来的机器学习框架平台也层出不穷。直到现在,技术巨头都不好意思在没有主流机器学习平台的情况下向人们致意。例如,谷歌拥有TensorFlow,微软拥有CNTK,Facebook是Torch的坚定支持者,IBM在推动Spark,百度拥有开源的PaddlePaddle,亚马逊是MXNet的支持者。为了获得开发人员的支持并尽可能抓住开发机会,许多平台都选择了开源。

在去年12月18日举行的腾讯大数据技术峰会和KDD中国技术峰会上,腾讯大数据宣布推出用于机器学习的“第三代高性能计算平台” Angel,并表示将将于2017年推出。2016年开放源代码,请参阅报告“腾讯大数据将开源高性能计算平台Angel,这是《机器之心》开发团队的采访”。现在,大约2017年已经过去了,Angel 1. 0. 0终于在GitHub上完全发布了:

天使发布地址:源代码下载(.zip):源代码下载(tar.gz):

据报道,Angel是腾讯大数据部门发布的“第三代计算平台”。这是由腾讯大数据,香港科技大学和北京大学使用Java和Scala语言开发的一种高性能的面向分布式机器学习的机器学习。计算框架。它使用参数服务器体系结构来解决上一代框架的可伸缩性问题,支持数据并行和模型并行计算模式,并可以支持数十亿维的模型训练。

不仅如此,Angel还采用了多种行业最新技术和腾讯自主开发的技术,它们具有更高的性能和更易于使用的系统。自去年初在腾讯内部发布以来,Angel已用于准确的推荐服务,例如腾讯视频,腾讯社交广告和用户头像挖掘。 Angel还是腾讯下一代大数据的核心计算平台。

下面,机器的核心引用了Angel项目的README.md文件,该文件是其内部相关链接介绍的内容,并介绍了Angel的功能和体系结构设计。请访问原始项目以获取代码和最新开发。

Angel是基于参数服务器的概念开发的高性能分布式机器学习平台。它已根据腾讯的大量内部数据进行了反复调整,并具有广泛的适用性,稳定性和模型尺寸。值越高,优势越明显。考虑到行业的高可用性和学术界的创新,Angel是由腾讯和北京大学联合开发的。

Angel的核心设计理念围绕模型展开。它将高维大型模型合理地划分为多个参数服务器节点,并通过高效的模型更新接口和计算功能以及灵活的同步协议轻松实现各种高效的机器学习算法。

Angel是基于Java和Scala开发的,可以直接在社区中的Yarn上调度和运行,并且基于PS Service,支持Spark on Angel,并且将来将支持图形计算和深度学习框架集成。

欢迎对机器学习感兴趣的同事贡献代码并提交问题或请求请求。请先查看Angel项目贡献指南:

天使1. 0. 0个新功能

1. ParameterServer函数

基于Matrix / Vector模型(稀疏和密集格式)的自动分段和管理,支持对Model进行Push和Pull操作,可以自定义复杂的psFunc,提供多种同步控制机制(BSP / SSP / ASP)

2.开发和运营

语言支持:该系统基于Scala和Java开发,用户也可以自由选择。易于部署:它可以直接在Yarn社区版本中运行,并且还支持本地调试模式。数据分段:自动分段以读取训练数据,默认情况下兼容Hadoop FS接口的增量训练:训练期间自动检查点,并在加载模型后支持增量训练

3. PS服务

仅启动PSServer和PSAngent,为其他分布式计算平台提供PS服务。基于PS-Service,无需修改Spark核心代码,而直接开发Angel上的Spark算法。该模式无缝支持Breeze数值计算库

4.算法库

集成了多种机器学习算法的优化方法,例如Logistic回归,SVM,KMeans,LDA,MF,GBDT,包括ADMM,OWLQN,LBFGS和GD。支持多种损失函数和评估指标,包括L 1、 L2正则项

5.算法优化

LDA使用F + LDA算法来加快采样速度,同时使用流参数获取方法来减少网络参数获取的延迟。 GBDT使用两阶段树拆分算法将部分计算转移到PS,以减少网络传输。加快速度

天使介绍

1.天使的建筑设计

客户端:Angel的客户端,它为应用程序提供控制任务运行的功能。目前,它支持的控制界面主要包括:启动和停止Angel任务,加载和存储模型,启动特定的计算过程以及获取任务运行状态等。Master:Master的职责主要包括:原始计算数据和参数的分片和分发。矩阵;向Gaia(基于Yarn二次开发的资源调度系统)申请Worker和ParameterServer所需的计算资源;协调,管理和监视Worker和ParameterServer。参数服务器:参数服务器负责存储和更新参数。 Angel计算任务可以包含多个ParameterServer实例,并且整个模型以分布式方式存储在这些ParameterServer实例中,它可以支持比单个计算机大的模型。工人:工人负责特定的模型训练或结果预测。为了支持更大规模的训练数据,计算任务通常包含许多Worker实例,并且每个Worker实例都负责使用部分训练数据进行训练。一个Worker包含一个或多个任务,该任务是Angel计算单元。这种设计的原因是任务可以共享Worker的许多公共资源。

2.天使的系统框架

3.天使的设计理念

PS服务

Angel支持两种操作模式:ANGEL_PS和ANGEL_PS_WORKER

ANGEL_PS:PS服务模式。在这种模式下,Angel仅启动Master和PS,其他计算平台(例如Spark,Tensorflow)负责特定的计算。 Angel仅负责提供参数服务器功能。 ANGEL_PS_WORKER:启动Master,PS和Worker,Angel独立完成模型训练。

同步协议

支持多种同步协议:除了通用的BSP(批量同步并行)外,为了解决任务之间相互等待的问题,Angel还支持SSP(陈旧同步并行)和ASP(异步并行)

良好的可扩展性

psf(ps函数):为了满足各种参数服务器算法的特殊需求,Angel提取了参数获取和更新过程,并提供了psf函数功能。用户只需要继承Angel提供的psf函数接口并实现自己的参数获取/更新逻辑,然后他们就可以自定义所需参数服务器的接口,而无需修改Angel自己的代码。自定义数据格式:Angel支持Hadoop的InputFormat接口,该接口可以轻松实现自定义文件格式。自定义模型分割方法:默认情况下,Angel将模型(矩阵)划分为相等大小的矩形区域;用户还可以自定义分区类以实现自己的分段方法。

易于使用

自动拆分培训数据和模型:Angel根据配置的工作人员数量和任务自动拆分培训数据;同样,它还会根据模型大小和PS实例数量自动对模型进行分区。易于使用的编程界面:MLModel / PSModel / AngelClient

容错设计和稳定性

PS容错

PS容错采用检查点模式,即PS携带的参数分区以固定的间隔写入hdfs。如果一个PS实例被挂起,则主服务器将启动一个新的PS实例,而新启动的PS实例将加载由挂起的PS实例写入的最新检查点,然后重新启动服务。该方案的优点是简单,借助hdfs多副本灾难恢复,但缺点是不可避免地会丢失少量参数更新。

工人的容错力

工作者实例挂起后,主服务器将重新启动工作者实例。新启动的Worker实例从主服务器获取当前的迭代轮数和其他状态信息,从PS获取最新的模型参数,然后重新启动损坏的参数。迭代。

java简单记事本源代码_简单的java代码_java简单画板

主站容错

Master定期将任务状态写入hdfs。借助Yarn提供的App Master重试机制,当Angel's Master挂断时,Yarn将重新拉起Angel's Master,新的Master将加载状态信息,然后重新启动Start Worker和PS,然后重新启动从断点开始计算。

工作人员检测缓慢

师父会收集一些工人计算性能的指标。如果检测到某些工作人员的平均速度明显低于平均计算速度,则主服务器会将这些工作人员重新安排到其他计算机上,以防止这些工作人员减慢整个任务的速度。计算进度。

4. Spark on Angel

从1. 0版开始,Angel已添加PS-Service的功能。它不仅可以作为完整的PS框架运行,还可以作为PS-Service(一种没有参数服务器功能的分布式框架)运行。 ,引入PS功能,使它们运行更快,功能更强大。 Spark是此Service设计的第一位受益者。

作为流行的内存计算框架,Spark的核心概念是RDD,并且RDD的主要特征之一是它的不变性,以避免在分布式环境中出现复杂的并行问题。在数据分析领域,这种抽象是没有问题的。它可以最大程度地解决分布式问题,简化各种运营商的复杂性,并提供高性能的分布式数据处理和计算功能。

但是,在机器学习领域,RDD的弱点很快暴露出来。机器学习的核心是迭代和参数更新。 RDD凭借其逻辑上不可访问的内存计算功能,可以很好地解决迭代问题。但是,RDD的不变性不适合重复参数更新的需要。这种根本的不匹配导致了Spark的MLLib库。发展非常缓慢。 15年以来,一直没有实质性的创新和糟糕的性能,这给了许多其他产品机会。 Spark社区一直不愿面对和解决此问题。

Spark-On-Angel系统架构

现在,由于Angel出色的设计和平台,它提供了PS服务,Spark可以充分利用Angel的参数更新功能,并且只需最少的修改成本,Spark就能高速训练大型模型,并且编写更多优雅的机器学习代码,而不必走动。

有关更多详细信息,请参阅:

Angel快速入门指南

准备知识

本文档可帮助您快速开始编写在Angel-PS架构上运行的程序。在开始之前,您最好掌握以下功能:

将编写简单的Scala或Java代码来掌握向量,矩阵和张量的基本知识,了解它们的定义和基本计算。最好对机器学习算法有一定的了解

如果您还没有学习过机器学习算法,那没关系,您可以从本文档开始。在开始编程之前,让我们首先了解一些基本知识。

大多数机器学习算法可以抽象为矢量(Vector),矩阵(Martix)和张量(Tensor)运算。向量,矩阵和张量用于表示学习数据和算法模型。 Angel-PS基于参数服务器实现矩阵计算,将分布在多个PS服务器上的参数矩阵抽象为PSModel。您只需要完成PSModel的定义并执行其计算过程,即可在参数服务器上实现运行。简单的算法。

Angel-PS架构

简单的Angel-PS架构如下图所示

PS是存储矩阵参数并为计算节点提供矩阵参数提取和更新服务的多台机器。每个工作人员都是一个逻辑计算节点,一个工作人员可以运行一个或多个任务

通常以迭代方式训练机器学习算法。每个迭代工作者都从PS中获取最新参数,计算出更新后的值,然后将其推入PS中。

开始您的第一个Angel算法:LR

本示例将以最简单的Logistic回归算法为例,以指导您完成第一个Angel算法。可以在example.quickStart中找到该代码。

逻辑回归算法是机器学习中最简单的算法。可以将其抽象为以下步骤:

1.一个维数为1×N的矩阵,即N维向量,表示为w

2.使用梯度下降法训练LR模型,每次迭代

任务从PS提取最新模型w,计算变化梯度△w,然后将△w推送到PS

要实现此算法,我们需要执行以下3个步骤:

1.定义模型(LRModel)

实现LRModel类继承MLModel,通过addPSModel向LRModel添加一个N维PSModel,在setSavePath方法中简单的java代码,设置操作完成后的LR模型的保存路径。

N的值和保存路径可以通过conf配置。

2.定义任务(TrainTask)

在任务中完成了Angel模型的训练,因此我们需要定义一个LRTrainTask来完成LR模型的训练过程。

LRTrainTask需要继承TrainTask类并实现以下两种方法:

分析数据

在模型开始训练之前,每行输入的文本都被解析为一条训练数据。解析方法是在解析方法中实现的。在这里,我们使用DataParser解析虚拟格式的数据。

重写def parse(键:LongWritable,值:文本):LabelledData = {DataParser.parseVector(键,值,feaNum,“虚拟”,negY = true))}

可以通过任务的dataBlock访问预处理的数据。

培训

Angel将自动执行TrainTask子类的train方法。我们使用LRTrainTask的训练方法完成了模型训练过程。

在这个简单的LR算法示例中,我们

首先实例化myLRModel模型对象模型,然后开始迭代计算。每次迭代

java简单画板_简单的java代码_java简单记事本源代码

任务从PS提取模型权重训练数据以计算梯度grad,将grad推入PS,PS上的权重更新将自动完成。按下grad后,需要clock()和incIteration()。

覆盖def训练(ctx:TaskContext):单位= {//一个简单的逻辑回归模型val model =新的LRModel(ctx,conf)//({xx.getIteration

)迭代地应用批量梯度下降LR

3.定义运行器(MLRunner)

之前,我们定义了LR模型并实施了其训练过程。现在,您还需要实现Runner类,以将训练该模型的任务提交给集群。

定义myLRRunner类以继承MLRunner,并在train方法中提交myLRModel模型类和myLRTrainTak训练类。

class LRRunner扩展了MLRunner {……覆盖def train(conf:Configuration):单位= {train(conf,myLRModel(conf),classOf [myLRTrainTask])}}

运行任务

您可以通过以下命令将刚刚完成的算法任务提交给Yarn集群

./ bin /天使提交\ --action.type火车\ --angel.app.submit.class com.tencent.angel.example.quickStart.myLRRunner \ --angel.train.data.path $ input_path \ --angel.save.model.path $ model_path \ --ml.epoch.num 10 \ --ml.feature.num 10000 \ --ml.data.type dummy \ --ml.learn.rate 0. 001 \ --angel.workergroup.number 3 \ --angel.worker.memory.mb 8000 \ --angel.worker.task.number 3 \ --angel.ps.number 1 \ --angel.ps.memory。 mb 5000 \ --angel.job.name myLR

提交完成后,如果您对纱线不熟悉,可以按照本指南“查看纱线上的作业”进行操作:

好。至此,您已经完成了一个简单的Angel作业。是否要编写更复杂的机器学习算法?请参阅完整的“ Angel编程指南”,欢迎来到Angel的世界:

您也可以在此处查看Spark on Angel快速入门:

编程手册

Angel编程手册:在Angel编程手册上:

设计

核心类的描述:手册:

算法

以下是Angel支持的几种算法。有关详细信息,请参考原始项目:

Angel Optimizer上的Logistic回归(Logistic回归)矩阵分解(矩阵分解)支持向量机(SVM)K均值(KMeans)GBDTLDASpark

部署

源代码下载和编译

1.编译环境依赖性

Jdk> = 1. 8Maven> = 3. 0. 5Protobuf> = 2. 5. 0

2.源下载

git clone

3.编译

输入源代码的根目录并执行命令:

mvn清洁软件包-Dmaven.test.skip = true

编译完成后,将在源根目录dist / target目录中生成一个发行包:angel- 1. 0. 0-bin.zip

4.发行包

解压缩发行版软件包后,根目录下有四个子目录:

bin:Angel任务提交脚本conf:系统配置文件数据:简单测试数据库:Angel jar包和从属jar包

本地运行

1.操作环境准备

Hadoop> = 2. 2. 0Java 1. 8版本的天使发布包angel- 1. 0. 0-bin.zip

配置HADOOP_HOME和JAVA_HOME环境变量,解压缩Angel发行包,然后可以在LOCAL模式下运行Angel任务。

2.本地运行示例

解压缩发行包之后,根目录中有一个bin目录,与提交任务相关的脚本位于此目录中。例如,运行一个简单的逻辑回归示例:

./ angel-example com.tencent.angel.example.SgdLRLocalExample

3.纱线操作:

4.系统配置:

论文

目前,腾讯尚未公开发布相关论文,请关注该项目以查看更新。





免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,读者仅作参考,并自行核实相关内容。如有冒犯原创,可以提供相关证明联系本站进行删除处理

评论
  • 消灭零回复
广告合作方 广告申请

最新评论