CN113342313B - 一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法 - Google Patents

一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法 Download PDF

Info

Publication number
CN113342313B
CN113342313B CN202110560289.2A CN202110560289A CN113342313B CN 113342313 B CN113342313 B CN 113342313B CN 202110560289 A CN202110560289 A CN 202110560289A CN 113342313 B CN113342313 B CN 113342313B
Authority
CN
China
Prior art keywords
server
node
model parameters
working
parameters
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110560289.2A
Other languages
English (en)
Other versions
CN113342313A (zh
Inventor
李中正
王冬霞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
University of Shanghai for Science and Technology
Original Assignee
University of Shanghai for Science and Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by University of Shanghai for Science and Technology filed Critical University of Shanghai for Science and Technology
Priority to CN202110560289.2A priority Critical patent/CN113342313B/zh
Publication of CN113342313A publication Critical patent/CN113342313A/zh
Application granted granted Critical
Publication of CN113342313B publication Critical patent/CN113342313B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明公开了一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法,结合Spark和参数服务器的特征,首先设置和分配Spark和参数服务器启动资源,然后启动服务器应用程序和Spark应用程序来执行相关操作。在服务器应用程序中,首先初始化执行环境和相关参数,然后接收来自Spark应用程序中Executor计算的梯度信息来更新模型参数。本发明通过引入参数服务器的方式,将线性分类模型参数划分到不同的服务节点中,并通过设置时钟的方式实现异步传输,服务节点只需获取部分工作节点的梯度信息即可对模型参数进行更新。本发明通过添加服务器节点来减轻Spark中Driver节点的计算负载,并通过异步传输方式来降低集群中慢节点对算法性能的影响。

Description

一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法
技术领域
本发明提出了一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法,涉及机器学习、分布式计算,属于计算机技术领域。
背景技术
Spark是基于内存计算的开源集群计算***(Zaharia M,Chowdhury M,FranklinM J,et al.Spark:Cluster computing with working Sets[C]//Usenix Conference onHot Topics in Cloud Computing.2010),由Scala语言开发完成,与Hadoop一样,也是基于MapReduce编程模型实现分布式计算,但是Spark利用内存作为缓存来实现不同阶段的数据共享,不必重复读取HDFS,所以Spark相比于Hadoop能更快速地进行大数据分析。
近年来,Spark已形成了以Spark Core为核心的生态圈。从HDFS或者HBase等持久层读取数据,以YARN、Mesos或者自身携带的Standalone作为资源管理器调度Job任务。从物理部署层面来说它分为两类节点:Master节点和Worker节点。Master节点主要负责集群的中心化管理,将Spark任务分配到Worker节点,维护Worker节点以及管理Spark应用的状态,Worker节点则负责具体的任务。从运行角度来说,执行进程可分为Driver驱动器进程和Executor执行器进程。在YARN作为资源管理器的情况下,Driver进程负责任务的调度工作和收集工作节点处理的结果并执行处理逻辑,工作节点则执行Executor中的Task。
MLlib是Spark的机器学习库(Lin T,Jiang C.Load Forecasting of PowerSCADA Based on Spark MLlib[C]//Proceedings of 2016 International Conferenceon Modeling,Simulation and Optimization Technologies and Applications(MSOTA2016).2016:5。Xiao T,Shi Y.Medical health data analysis based on SparkMllib[C]//Proceedings of the 2016 International Conference on ArtificialIntelligence and Engineering Applications,2016.),旨在简化机器学习并扩展到更大的规模,同时利用基于内存的分布式计算框架来训练模型和处理全量数据的迭代计算。Spark的机器学习库是由一些通用的数据处理算法和工具组成,其中包括回归、分类、聚类、降维、协同过滤和一些监控工具等。本发明主要针对的是分类算法中的线性分类模型参数更新流程,提供基于参数服务器的异步更新策略。在现有MLlib中有两种线性分类器:SVM和LR(Assefi M,Behravesh E,Liu G,et al.Big Data Machine Learning using ApacheSpark MLlib[C]//IEEE Big Data 2017。Zhang Z,Cui B,Shao Y,et al.Ps2:Parameterserver on spark[C]//Proceedings of the 2019 International Conference onManagement of Data.2019:376-388),并且使用SGD/L-BFGS算法进行模型求解,科技文献通过引入核函数实现非线性回归问题的求解(周冉.基于Spark的并行SVM算法研究[D].辽宁工程技术大学,2017),科技文献在现有的Spark MLlib中的SVM算法的基础上实现改进并行的一对多SVM算法(Shen J,Wang H.Fusion effect of SVM in spark architecturefor speech data mining in cluster structure[J].International Journal ofSpeech Technology,2020:1-8)。现有科技文献也旨在从Spark MLlib中获益,在现有的MLlib基础上扩展机器学习。以上研究均是基于Spark同步框架下的研究,本发明旨在利用参数服务器在维护模型参数时的优势,将其扩展到Spark MLlib中的线性分类模型参数的更新中。
Spark的机器学习库中的线性分类算法分布式求解问题的核心思想是模型集中,计算分布。在利用SGD/L-BFGS等分布式优化算法进行模型训练时,每个物理节点求解本地数据集的损失函数值和梯度值,并将这些信息聚合到模型所在的节点上,然后利用这些信息更新模型参数。在这一过程中,Driver进程收集梯度信息并更新模型参数,之后将模型参数分发到各个子节点进行下一次迭代直到收敛。因此在Spark MLlib中求解一个线性分类分布式问题的一次迭代过程一般包括以下几个步骤:
1)初始化:初始化计算环境和初始化模型参数。
2)广播:Driver进程将模型参数以广播的形式分发给所有的执行器。
3)子问题求解:每个Executor根据本地的训练数据集并行地计算损失值和梯度值。
4)参数聚合:Driver进程通过聚合算子treeAggregate将所有执行器的计算结果聚合到Driver进程上。
5)模型更新:Driver进程根据聚合的信息进行模型的更新。
6)停止判断:Driver进程判断是否达到收敛,若收敛,则运行结束,反之则执行步骤2)。
图1展示了Spark MLlib中优化算法分布式迭代过程。从图1可以看出,在工作节点计算完成之后,Driver进程不仅要接收所有子节点的梯度信息,还要进行模型参数的更新,不可避免地造成Driver节点负载过重。Zhang Z等人(Zhang Z,Cui B,Shao Y,et al.Ps2:Parameter server on spark[C]//Proceedings of the 2019 InternationalConference on Management of Data.2019:376-388)利用Spark MLlib中SGD算法求解logistic回归问题,实验表明在整个执行流程中Driver进程聚合梯度占用的时间最长,占据了一次迭代中的大部分时间。由于每次迭代Driver节点需要聚合所有工作节点的信息,当模型参数较大时,Driver节点成为Spark MLlib中训练分布式算法时的瓶颈所在(DeshaiN,Sekhar B,Venkataramana S.MLlib:Machine Learning in Apache Spark[J].International Journal of Recent Technology and Engineering(IJRTE),2019。徐杰,唐淳,田野,等.一种参数服务器中全局参数的更新方法[P].四川:CN109032630A,2018-12-18)。
在Spark环境下求解大规模机器学习问题时,由于工作节点性能的差异性和网络延迟等因素使得每个工作节点的参数到达Driver节点的时间会存在很大差异,即集群中存在慢节点问题(Geng J K,Li D,Wang S A.Accelerating Distributed Machine Learningby Smart Parameter Server[P].Networking 2019。Jiang J Y.Overlap Local-SGD:AnAlgorithmic Approach to Hide Communication Delays in Distributed SGD.ICASSP2020-2020 IEEE International Conference on Acoustics,Speech and SignalProcessing.2020,8871-8875。Dai W,Wei J L.High-performance distributed ml atscale through parameter server consistency models in Proceedings of AAAI,2015),因此每次迭代时工作节点间的同步开销大,从而降低了算法性能。在这种集群环境下进行分布式机器学习算法的运行,可能会导致算法的稳定性下降,这与我们最初使用分布式计算的目的相背离。现有科技文献针对慢节点问题,从不同的角度放宽同步条件来改善慢节点问题。现有科技文献表明在无限***或者传感器网络中的高通信延迟和慢节点问题,极大的阻碍了SGD算法的性能,因此提出了Overlap-Local-SGD算法,通过使计算和通信重叠来实现算法性能加速。现有科技文献进一步改进SSP模型(Ho Q R,Cipar J,Cui H G,et al.More Effective Distributed ML via a Stale Synchronous ParallelParameter Server[J].Advances in neural information processing systems,2013),提出ESSP模型,在结合SSP优点的同时,减少接收的过时信息的数量来保证模型一致性,文章更加强调的是使用过时的信息如何保证模型的一致性,并且承认ESSP模型在运算时间上相比于其他计算框架并没有优势。本发明是在Spark MLlib的线性分类场景中,引入多服务器节点代替单一的Driver节点进行模型参数的维护,减轻Driver节点负载,同时工作节点与每个服务器节点之间采用异步的SSP通信策略,充分地考虑了真实Spark集群中节点间差异性,缓解慢节点对***性能的影响。
参数服务器(Li M.Scaling Distributed Machine Learning with theParameter Server[J].Big Data Science and Computing,2014)是针对机器学***台[J].数据与计算发展前沿,2019,1(05):63-72)。
第三代参数服务器相比于前两代增加了完善的容错机制,目前已广泛应用于机器学习等领域。相比于参数服务器在其他领域的应用,本发明更加关注的是基于参数服务器的Spark集群中的底层的、通用的参数更新流程。Mu Li等人通过参数服务器扩展机器学习问题(Li M,Zhou L,Yang Z,et al.Parameter server for distributed machinelearning[C]//Big Learning NIPS Workshop.2013,6:2),Luo L等人使用参数服务器训练分布式深度神经网络模型(DDNN)(Luo L,Nelson J,Ceze L,et al.Parameter hub:arack-scale parameter server for distributed deep neural network training[C]//Proceedings of theACM Symposium on Cloud Computing.2018:41-54),二者更加关注的是***的吞吐量,而忽略了其中参数更新的细节和不同框架中真实集群环境的差异。
为了利用参数服务器高效的通信效率及Spark强大的数据处理能力,Zhang Z等人将参数服务器和Spark相结合,提出了PS2***(Zhang Z,Cui B,Shao Y,et al.Ps2:Parameter server on spark[C]//Proceedings of the 2019 InternationalConference on Management of Data.2019:376-388),并利用该***优化参数服务器中参数的传递。Jiang J等人(Jiang J,Xiao P,Yu L,et al.PSGraph:How Tencent trainsextremely large-scale graphs with Spark?[C]//2020IEEE 36th InternationalConference on Data Engineering(ICDE).2020:1549-1557)将参数服务器与Spark结合开发出PSGraph,进而取代Spark中的GraphX。二者发现在进行最大似然模型的训练时往往需要的是元素级别的操作,因此提出了元素级别的DCV操作符来取代参数服务器中的pull和push操作,该方法在一定程度上减少了模型的训练时间,多用于图像处理领域,优化的是Spark生态***中的GraphX组件,而本发明改进的是Spark MLlib组件中线性分类模型的参数更新流程。Ming L等人发明了一种基于数据并行的分布式深度学习方法及***(Li M,Hou MS,Zhan SY,et al.A distributed depth learning method and system based ona data parallel strategy[P].SiChuan:CN109032671A,2018-12-18),它将Spark、Pytorch和flask结合在一起,Spark框架提供集群资源管理、数据分发、分布式计算的功能;PyTorch深度学习框架,提供神经网络定义的接口和神经网络上层训练计算的功能;flask框架提供参数服务器功能。通过将多个组件整合得到一个适用于分布式深度学习的***。Xu M X等人发明了一种深度学习模型训练的方法(Xu M X,Wu Z Z.Deep learning modeltraining method,working node and parameter server[P].BeiJing:CN112016699A,2020-12-01),结合参数服务器来进行模型参数的更新,解决多个工作节点对同一模型训练时效率低的问题。上述科技文献求解的是深度神经网络模型,本发明是使用参数服务器扩展线性分类模型中参数更新流程,考虑的是集群中底层计算资源的差异对模型训练的影响。
发明内容
为了解决现有技术Spark集群中慢节点问题对优化算法收敛速度的影响和减轻Driver节点在模型参数更新时的计算负载和通信开销,提高分布式算法性能的问题,本发明的目的在于克服已有技术存在的不足,提供一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法,一方面在Spark框架上引入多服务器节点来减轻Driver进程的计算负载,另一方面通过异步传输方式来降低集群中计算节点的性能差异对算法的影响。
为达到上述发明创造目的,本发明采用如下发明构思:
在真实集群环境中,通常会出现慢节点问题,即较慢的计算节点会制约整个***的运行速度。本发明通过在Spark平台上构建参数服务器模块,来实现多节点代替单一的Driver节点进行模型参数的维护,并在工作节点和服务器节点之间实现异步传输策略,缓解慢节点问题。本发明通过添加服务器节点来减轻Spark中Driver节点的计算负载,并通过异步传输方式来降低集群中慢节点对算法性能的影响。
根据上述发明构思,本发明采用如下技术方案:
一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法,包括以下步骤:
(1)在Spark框架上构建参数服务器模块;优选在不改变Spark核心代码的情况下,以无侵入的方式实现Spark on PS框架;
(2)初始化参数:在服务器应用程序中,初始化全局同步时钟和全局模型参数;优选全局模型参数需初始化才可进行迭代计算;设置初始化模型参数:首先设置训练迭代的最大次数T,并初始化全局同步时钟t=0;然后初始化模型参数,在开始迭代时,工作节点通过pull操作获取初始化后的全局模型参数;
(3)数据预处理:将数据集按照工作节点数量进行分区,每个工作节点保存一份数据;单机无法处理大规模数据,需将大规模数据集划分成若干等分,分散到多台机器上进行处理;优选数据预处理:从分布式文件***中获取数据,并根据工作节点的数量和所分配的内存大小将数据等分成M份,然后分发给M个工作节点,由工作节点使用该数据集进行训练;
(4)梯度求解:工作节点通过pull操作获取服务器节点更新的全局模型参数,根据全局模型参数和数据集进行迭代计算,得到梯度信息,并将梯度信息通过push操作推送到指定的服务器节点上;
(5)模型参数更新:服务器节点接收来自工作节点计算的梯度信息,然后更新得到全局模型参数;
(6)服务器端判断算法是否满足迭代停止条件,若满足则停止计算,反之重复步骤(4)和步骤(5)。
优选地,所述步骤(1)的具体步骤如下:
(1.1)编写参数服务器执行环境类PSContext;优选在程序执行时,Spark和参数服务器分别启动不同的应用程序,SparkContext类是Spark应用程序的上下文环境类,PSContext类是启动参数服务器应用程序的上下文环境类,通过设计实现该类可为参数服务器节点分配资源和初始化上下文环境;
(1.2)实现在Spark环境下模型类:MLModel类和PSModel类;优选前者作为集合类是所有PSModel类的基类,PSModel定义了在模型训练过程中的模型参数的类型,并在不同数据结构和类型下,将生成不同类型的模型参数,并提供对这些模型参数的原子操作;
(1.3)实现Worker端和服务器端之间通信操作类,即pull和push操作。
优选地,所述步骤(2)的详细步骤如下:
(2.1)设置同步时钟:设置全局同步时钟t,设置训练迭代的最大次数T,t<T,并初始化全局同步时钟t=0;
(2.2)初始化全局模型参数:当t=0时,初始化全局模型参数,在开始迭代时,工作节点通过pull操作获取初始化后的全局模型参数。
优选地,所述步骤(3)的详细步骤如下:
(3.1)数据预处理:从分布式文件***中获取数据,并根据工作节点的数量和所分配的内存大小将数据等分成M份,然后分发给M个工作节点,工作节点使用该数据集进行梯度值的计算;
(3.2)在程序真正执行时将本地原始数据集按行解析成LabeledPoint类型的数据格式,该数据格式可被优化算法直接使用。
优选地,所述步骤(4)的详细步骤如下:
(4.1)拉取模型参数:每个工作节点根据时钟信息判断服务器节点是否更新完成;服务器更新完模型参数后,每个工作节点从服务器拉取(pull)模型参数wt
(4.2)通过Mini-batch算法选取本地数据集中的n个样本形成一个batch,工作节点根据模型参数wt和batch中的样本进行训练得到训练输出值:
在第t+1个时钟时,从数据集样本中随机选取batch个数据集,使用由参数服务器传递过来的模型参数和batch中的样本训练,使用从服务器节点获取的最新的全局模型参数对局部参数进行更新,得到每个工作节点的训练输出值
Figure BDA0003078753000000061
其中j为第j个工作节点,i为第i个样本;
(4.3)计算损失函数值:工作节点根据每个数据输出值计算第j个工作节点的损失函数值Lj,并且
Figure BDA0003078753000000071
其中
Figure BDA0003078753000000072
表示为第j个工作节点的第i个样本的期望输出值,n为样本数量;
(4.4)更新梯度信息:根据损失函数值计算梯度值
Figure BDA0003078753000000073
(4.5)发送梯度信息:每个工作节点的将各自的梯度信息分块推送(push)到指定的服务器节点。
优选地,所述步骤(5)的详细步骤如下:
(5.1)当服务器节点接收到至少s个工作节点推送的梯度信息时,服务器节点更新全局模型参数,利用所有工作节点的梯度的平均值得到ΔL,s≤M,M表示工作节点的数量,并使用该梯度值更新计算部分模型参数
Figure BDA0003078753000000074
其中t表示当前全局时钟,m表示第m个服务器节点,η为学习率;在服务器端为每个工作节点设置一个时钟的延迟周期dj,且dj=t-tτ,其中t为当前时钟,tτ为上一轮参与更新模型参数的时钟,j为第j个工作节点;当某个工作节点的时钟延迟周期dj超过时钟窗口staleness值时,服务器节点需要等待接收到该节点的梯度信息后才可进行本次模型参数的更新;
(5.2)在第t个时钟时,服务器节点更新完部分模型参数
Figure BDA0003078753000000075
的后,将所有服务器节点维护的部分模型参数拼接成完整的全局模型参数wt+1,并令t=t+1,随后工作节点通过pull操作获取该全局模型参数。
一种计算机***,其计算机程序采用本发明基于参数服务器异步更新SparkMLlib中线性分类模型参数的方法实施。
本发明与现有技术相比较,具有如下显而易见的突出实质性特点和显著优点:
1.本发明结合Spark和参数服务器的特征,首先设置和分配Spark和参数服务器启动资源,然后启动服务器应用程序和Spark应用程序来执行相关操作。在服务器应用程序中,首先初始化执行环境和相关参数,然后接收来自Spark应用程序中Executor计算的梯度信息来更新模型参数;本发明通过引入参数服务器的方式,将线性分类模型参数划分到不同的服务节点中,并通过设置时钟的方式实现异步传输,服务节点只需获取部分工作节点的梯度信息即可对模型参数进行更新;
2.本发明通过添加服务器节点来减轻Spark中Driver节点的计算负载,并通过异步传输方式来降低集群中慢节点对算法性能的影响;
3.本发明在Spark框架上引入多服务器节点来减轻Driver进程的计算负载,提高了计算效率。
附图说明
图1是Spark MLlib中优化算法分布式迭代流程图。
图2是在Spark框架上添加参数服务器模块的基本结构。
图3是延迟时钟设置为2的SSP同步策略示意图。
图4是一个task任务执行流程示意图。
图5是基于参数服务器的Spark MLlib中线性分类模型参数更新流程图。
图6是同步SGD算法和异步SGD算法的执行时间。
具体实施方式
以下结合具体的实施例子对上述方案做进一步说明,本发明的优选实施例详述如下:
实施例一:
在本实施例中,参见图5,一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法,包括以下步骤:
(1)在Spark框架上构建参数服务器模块;
(2)初始化参数:在服务器应用程序中,初始化全局同步时钟和全局模型参数;
(3)数据预处理:将数据集按照工作节点数量进行分区,每个工作节点保存一份数据;
(4)梯度求解:工作节点通过pull操作获取服务器节点更新的全局模型参数,根据全局模型参数和数据集进行迭代计算,得到梯度信息,并将梯度信息通过push操作推送到指定的服务器节点上;
(5)模型参数更新:服务器节点接收来自工作节点计算的梯度信息,然后更新得到全局模型参数;
(6)服务器端判断是否满足迭代停止条件,若满足则停止计算,反之重复步骤(4)和步骤(5)。
本实施例通过添加服务器节点来减轻Spark中Driver节点的计算负载,并通过异步传输方式来降低集群中慢节点对算法性能的影响。
实施例二:
本实施例与实施例一基本相同,特别之处在于:
在本实施例中,参见图1-6,所述步骤(1)的具体步骤如下:
(1.1)编写参数服务器执行环境类PSContext;
(1.2)实现在Spark环境下模型类:MLModel类和PSModel类;
(1.3)实现Worker端和服务器端之间通信操作类,即pull和push操作。
在本实施例中,所述步骤(2)的详细步骤如下:
(2.1)设置同步时钟:设置训练迭代的最大次数T和全局同步时钟t,t<T;
(2.2)初始化全局模型参数:初始化全局模型参数,在开始迭代时,工作节点通过pull操作获取初始化后的全局模型参数。
在本实施例中,所述步骤(3)的详细步骤如下:
(3.1)数据预处理:从分布式文件***中获取数据,并根据工作节点的数量和所分配的内存大小将数据等分成M份,然后分发给M个工作节点,工作节点使用该数据集进行梯度值的计算;
(3.2)在程序真正执行时将本地原始数据集按行解析成LabeledPoint类型的数据格式,该数据格式可被优化算法直接使用。
在本实施例中,所述步骤(4)的详细步骤如下:
(4.1)拉取模型参数:每个工作节点根据时钟信息判断服务器节点是否更新完成;服务器更新完模型参数后,每个工作节点从服务器拉取(pull)模型参数;
(4.2)通过Mini-batch算法选取本地数据集中的n个样本形成一个batch,工作节点根据模型参数wt和batch中的样本进行训练得到训练输出值:在第t+1个时钟时,使用由参数服务器传递过来的模型参数和batch中的样本训练,得到每个工作节点的训练输出值
Figure BDA0003078753000000094
其中j为第j个工作节点,i为第i个样本;
(4.3)计算损失函数值:工作节点根据每个数据输出值计算第j个工作节点的损失函数值Lj,并且
Figure BDA0003078753000000091
其中
Figure BDA0003078753000000092
表示为第j个工作节点的第i个样本的期望输出值;
(4.4)更新梯度信息:根据损失函数值计算梯度值
Figure BDA0003078753000000093
(4.5)发送梯度信息:每个工作节点的梯度信息推送(push)到指定的服务器节点;
在本实施例中,所述步骤(5)的详细步骤如下:
(5.1)当服务器节点接收到s(s≤M)个工作节点推送的梯度信息时,服务器节点就可以更新全局模型参数,利用所有工作节点的梯度的平均值得到ΔL,然后使用该梯度值更新计算部分模型参数
Figure BDA0003078753000000101
其中t表示当前全局时钟,m表示第m个服务器节点,M表示工作节点的数量,η为学习率;并为每个工作节点设置一个时钟的延迟周期dj,令dj=t-tτ,其中t为当前时钟,tτ为上一轮参与更新模型参数的时钟,j为第j个工作节点;当某个工作节点的时钟延迟周期dj超过时钟窗口staleness值时,服务器节点需要等待接收到该节点的梯度信息后才可进行本次模型参数的更新;
(5.2)在第t个时钟时,服务器节点完成部分模型参数
Figure BDA0003078753000000102
的更新后,将所有服务器节点维护的部分模型参数拼接成完整的全局模型参数wt+1,这时令t=t+1,随后工作节点通过pull操作获取该全局模型参数。
实施例三:
本实施例与上述实施例基本相同,特别之处在于:
在本实施例中,一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法,含以下步骤:
1.Spark平台上添加参数服务器模块的实现:
通过在Spark上添加参数服务器模块进一步改善Spark MLlib库中求解线性分类问题的优化算法效率低下的问题。在Spark框架下执行优化算法时,Driver进程需要接收来工作节点的梯度信息并使用这些信息进行模型参数的更新,Driver节点的工作负载与模型参数维度和工作节点的数量成正比,当模型维度达到上千万维时,Driver节点的工作负载将成为***的瓶颈。
Spark是一种新型的基于内存的分布式计算框架,其缓存机制和惰性执行模型使其执行速度很快,并且具有高容错性。尤其对于迭代任务来说,Spark是基于内存的运算框架,因此在速度方面具有很大的优势。参数服务器是一种新型的大规模分布式机器学习的计算框架,通过数据划分,将模型参数按照维度划分到不同的机器上进行求解和维护,有效的缓解了高维模型参数带来的通信与内存开销大等问题。因此,本发明将Spark MLlib中求解线性分类问题的优化算法中的梯度和损失值计算交给Spark来进行处理,将模型参数的维护和更新交给参数服务器来进行处理,可以很好的发挥各自自身的优势。
图2显示了在Spark上构建参数服务器的基本框架图。其中Parameter Server层提供通用的服务器服务,负责模型的分布式存储,通信同步和协调计算,并通过PSAgent提供PS Service。Model层实现模型的push和pull、异步控制和自定义函数等,是连通Worker和PS Server的桥梁。Worker层是基于Spark自身框架设计的分布式运行节点,自动读取并划分数据,计算出每个节点的梯度值。在实现该框架的过程中,PSContext、MLModel和PSModel以及pull和push操作是其实现的核心。
(1.1)PSContext类的实现:PSContext是参数服务器功能的入口,负责参数服务器的启动和关闭以及相关资源初始化等。在Spark中,SparkContext是Spark功能的主要入口,激活状态下的SparkContext表示Spark集群的启动,并且可以在集群上进行一系列的资源初始化操作,比如创建RDD、创建累加器和广播变量等。在Spark2.0之后引入了SparkSession的概念,它为用户提供一个统一的切入点来使用Spark的各项功能,并且封装了之前的SparkConf和SparkContext的所有功能。在参数服务器环境中,实现PSContext类,以SparkSession为参数调用PSContext中的getorcreate()和instance()方法实现初始化参数服务器的上下文环境,并通过实现PSContext抽象类中的launchPS()方法和stopPS()方法来启动或关闭参数服务器。
(1.2)MLModel类和PSModel类的实现:这两个类定义了在模型训练过程中的模型参数的类型。MLModel是一个集合类,定义为机器学习算法中多个服务节点所训练的模型的集合类,其中包含多个PSModel模型,实现该类的目的是方便对这些模型进行统一的操作和管理。MLModel容纳和管理一个具体算法中的所有PSModel,同时将其作为一个整体被加载、训练和保存。PSModel定义为一个可以进行反复迭代更新的可变模型对象,实现了可根据数据集的类型不同定义为不同类型的模型参数,并实现了对这些模型参数的获取和更新接口。在PSModel中包含了四大操作类型接口:pull、push、同步策略和io。
(1.3)pull和push操作的实现:pull和push是服务器节点和工作节点之间通信的原子操作。pull操作是将服务器端更新的模型参数拉取到本地工作节点作为下一次迭代的输入参数,以matrixId或者ModelId为参数,调用aggregate()方法可以连续拉取数据。push操作是将本地迭代计算的梯度信息push到服务器端,以matrixId或者ModelId为参数调用Update()方法实现将本地梯度信息推送到服务器端。
2.初始化模型参数和相关变量:
在进行迭代计算之前,需要对算法中的参数进行初始化工作,如全局同步时钟t初始化为0,模型参数可以初始化为双精度类型的零值向量或者其他类型数据结构。
(2.1)全局时钟和模型参数初始化:设置训练迭代最大次数T及同步时钟t=0,然后初始化全局模型参数,在开始迭代时,工作节点通过pull操作获取初始化后的全局模型参数。
(2.2)设置同步时钟的目的是为了实现SSP策略。图3是模型参数更新时的SSP异步策略。该策略的设计思想是允许一定程度的计算节点进度不一致,但是这个不一致有一个上限,我们把这个上限称之为staleness值,即最快的计算节点最多领先最慢的计算节点staleness次迭代,从图中可知最快的工作节点领先于最慢的工作节点两轮的迭代次数,当领先的迭代次数大于staleness值时,在下一次迭代时快节点需等待计算最慢的节点。在SSP同步策略下,staleness值的设置至关重要,当该值为0时则变成完全同步的BSP模型,当值设置为-1时(表示无穷大)则变成完全异步的ASP模式。因此在实际算法中,需要根据集群的变化,调整同步策略和参数,以达到模型准确率和计算速度的平衡。
3.数据预处理:
(3.1)一般情况下,原始数据集分为libsvm数据格式或者dummy数据格式。libsvm数据格式中每一行表示一个数据样本,包括一个标签和多个索引和值,用“:”隔开。dummy数据格式为每一个行为为一个样本,包括一个标签和多个索引,每个字段使用“,”分隔。在数据预处理前根据HDFS分片原则,将原始数据集持久化到本地不同的节点上。
(3.2)根据Spark的惰性机制,在程序真正执行时才会触发数据的加载。由图4可知,根据用户自定义的分区数M将数据等分成M份,再分发给工作节点,工作节点使用该数据集进行训练。在程序真正执行时将原始数据集按行解析成LabeledPoint类型的数据格式,该类型的数据格式由原始数据集的标签和特征值组成的向量构成。LabeledPoint类型的数据集可以被优化算法直接使用。
4.工作节点根据模型参数进行计算,得到梯度信息:
(4.1)获取模型参数:每个工作节点根据时钟信息判断服务器节点是否更新完成。服务器更新完模型参数后,每个工作节点从服务器拉取(pull)模型参数;
(4.2)通过Mini-batch算法选取本地数据集中的n个样本形成一个batch,工作节点根据模型参数wt和batch中的样本进行训练得到训练输出值:在第t+1个时钟时,使用由参数服务器通过pull操作传递过来的模型参数和batch中的样本训练,得到每个工作节点的训练输出值
Figure BDA0003078753000000121
其中j为第j个工作节点,i为第i个样本;
(4.3)计算损失函数值:根据本地数据输出值计算第j个工作节点的损失函数值Lj,并且
Figure BDA0003078753000000122
其中
Figure BDA0003078753000000123
表示为第j个工作节点的第i个样本的期望输出值;
(4.4)计算梯度值:根据损失函数值计算梯度值
Figure BDA0003078753000000124
(4.5)发送梯度信息:将每个工作节点的梯度信息通过push操作推送到指定的服务器节点。
在步骤4中,再结合图5,工作节点根据模型参数进行训练,得到梯度信息。在第t个时间戳时,每个工作节点根据本地数据集的n个数据样本,使用模型参数对n个样本数据进行训练,得到每个训练样本的输出值。根据输出值计算每个工作节点的损失函数值,接着根据损失值计算梯度信息,通过push操作将梯度信息推送到服务器节点中。
一般情况下,服务器节点和工作节点之间传递的都是梯度信息,参数服务器接收到梯度信息后根据一定的算法对模型参数进行更新。不同的通信策略有不同的计算方式,在同步模式下,服务器利用所有的最新梯度信息的平均值更新模型参数;在异步模式下,服务器可利用部分最新梯度信息的平均值更新模型参数。随后工作节点通过pull操作将服务器节点更新的模型参数拉取到本地中去。
5.模型参数更新:
(5.1)服务器节点每次接收到s(s≤M)个工作节点传递过来的梯度值并做平均得到ΔL,并使用该梯度值更新计算部分模型参数
Figure BDA0003078753000000131
其中t表示当前全局时钟,m表示第m个服务器节点,M表示工作节点的数量,η为学习率。并为每个工作节点设置一个时钟延迟周期dj,且dj=t-tτ,其中为t当前时钟,tτ为上一轮参与更新模型参数的时钟,j为第j个工作节点。当某个工作节点的时钟延迟周期dj超过时钟窗口staleness值时,在对模型参数进行更新时,服务器节点需要等待接收到该节点的梯度信息后才可进行本次模型参数的更新。
(5.3)在第t个时钟时,服务器节点完成部分模型参数
Figure BDA0003078753000000132
的更新后,将所有服务器节点维护的部分模型参数拼接成完整的全局模型参数wt+1,这时令t=t+1,随后工作节点通过pull操作获取该全局模型参数。
在步骤5中,参数服务器接收s(s≤M)个工作节点传递过来的梯度信息,并为每个工作节点确定一个延迟度,根据每个工作节点的延迟度决定是否需要等待计算慢的节点计算的梯度信息,在满足异步时钟策略的条件下更新得到模型参数。待服务器节点的模型参数更新完成之后,使时间戳加1,并将更新后的模型参数回传给工作节点,重复步骤(4),直到时间戳达到最大迭代次数,这时迭代结束,完成模型参数的更新。
为了验证基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法的性能,本文在8个节点组成的集群上对算法性能进行测试,节点间网络带宽为1000Mbps。表1展示了实验环境的硬件配置和软件配置,表2展示了实验数据相关信息。
在Spark集群中每个工作节点的可用内存不同,因此在进行资源分配时,可通过为每个executor分配相同的资源,人为的构造存在慢节点问题的集群环境。服务器节点设置为2个,工作节点设置为6个。使用SGD算法求解logistic回归问题。
图6展示了利用同步SGD和异步SGD算法求解logistic回归问题时,使用不同数据集时算法的运行时间。其中同步SGD是Spark MLlib中的SGD算法,迭代次数为100次,异步SGD是本发明中提出的基于参数服务器框架实现的SGD算法。异步的SGD算法在异构集群中具有一定的优势,并且在数据维度越高的情况下优势越明显,可以在更少的时间达到收敛。一方面,这是因为异步SGD算法通过梯度信息对模型参数进行更新时,节点间采用SSP协议以减少节点间等待时间;另一方面,使用多服务器节点代替单一的Driver节点可以减轻通信压力,提高通信效率,从而减少***总运行时间。这说明本发明提出的基于参数服务器异步更新模型参数的方法,可以更好的缓解慢节点问题和提高通信效率。
表1.实验环境配置信息表
Figure BDA0003078753000000141
表2.实验数据集信息表
数据集名称 样本个数 特征的维度
rcv1 677399 47236
kdd 19948000 1162970
本实施例基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法,结合Spark和参数服务器的特征,首先设置和分配Spark和参数服务器启动资源,然后启动服务器应用程序和Spark应用程序来执行相关操作。在服务器应用程序中,首先初始化执行环境和相关参数,然后接收来自Spark应用程序中Executor计算的梯度信息来更新模型参数。本发明通过引入参数服务器的方式,将线性分类模型参数划分到不同的服务节点中,并通过设置时钟的方式实现异步传输,服务节点只需获取部分工作节点的梯度信息即可对模型参数进行更新。本实施例通过添加服务器节点来减轻Spark中Driver节点的计算负载,并通过异步传输方式来降低集群中慢节点对算法性能的影响。
上面对本发明实施例结合附图进行了说明,但本发明不限于上述实施例,还可以根据本发明的发明创造的目的做出多种变化,凡依据本发明技术方案的精神实质和原理下做的改变、修饰、替代、组合或简化,均应为等效的置换方式,只要符合本发明的发明目的,只要不背离本发明的技术原理和发明构思,都属于本发明的保护范围。

Claims (6)

1.一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法,其特征在于,包括以下步骤:
(1)在Spark框架上构建参数服务器模块;
(2)初始化参数:在服务器应用程序中,初始化全局同步时钟和全局模型参数;
(3)数据预处理:将数据集按照工作节点数量进行分区,每个工作节点保存一份数据;
(4)梯度求解:工作节点通过pull操作获取服务器节点更新的全局模型参数,根据全局模型参数和数据集进行迭代计算,得到梯度信息,并将梯度信息通过push操作推送到指定的服务器节点上;
(5)模型参数更新:服务器节点接收来自工作节点计算的梯度信息,然后更新得到全局模型参数;
(6)服务器端判断算法是否满足迭代停止条件,若满足则停止计算,反之重复步骤(4)和步骤(5)。
2.根据权利要求1所述的一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法,其特征在于,所述步骤(1)的具体步骤如下:
(1.1)编写参数服务器执行环境类PSContext;
(1.2)实现在Spark环境下模型类:MLModel类和PSModel类;
(1.3)实现Worker端和服务器端之间通信操作类,即pull和push操作。
3.根据权利要求1所述基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法,其特征在于,所述步骤(2)的详细步骤如下:
(2.1)设置同步时钟:设置当前全局同步时钟t,设置训练迭代的最大次数T,t<T,并初始化全局同步时钟t=0;
(2.2)初始化全局模型参数:当t=0时,初始化全局模型参数,在开始迭代时,工作节点通过pull操作获取初始化后的全局模型参数。
4.根据权利要求1所述基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法,其特征在于,所述步骤(3)的详细步骤如下:
(3.1)数据预处理:从分布式文件***中获取数据,并根据工作节点的数量和所分配的内存大小将数据等分成M份,然后分发给M个工作节点,工作节点使用该数据集进行梯度值的计算;
(3.2)在程序真正执行时将本地原始数据集按行解析成LabeledPoint类型的数据格式,该数据格式可被优化算法直接使用。
5.根据权利要求2所述基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法,其特征在于,所述步骤(4)的详细步骤如下:
(4.1)拉取全局模型参数:每个工作节点根据时钟信息判断服务器节点是否更新完成;服务器更新完模型参数后,每个工作节点从服务器通过pull操作拉取服务器节点更新的全局模型参数wt
(4.2)通过Mini-batch算法选取本地数据集中的n个样本形成一个batch,工作节点根据模型参数wt和batch中的样本进行训练得到训练输出值:
在第t+1个时钟时,从数据集样本中随机选取batch个数据集,使用由参数服务器传递过来的模型参数和batch中的样本训练,使用从服务器节点获取的最新的全局模型参数对局部参数进行更新,得到每个工作节点的训练输出值
Figure FDA0004046222880000021
其中j为第j个工作节点,i为第i个样本;
(4.3)计算损失函数值:工作节点根据每个数据输出值计算第j个工作节点的损失函数值Lj,并且
Figure FDA0004046222880000022
其中
Figure FDA0004046222880000023
表示为第j个工作节点的第i个样本的期望输出值,n为样本数量;
(4.4)更新梯度信息:根据损失函数值计算梯度值
Figure FDA0004046222880000024
(4.5)发送梯度信息:每个工作节点的将各自的梯度信息分块推送(push)到指定的服务器节点。
6.根据权利要求1所述基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法,其特征在于,所述步骤(5)的详细步骤如下:
(5.1)服务器节点每次等待接收至少s个工作节点传递过来的梯度信息,服务器节点更新全局模型参数,利用所有工作节点的梯度的平均值得到ΔL,s≤M,M表示工作节点的数量,并使用该梯度值更新计算部分模型参数
Figure FDA0004046222880000025
其中t表示当前全局同步时钟,m表示第m个服务器节点,η为学习率;在服务器端为每个工作节点设置一个时钟的延迟周期dj,且dj=t-tτ,tτ为上一轮参与更新模型参数的时钟,j为第j个工作节点;当某个工作节点的时钟延迟周期dj超过时钟窗口staleness值时,服务器节点需要等待接收到该节点的梯度信息后才可进行本次模型参数的更新;
(5.2)在当前全局同步时钟t时,服务器节点更新完成部分模型参数
Figure FDA0004046222880000031
后,将所有服务器节点维护的部分模型参数拼接成完整的全局模型参数wt+1,这时令t=t+1,随后工作节点通过pull操作获取该全局模型参数。
CN202110560289.2A 2021-05-21 2021-05-21 一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法 Active CN113342313B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110560289.2A CN113342313B (zh) 2021-05-21 2021-05-21 一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110560289.2A CN113342313B (zh) 2021-05-21 2021-05-21 一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法

Publications (2)

Publication Number Publication Date
CN113342313A CN113342313A (zh) 2021-09-03
CN113342313B true CN113342313B (zh) 2023-04-18

Family

ID=77470795

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110560289.2A Active CN113342313B (zh) 2021-05-21 2021-05-21 一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法

Country Status (1)

Country Link
CN (1) CN113342313B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114819321B (zh) * 2022-04-18 2023-04-07 郑州大学 一种面向分布式机器学习的参数传输通信优化方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10873533B1 (en) * 2019-09-04 2020-12-22 Cisco Technology, Inc. Traffic class-specific congestion signatures for improving traffic shaping and other network operations

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104199652A (zh) * 2014-08-26 2014-12-10 邱涌 基于数据流的c to hdl同步映射方法
US10063406B2 (en) * 2015-07-15 2018-08-28 TUPL, Inc. Automatic customer complaint resolution
US9965330B2 (en) * 2015-09-18 2018-05-08 Salesforce.Com, Inc. Maintaining throughput of a stream processing framework while increasing processing load
US11080435B2 (en) * 2016-04-29 2021-08-03 Accenture Global Solutions Limited System architecture with visual modeling tool for designing and deploying complex models to distributed computing clusters
US11042549B2 (en) * 2019-04-11 2021-06-22 Sas Institute Inc. Database server embedded process and code accelerator
CN110232087B (zh) * 2019-05-30 2021-08-17 湖南大学 大数据增量迭代方法、装置、计算机设备和存储介质
CN110287010B (zh) * 2019-06-12 2021-09-14 北京工业大学 一种面向Spark时间窗口数据分析的缓存数据预取方法
CN110929878B (zh) * 2019-10-30 2023-07-04 同济大学 一种分布式随机梯度下降方法
CN111176832B (zh) * 2019-12-06 2022-07-01 重庆邮电大学 基于内存计算框架Spark的性能优化和参数配置方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10873533B1 (en) * 2019-09-04 2020-12-22 Cisco Technology, Inc. Traffic class-specific congestion signatures for improving traffic shaping and other network operations

Also Published As

Publication number Publication date
CN113342313A (zh) 2021-09-03

Similar Documents

Publication Publication Date Title
Liu et al. Adaptive asynchronous federated learning in resource-constrained edge computing
Zhang et al. An adaptive synchronous parallel strategy for distributed machine learning
CN111079921A (zh) 一种基于异构分布式***的高效神经网络训练调度方法
Zhang et al. Accelerate large-scale iterative computation through asynchronous accumulative updates
CN104243617A (zh) 一种异构集群中面向混合负载的任务调度方法及***
CN110659278A (zh) 基于cpu-gpu异构架构的图数据分布式处理***
Lai et al. Sol: Fast distributed computation over slow networks
CN115237580B (zh) 面向智能计算的流水并行训练自适应调整***、方法
Wang et al. Aggressive synchronization with partial processing for iterative ml jobs on clusters
US20220300323A1 (en) Job Scheduling Method and Job Scheduling Apparatus
Malik et al. Optimistic synchronization of parallel simulations in cloud computing environments
Lee et al. Performance improvement of mapreduce process by promoting deep data locality
CN113342313B (zh) 一种基于参数服务器异步更新Spark MLlib中线性分类模型参数的方法
Wang et al. CEFS: Compute-efficient flow scheduling for iterative synchronous applications
US20210390405A1 (en) Microservice-based training systems in heterogeneous graphic processor unit (gpu) cluster and operating method thereof
Duan et al. Mercury: A simple transport layer scheduler to accelerate distributed DNN training
CN113608858A (zh) 一种基于MapReduce架构的数据同步用块任务执行***
Proficz Improving all-reduce collective operations for imbalanced process arrival patterns
Duan et al. Reducing makespans of DAG scheduling through interleaving overlapping resource utilization
Marinho et al. LABAREDA: a predictive and elastic load balancing service for cloud-replicated databases
Fang et al. Parallel asynchronous stochastic variance reduction for nonconvex optimization
CN111258730A (zh) 一种基于竞态条件的任务调度方法
Li et al. An efficient task-based all-reduce for machine learning applications
CN113656494B (zh) 参数服务器的同步方法、***及可读存储介质
Duan et al. Accelerating Distributed DNN Training via Transport Layer Scheduling

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant