CN112528108B - 一种模型训练系统、模型训练中梯度聚合的方法及装置 - Google Patents
一种模型训练系统、模型训练中梯度聚合的方法及装置 Download PDFInfo
- Publication number
- CN112528108B CN112528108B CN201910880461.5A CN201910880461A CN112528108B CN 112528108 B CN112528108 B CN 112528108B CN 201910880461 A CN201910880461 A CN 201910880461A CN 112528108 B CN112528108 B CN 112528108B
- Authority
- CN
- China
- Prior art keywords
- operator
- training
- gradient
- aggregation
- node
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/906—Clustering; Classification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
本申请公开了一种模型训练系统以及模型训练中梯度聚合的方法,应用于人工智能artificial intelligence,AI)技术领域。该模型训练系统中的至少两个训练节点形成环状传输路径。在梯度聚合中,环上的各训练节点在梯度聚合前只需要确定自身的第一算子的第一梯度输出,就可以执行梯度聚合。不需要向中心节点发送该第一梯度,由该中心节点统一执行聚合。也不需要在聚合前向环状传输路径上作为中心节点的一个训练节点报告第一梯度已就绪,在接收到该中心节点返回的聚合指令后才能开始执行梯度聚合。可以有效的减少各训练节点与中心节点之间交互产生的通信开销。
Description
技术领域
本申请涉及人工智能(artificial intelligence,AI)技术领域,具体涉及一种模型训练系统、模型训练中梯度聚合的方法及装置。
背景技术
随着AI的发展,深度神经网络受到了愈加广泛的研究和应用。目前,深度神经网络已经在图像识别、视频分类、语音识别和语言翻译等领域的应用中获得了成功。而随着应用场景的普及,深度神经网络的模型在不断增大,有些模型的网络层数可以达到数百层,而参数量更是达到了两千万。这种越来越复杂的深度神经网络模型,需要多个训练节点一起才能完成模型训练。
训练深度神经网络最常用的是分布式训练方法,即将深度神经网络模型拷贝到多个训练节点上,每个训练节点独立训练不同的数据。在训练的过程中,各训练节点训练出来的梯度要发送到中心节点上进行聚合,然后中心节点再将的梯度发布到各个训练节点上进行权重更新。
另外还有一种环状的分布式训练系统,在该环状的分布式训练系统中,多个训练节点构成一个逻辑的环。各个训练节点训练出来梯度后向该环上作为中心节点的一个训练节点报告梯度就绪状态,在该中心节点确定各个训练节点的梯度都就绪后,通知各个训练节点开始执行梯度聚合,然后根据聚合后的梯度进行权重更新。
由上述方案可知,在模型训练的梯度聚合过程中,都需要各个训练节点与中心节点通信。由于深度神经网络愈加复杂,参数量急剧增加,在分布式训练过程中,由于梯度聚合所产生的通信开销已经成为模型训练的一个瓶颈,亟需解决。
发明内容
本申请实施例提供一种模型训练系统以及模型训练中梯度聚合的方法,可以减小梯度聚合过程中的通信开销。本申请实施例还提供了相应的装置。
本申请第一方面提供一种模型训练中梯度聚合的方法,该方法应用于模型训练系统中的第一训练节点,该第一训练节点为所述模型训练系统中的任一个训练节点,所述模型训练系统包括至少两个训练节点,所述至少两个训练节点形成环状传输路径,第二训练节点为所述环状传输路径上位于所述第一训练节点上游的训练节点,每个训练节点上都包括一份相同的计算图,所述每个训练节点根据所述训练节点上的计算图处理训练数据,所述计算图用于定义多个算子的计算逻辑以及所述多个算子之间数据的输入关系和输出关系,该方法包括:将第一训练数据输入第一计算图,所述第一计算图包括第一算子,所述第一训练数据用于训练出所述第一算子的第一梯度;接收所述第二训练节点发送的第二计算图中第二算子的聚合梯度,所述第二计算图包括与所述第一算子对应的所述第二算子,响应于接收到所述第二训练节点发送的所述聚合梯度和所述第一训练节点训练出的所述第一算子的第一梯度,聚合所述第一梯度和所述第二算子的聚合梯度,以得到所述第一算子的聚合梯度。
上述第一方面中,响应于第二训练节点聚合得到的第二算子的聚合梯度,第二训练节点将聚合梯度发送给第一训练节点,可以理解为:当第二训练节点聚合得到第二算子的聚合梯度时,第二训练节点可以将第二算子的聚合梯度发送给第一训练节点;还可以理解为:一旦第二训练节点聚合得到第二算子的聚合梯度,第二训练节点就将聚合梯度发送给第一训练节点。换句话说,第二训练节点聚合得到第二算子的聚合梯度这一条件可以不是执行第二训练节点可以将第二算子的聚合梯度发送给第一训练节点这一步骤的充分条件。
对应的,响应于接收到第二训练节点发送的聚合梯度和第一训练节点训练出的第一算子的第一梯度,第一训练节点聚合第一梯度和第二算子的聚合梯度,可以理解为:当接收到第二训练节点发送的聚合梯度和第一训练节点训练出的第一算子的第一梯度时,第一训练节点聚合第一梯度和第二算子的聚合梯度;还可以理解为:一旦接收到第二训练节点发送的聚合梯度和第一训练节点训练出的第一算子的第一梯度,第一训练节点聚合第一梯度和第二算子的聚合梯度;换句话说,第一训练节点接收到第二训练节点发送的聚合梯度和第一训练节点训练出的第一算子的第一梯度这一条件可以不是执行第一训练节点聚合第一梯度和第二算子的聚合梯度这一步骤的充分条件。
上述第一方面中,第一训练节点上的训练模型的计算图可以称为第一计算图,第二训练节点上的训练模型的计算图可以称为第二计算图,第一计算图中的算子称为第一算子,第二计算图中的算子称为第二算子,第一算子与第二算子是对应的,只是因为位于不同的计算图上,所以称呼不同,但第一算子和对应的第二算子的功能是相似的。通过第一训练数据训练出第一算子的第一梯度,通过第二训练数据训练出第二算子的第二梯度,无论是第一算子还是第二算子,经过聚合的梯度都称为聚合梯度。
上述第一方面中,描述的是第二训练节点不是首次发送梯度的情况,所以发送的是第二算子的聚合梯度。第二训练节点首次发送的是第二算子的第二梯度,这种情况下的方案可以结合上述系统结构描述为:所述第一训练节点将第一训练数据输入第一计算图,所述第一计算图包括第一算子,所述第一训练数据用于训练出所述第一算子的第一梯度;所述第二训练节点将第二训练数据输入第二计算图,所述第二计算图包括与所述第一算子对应的第二算子,所述第二训练数据用于训练出所述第二算子的第二梯度;所述第一训练节点响应于所述第二训练节点训练出所述第二算子的第二梯度或,所述第二训练节点将所述第二梯度发送给所述第一训练节点;所述第一训练节点响应于接收到所述第二训练节点发送的所述第二梯度和所述第一训练节点训练出所述第一算子的第一梯度,所述第一训练节点聚合所述第一梯度和所述第二梯度,以得到所述第一算子的聚合梯度。
需要说明的是,上述梯度聚合在环上不是一直执行的,可以通过设置收敛条件来停止执行,收敛条件可以是执行预置轮数,从起始训练节点开始到起始训练节点结束为一轮,例如:执行50轮,也可以是起始节点对每轮结束时的损失函数进行计算,若损失函数达到收敛条件,则结束上述环上的梯度聚合过程。
上述第一方面中,模型训练系统是指用于例如深度神经网络模型训练的系统。该系统中至少两个训练节点可以包括两个训练节点或多个训练节点。其中,节点可被认为是处理单元,具体的,节点可以为硬件设备,或运行在硬件设备上的虚拟机或容器或实例。当有两个训练节点时,这两个训练节点中的第二训练节点可以认为是训练的起始节点,在启动训练后,该第一训练节点和第二训练节点可以互为上游和下游的关系,训练过程最后会结束在起始节点上,例如:有训练节点1和训练节点2,这两个训练节点环状传输路径为训练节点1->训练节点2->训练节点1,形成闭合环。当有多个训练节点时,该多个训练节点形成环状传输路径,例如:有训练节点1、训练节点2、训练节点3和训练节点4,这四个训练节点的环状传输路径为训练节点1->训练节点2->训练节点3->训练节点4->训练节点1,形成闭合环。在模型训练过程中,上述至少两个训练节点中的每个训练节点都参与模型训练,每个训练节点上都有一份训练模型的计算图,然后每个训练节点使用不同的训练数据进行训练。训练模型转换为计算图的过程可理解为:训练模型中会有多层,每层都会包含一个或多个计算逻辑,每个计算逻辑可以对应一个算子,各个计算逻辑之间会有数据的输入或输出关系,计算逻辑之间的输入关系或输出关系可以用边的形式表示,这样就可以将训练模型转换为包括多个算子和边的计算图,边用于连接不同算子,该计算图中,用于执行梯度计算的算子可以称为第一算子,连接各第一算子之间的边称为第一边。其中,算子可被认为是执行任务的计算单元,在模型训练系统中,算子可以为处理训练数据的计算单元或处理单元,算子可具体由软件模块实现或者由硬件电路实现或者由软件模块和硬件电路结合后共同实现。训练数据的类型可以为图像、音频或视频等多媒体数据。
该第一方面所提供的梯度聚合,环上的各训练节点在梯度聚合前只需要确定自身的第一算子的第一梯度输出,就可以执行梯度聚合的过程。不需要向中心节点发送该第一梯度,由该中心节点统一执行聚合。也不需要在聚合前向环状传输路径上作为中心节点的一个训练节点报告第一梯度已就绪,在接收到该中心节点返回的聚合指令后才能开始执行梯度聚合。由此可见,该第一方面提供的模型训练中梯度聚合的方法,可以有效的减少各训练节点与中心节点之间交互产生的通信开销。
在第一方面的一种可能的实现方式中,所述第一计算图还包括至少一个聚合算子,所述第一计算图还用于定义所述多个第一算子与所述至少一个聚合算子之间数据的输入关系和输出关系;
上述步骤:响应于接收到所述第二训练节点发送的所述聚合梯度和所述第一训练节点训练出的所述第一算子的第一梯度,聚合所述第一梯度和所述第二算子的聚合梯度,以得到所述第一算子的聚合梯度,可以包括:
响应于接收到所述第二训练节点发送的所述聚合梯度和所述第一训练节点训练出的所述第一算子的第一梯度,通过所述聚合算子聚合所述第一梯度和所述第二算子的聚合梯度,以得到所述第一算子的聚合梯度。
该种可能的实现方式中第一计算图中还包括了聚合算子,以及用于表示第一算子和聚合算子之间输入关系或输出关系的第二边。聚合算子用于执行聚合和发送操作,可以称为 (all-reduce)算子。因为每个训练节点上的计算图都是相同的,各训练节点的计算图中包含了聚合算子和第二边,就可以在第一算子输出的第一梯度通过第二边到达聚合算子后,通过聚合算子执行梯度聚合以及聚合后的第二梯度的发送。由该种可能的实现方式可知,在第一算子输出第一梯度给聚合算子后,聚合算子直接可以执行聚合和发送的操作,在减少了通信开销的情况下,还提高了模型训练的效率。
在第一方面的一种可能的实现方式中,所述聚合算子与N个第一算子之间具有输入关系和输出关系,N为大于1的整数;
上述步骤:响应于接收到所述第二训练节点发送的所述聚合梯度和所述第一训练节点训练出的所述第一算子的第一梯度,所述第一训练节点通过所述聚合算子聚合所述第一梯度和所述第二算子的聚合梯度,以得到所述第一算子的聚合梯度,包括:
确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,其中,每个第一算子输出一个第一梯度;
通过所述聚合算子将N个第一算子各自输出的第一梯度与对应的所述第二算子的聚合梯度进行聚合,以得到所述N个第一算子各自的聚合梯度。
该种可能的实现方式中,聚合算子可以是至少一个聚合算子中的任意一个,一个聚合算子可以关联多个第一算子,这样该聚合算子就可以同时为这多个第一算子的第一梯度执行梯度聚合。这种1对N,N大于1的方式,可以减少聚合和发送次数,从而节省计算资源和通信资源。
在第一方面的一种可能的实现方式中,上述步骤:确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,可以包括:
检测所述聚合算子接收的第一梯度的数量;
若所述第一梯度的数量与所述聚合算子所连接的N个第一算子的数量相同,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
该种可能的实现方式中,可以检测聚合算子接收到的第一梯度的数量的情况来确定是否要进行聚合和发送操作。实现了聚合和发送管理的多样化。
在第一方面的一种可能的实现方式中,上述步骤:确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,可以包括:
检测所述第一算子的位图中所述N个第一算子的指示位,所述位图包括所述第一计算图中每个第一算子的指示位,其中每个指示位表示该第一算子的第一梯度的就绪状态,所述就绪状态用于指示所述聚合算子已接收到所述第一梯度或未接收到所述第一梯度;
若所述N个第一算子的指示位上的就绪状态都指示各自的第一梯度已就绪,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
该种可能的实现方式中,通过位图的方式来检测聚合算子接收到第一梯度的情况来确定是否要进行聚合和发送操作。实现了聚合和发送管理的多样化。
在第一方面的一种可能的实现方式中,该方法还可以包括:
当所述聚合算子接收到所述第一算子的第一梯度,则将所述第一算子的指示位上的就绪状态从指示所述聚合算子未接收到所述第一梯度修改为所述聚合算子已接收到所述第一梯度。
该种可能的实现方式中,要根据聚合算子接收第一梯度的情况,及时修改位图,从而确保位图上的就绪状态与聚合算子接收第一梯度的情况保持一致。
在第一方面的一种可能的实现方式中,该方法还可以包括:
响应于向下游的训练节点发送所述N个第一算子各自的聚合梯度,将所述N个第一算子各自的指示位上的就绪状态从指示所述聚合算子已接收到所述第一梯度修改为聚合算子未接收到所述第一梯度。
该种可能的实现方式中,在聚合后的聚合梯度被发送后,说明本轮产生的第一梯度已经不存在,要及时修改位图上第一梯度的就绪状态,以便进入下一轮训练。
在第一方面的一种可能的实现方式中,上述步骤:确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,可以包括:
检测所述聚合算子接收到的所述第一梯度的数据量;
若所述第一梯度的数据量已达到所述聚合算子的聚合数据量阈值,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
该种可能的实现方式中,可以通过检测数据量的方式来确定聚合算子接收N个第一梯度的情况,从而确定是否要进行聚合和发送操作。实现了聚合和发送管理的多样化。
本申请第二方面提供模型训练系统,包括至少两个训练节点,所述至少两个训练节点形成环状传输路径,第一训练节点为所述模型训练系统中的任一个训练节点,第二训练节点为所述环状传输路径上位于所述第一训练节点上游的训练节点,每个训练节点上都包括一份相同的计算图,所述每个训练节点根据所述训练节点上的计算图处理训练数据,所述计算图用于定义多个算子的计算逻辑以及所述多个算子之间数据的输入关系和输出关系。
所述第一训练节点将第一训练数据输入第一计算图,所述第一计算图包括第一算子,所述第一训练数据用于训练出所述第一算子的第一梯度;
所述第二训练节点将第二训练数据输入第二计算图,所述第二计算图包括与所述第一算子对应的第二算子,所述第二训练数据用于训练出所述第二算子的第二梯度;
响应于所述第二训练节点聚合得到的所述第二算子的聚合梯度,所述第二训练节点将所述聚合梯度发送给所述第一训练节点;
响应于接收到所述第二训练节点发送的所述聚合梯度和所述第一训练节点训练出的所述第一算子的第一梯度,所述第一训练节点聚合所述第一梯度和所述第二算子的聚合梯度,以得到所述第一算子的聚合梯度。
上述第二方面中,第一训练节点上的训练模型的计算图可以称为第一计算图,第二训练节点上的训练模型的计算图可以称为第二计算图,第一计算图中的算子称为第一算子,第二计算图中的算子称为第二算子,第一算子与第二算子是对应的,只是因为位于不同的计算图上,所以称呼不同。通过第一训练数据训练出第一算子的第一梯度,通过第二训练数据训练出第二算子的第二梯度,无论是第一算子还是第二算子,经过聚合的梯度都称为聚合梯度。
上述第二方面中,描述的是第二训练节点不是首次发送梯度的情况,所以发送的是第二算子的聚合梯度。第二训练节点首次发送的是第二算子的第二梯度,这种情况下的方案可以结合上述系统结构描述为:所述第一训练节点将第一训练数据输入第一计算图,所述第一计算图包括第一算子,所述第一训练数据用于训练出所述第一算子的第一梯度;所述第二训练节点将第二训练数据输入第二计算图,所述第二计算图包括与所述第一算子对应的第二算子,所述第二训练数据用于训练出所述第二算子的第二梯度;所述第一训练节点响应于所述第二训练节点训练出所述第二算子的第二梯度或,所述第二训练节点将所述第二梯度发送给所述第一训练节点;所述第一训练节点响应于接收到所述第二训练节点发送的所述第二梯度和所述第一训练节点训练出所述第一算子的第一梯度,所述第一训练节点聚合所述第一梯度和所述第二梯度,以得到所述第一算子的聚合梯度。
上述第二方面中,模型训练系统是指用于例如深度神经网络模型训练的系统。该系统中至少两个训练节点可以包括两个训练节点或多个训练节点。其中,节点可被认为是处理单元,具体的,节点可以为硬件设备,或运行在硬件设备上的虚拟机或容器或实例。当有两个训练节点时,这两个训练节点中的第二训练节点可以认为是训练的起始节点,在启动训练后,该第一训练节点和第二训练节点可以互为上游和下游的关系,训练过程最后会结束在起始节点上,例如:有训练节点1和训练节点2,这两个训练节点环状传输路径为训练节点1->训练节点2->训练节点1,形成闭合环。当有多个训练节点时,该多个训练节点形成环状传输路径,例如:有训练节点1、训练节点2、训练节点3和训练节点4,这四个训练节点的环状传输路径为训练节点1->训练节点2->训练节点3->训练节点4->训练节点1,形成闭合环。在模型训练过程中,上述至少两个训练节点中的每个训练节点都参与模型训练,每个训练节点上都有一份训练模型的计算图,然后每个训练节点使用不同的训练数据进行训练。训练模型转换为计算图的过程可理解为:训练模型中会有多层,每层都会包含一个或多个计算逻辑,每个计算逻辑可以对应一个算子,各个计算逻辑之间会有数据的输入或输出关系,计算逻辑之间的输入关系或输出关系可以用边的形式表示,这样就可以将训练模型转换为包括多个算子和边的计算图,边用于连接不同算子,该计算图中,用于执行梯度计算的算子可以称为第一算子,连接各第一算子之间的边称为第一边。其中,算子可被认为是执行任务的计算单元,在模型训练系统中,算子可以为处理训练数据的计算单元或处理单元,算子可具体由软件模块实现或者由硬件电路实现或者由软件模块和硬件电路结合后共同实现。训练数据的类型可以为图像、音频或视频等多媒体数据。
该第二方面所提供的梯度聚合,环上的各训练节点在梯度聚合前只需要确定自身的第一算子的第一梯度输出,就可以执行梯度聚合的过程。不需要向中心节点发送该第一梯度,由该中心节点统一执行聚合。也不需要在聚合前向环状传输路径上作为中心节点的一个训练节点报告第一梯度已就绪,在接收到该中心节点返回的聚合指令后才能开始执行梯度聚合。由此可见,该第二方面提供的模型训练中梯度聚合的方法,可以有效的减少各训练节点与中心节点之间交互产生的通信开销。
在第二方面的一种可能的实现方式中,所述第一训练节点使用所述第一算子的聚合梯度更新所述第一计算图中所述第一算子对应的权重。
该种可能的实现方式中,得到聚合后的第一算子的聚合梯度后,要用该聚合梯度更新第一算子对应的权重,从而使训练模型向收敛更进一步。一个第一算子可以对应一个或多个权重,但不管有多少个权重,该第一算子就会输出多少个第一梯度,也就会聚合产生多少个聚合梯度。例如:该第一算子对应有500个权重,那么该第一算子就会产生500个第一梯度,聚合后也就会产生500个聚合梯度,然后分别对应更新相应的权重。这500个梯度的排列顺序可以按照权重的顺序排列。权重更新的过程可以是用本轮当前的权重减去本轮产生的聚合梯度,得到更新后的权重,该更新后的权重用于下一轮训练。
在第二方面的一种可能的实现方式中,所述第一计算图还包括至少一个聚合算子,所述第一计算图还用于定义所述多个第一算子与所述至少一个聚合算子之间数据的输入关系和输出关系;
所述响应于接收到所述第二训练节点发送的所述聚合梯度和所述第一训练节点训练出的所述第一算子的第一梯度,所述第一训练节点聚合所述第一梯度和所述第二算子的聚合梯度,以得到所述第一算子的聚合梯度,可以包括:
响应于接收到所述第二训练节点发送的所述聚合梯度和所述第一训练节点训练出的所述第一算子的第一梯度,所述第一训练节点通过所述聚合算子聚合所述第一梯度和所述第二算子的聚合梯度,以得到所述第一算子的聚合梯度。
该种可能的实现方式中第一计算图中还包括了聚合算子,以及用于表示第一算子和聚合算子之间输入关系或输出关系的第二边。聚合算子用于执行聚合和发送操作,可以称为 (all-reduce)算子。因为每个训练节点上的计算图都是相同的,各训练节点的计算图中包含了聚合算子和第二边,就可以在第一算子输出的第一梯度通过第二边到达聚合算子后,通过聚合算子执行梯度聚合以及聚合后的第二梯度的发送。由该种可能的实现方式可知,在第一算子输出第一梯度给聚合算子后,聚合算子直接可以执行聚合和发送的操作,在减少了通信开销的情况下,还提高了模型训练的效率。
在第二方面的一种可能的实现方式中,所述聚合算子与N个第一算子之间具有输入关系和输出关系,N为大于1的整数;
所述响应于接收到所述第二训练节点发送的所述聚合梯度和所述第一训练节点训练出的所述第一算子的第一梯度,所述第一训练节点通过所述聚合算子聚合所述第一梯度和所述第二算子的聚合梯度,以得到所述第一算子的聚合梯度,可以包括:
所述第一训练节点确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,其中,每个第一算子输出一个第一梯度;
所述第一训练节点通过所述聚合算子将N个第一算子各自输出的第一梯度与对应的所述第二算子的聚合梯度进行聚合,以得到所述N个第一算子各自的聚合梯度。
该种可能的实现方式中,聚合算子可以是至少一个聚合算子中的任意一个,一个聚合算子可以关联多个第一算子,这样该聚合算子就可以同时为这多个第一算子的第一梯度执行梯度聚合。这种1对N,N大于1的方式,可以减少聚合和发送次数,从而节省计算资源和通信资源。
在第二方面的一种可能的实现方式中,所述第一训练节点确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,可以包括:
所述第一训练节点检测所述聚合算子接收的第一梯度的数量;
若所述第一梯度的数量与所述聚合算子所连接的N个第一算子的数量相同,则所述第一训练节点确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
该种可能的实现方式中,可以检测聚合算子接收到的第一梯度的数量的情况来确定是否要进行聚合和发送操作。实现了聚合和发送管理的多样化。
在第二方面的一种可能的实现方式中,所述第一训练节点确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,可以包括:
所述第一训练节点检测所述第一算子的位图中所述N个第一算子的指示位,所述位图包括所述第一计算图中每个第一算子的指示位,其中每个指示位表示该第一算子的第一梯度的就绪状态,所述就绪状态用于指示所述聚合算子已接收到所述第一梯度或未接收到所述第一梯度;
若所述N个第一算子的指示位上的就绪状态都指示各自的第一梯度已就绪,则所述第一训练节点确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
该种可能的实现方式中,通过位图的方式来检测聚合算子接收到第一梯度的情况来确定是否要进行聚合和发送操作。实现了聚合和发送管理的多样化。
在第二方面的一种可能的实现方式中,当所述聚合算子接收到所述第一算子的第一梯度,则所述第一训练节点将所述第一算子的指示位上的就绪状态从指示所述聚合算子未接收到所述第一梯度修改为所述聚合算子已接收到所述第一梯度。
该种可能的实现方式中,要根据聚合算子接收第一梯度的情况,及时修改位图,从而确保位图上的就绪状态与聚合算子接收第一梯度的情况保持一致。
在第二方面的一种可能的实现方式中,响应于向下游的训练节点发送所述N个第一算子各自的聚合梯度,将所述第一训练节点所述N个第一算子各自的指示位上的就绪状态从指示所述聚合算子已接收到所述第一梯度修改为聚合算子未接收到所述第一梯度。
该种可能的实现方式中,在聚合后的聚合梯度被发送后,说明本轮产生的第一梯度已经不存在,要及时修改位图上第一梯度的就绪状态,以便进入下一轮训练。
在第二方面的一种可能的实现方式中,所述第一训练节点确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,可以包括:
所述第一训练节点检测所述聚合算子接收到的所述第一梯度的数据量;
若所述第一梯度的数据量已达到所述聚合算子的聚合数据量阈值,则所述第一训练节点确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
该种可能的实现方式中,可以通过检测数据量的方式来确定聚合算子接收N个第一梯度的情况,从而确定是否要进行聚合和发送操作。实现了聚合和发送管理的多样化。
本申请第三方面提供一种模型训练中梯度聚合的方法,该方法应用于模型训练系统中的第一训练节点,该第一训练节点为所述模型训练系统中的任一个训练节点,该模型训练系统包括至少两个训练节点,该至少两个训练节点形成环状传输路径,第二训练节点为所述环状传输路径上位于第一训练节点上游的训练节点,每个训练节点上都包括一份相同的训练模型的计算图,所述每个训练节点根据所述训练节点上的计算图处理训练数据,所述计算图用于定义多个算子的计算逻辑以及所述多个算子之间数据的输入关系和输出关系,该方法可以包括:
将第一训练数据输入第一计算图,所述第一计算图为所述第一训练节点上的所述训练模型的计算图,所述第一计算图包括多个第一算子;
接收所述第二训练节点发送的第二计算图中与所述第一算子对应的算子的梯度,所述第二计算图包括多个算子,所述第二计算图中的算子与所述第一计算图中的算子一一对应;
当所述第一计算图中的第一算子输出第一梯度时,聚合所述第二计算图中与所述第一算子对应的算子的梯度和所述第一梯度,以得到所述第一算子的第二梯度;
向位于所述第一训练节点下游的训练节点发送所述第二梯度,所述第二梯度用于被所述下游的训练节点进行梯度聚合。
上述第三方面中,模型训练系统是指用于例如深度神经网络模型训练的系统。该系统中至少两个训练节点可以包括两个训练节点或多个训练节点。其中,节点可被认为是处理单元,具体的,节点可以为硬件设备,或运行在硬件设备上的虚拟机或容器或实例。当有两个训练节点时,这两个训练节点中的第二训练节点可以认为是训练的起始节点,在启动训练后,该第一训练节点和第二训练节点可以互为上游和下游的关系,训练过程最后会结束在起始节点上,例如:有训练节点1和训练节点2,这两个训练节点环状传输路径为训练节点1->训练节点2->训练节点1,形成闭合环。当有多个训练节点时,该多个训练节点形成环状传输路径,例如:有训练节点1、训练节点2、训练节点3和训练节点4,这四个训练节点的环状传输路径为训练节点1->训练节点2->训练节点3->训练节点4->训练节点1,形成闭合环。在模型训练过程中,上述至少两个训练节点中的每个训练节点都参与模型训练,每个训练节点上都有一份训练模型的计算图,然后每个训练节点使用不同的训练数据进行训练。训练模型转换为计算图的过程可理解为:训练模型中会有多层,每层都会包含一个或多个计算逻辑,每个计算逻辑可以对应一个算子,各个计算逻辑之间会有数据的输入或输出关系,计算逻辑之间的输入关系或输出关系可以用边的形式表示,这样就可以将训练模型转换为包括多个算子和边的计算图,边用于连接不同算子,该计算图中,用于执行梯度计算的算子可以称为第一算子,连接各第一算子之间的边称为第一边。其中,算子可被认为是执行任务的计算单元,在模型训练系统中,算子可以为处理训练数据的计算单元或处理单元,算子可具体由软件模块实现或者由硬件电路实现或者由软件模块和硬件电路结合后共同实现。训练数据的类型可以为图像、音频或视频等多媒体数据。
上述第三方面中,第一训练节点上的训练模型的计算图可以称为第一计算图,第二训练节点上的训练模型的计算图可以称为第二计算图,第一计算图和第二计算图是相同的,只是位于不同的训练节点上。若第二训练节点是起始节点,且是第一次发送梯度,则该第二计算图中所述第一算子的梯度是第二训练节点使用第二训练数据计算得到的第一算子的第一梯度,若第二训练节点不是起始节点,或者是起始节点但不是首次发送梯度,则该第二计算图中所述第一算子的梯度是该第二训练节点聚合后的梯度。该第三方面中,将第一算子计算后输出的梯度称为第一梯度,将聚合后的梯度称为第二梯度,每个训练节点向下游的训练节点发送的都是第二梯度。
上述第三方面中,模型训练系统中的每个训练节点的计算图相同,因此,第一训练节点的第一计算图中的算子于第二训练节点的第二计算图中的算子是一一对应的。例如,第一计算图中的算子A与第二计算图中对应于算子A的算子a的计算逻辑相同。
该第三方面所提供的梯度聚合,环上的各训练节点在梯度聚合前只需要确定自身的第一算子的第一梯度输出,就可以执行梯度聚合的过程。不需要向中心节点发送该第一梯度,由该中心节点统一执行聚合。也不需要在聚合前向环状传输路径上作为中心节点的一个训练节点报告第一梯度已就绪,在接收到该中心节点返回的聚合指令后才能开始执行梯度聚合。由此可见,该第三方面提供的模型训练中梯度聚合的方法,可以有效的减少各训练节点与中心节点之间交互产生的通信开销。
在第三方面的一种可能的实现方式中,该第一计算图还包括至少一个第二算子,所述第一计算图还用于定义所述多个第一算子与所述至少一个第二算子之间数据的输入关系和输出关系;
上述步骤:当所述第一计算图中的第一算子输出第一梯度时,聚合所述第二计算图中与所述第一算子对应的算子的梯度和所述第一梯度,以得到所述第一算子的第二梯度,包括:
当所述第二算子接收到所述第一算子输出的第一梯度时,通过所述第二算子将所述第一梯度和所述第二计算图中与所述第一算子对应的算子的梯度进行聚合,以得到所述第一算子的第二梯度;
上述步骤:向位于所述第一训练节点下游的训练节点发送所述第二梯度,可以包括:
通过所述第二算子向位于所述第一训练节点下游的训练节点发送所述第二梯度。
该种可能的实现方式中第一计算图中还包括了第二算子,以及用于表示第一算子和第二算子之间输入关系或输出关系的第二边。第二算子用于执行聚合和发送操作,可以称为 (all-reduce)算子。因为每个训练节点上的计算图都是相同的,各训练节点的计算图中包含了第二算子和第二边,就可以在第一算子输出的第一梯度通过第二边到达第二算子后,通过第二算子执行梯度聚合以及聚合后的第二梯度的发送。由该种可能的实现方式可知,在第一算子输出第一梯度给第二算子后,第二算子直接可以执行聚合和发送的操作,在减少了通信开销的情况下,还提高了模型训练的效率。
在第三方面的一种可能的实现方式中,第二算子与N个第一算子之间具有输入关系和输出关系,N为大于1的整数;
上述步骤:当所述第二算子接收到所述第一算子输出的第一梯度时,通过所述第二算子将所述第一梯度和所述第二计算图中与所述第一算子对应的算子的梯度进行聚合,以得到所述第一算子的第二梯度,可以包括:
确定所述第二算子接收到所述N个第一算子输出的N个第一梯度,其中,每个第一算子输出一个第一梯度;
通过所述第二算子将N个第一算子各自输出的第一梯度与对应的所述第二计算图中与所述N个第一算子各自对应的算子的梯度进行聚合,以得到所述N个第一算子各自的第二梯度;
上述步骤:通过所述第二算子向位于所述第一训练节点下游的训练节点发送所述第二梯度,可以包括:
通过所述第二算子向位于所述第一训练节点下游的训练节点发送所述N个第一算子各自的第二梯度。
该种可能的实现方式中,第二算子可以是至少一个第二算子中的任意一个,一个第二算子可以关联多个第一算子,这样该第二算子就可以同时为这多个第一算子的第一梯度执行梯度聚合。这种1对N,N大于1的方式,可以减少聚合和发送次数,从而节省计算资源和通信资源。
在第三方面的一种可能的实现方式中,上述步骤:确定所述第二算子接收到所述N个第一算子输出的N个第一梯度,可以包括:
检测所述第二算子接收的第一梯度的数量;
若检测到所述第一梯度的数量与所述第二算子所连接的N个第一算子的数量相同,则确定所述第二算子接收到所述N个第一算子输出的N个第一梯度。
该种可能的实现方式中,可以检测第二算子接收到的第一梯度的数量的情况来确定是否要进行聚合和发送操作。实现了聚合和发送管理的多样化。
在第三方面的一种可能的实现方式中,上述步骤:确定所述第二算子接收到所述N个第一算子输出的N个第一梯度,可以包括:
检测所述第一算子的位图中所述N个第一算子的指示位,所述位图包括所述第一计算图中每个第一算子的指示位,其中每个指示位表示该第一算子的第一梯度的就绪状态,所述就绪状态用于指示所述第二算子已接收到所述第一梯度或未接收到所述第一梯度;
若所述N个第一算子的指示位上的就绪状态都指示各自的第一梯度已就绪,则确定所述第二算子接收到所述N个第一算子输出的N个第一梯度。
该种可能的实现方式中,通过位图的方式来检测第二算子接收到第一梯度的情况来确定是否要进行聚合和发送操作。实现了聚合和发送管理的多样化。
在第三方面的一种可能的实现方式中,该方法还可以包括:
当所述第二算子接收到所述第一算子的第一梯度,则将所述第一算子的指示位上的就绪状态从指示所述第二算子未接收到所述第一梯度修改为所述第二算子已接收到所述第一梯度。
该种可能的实现方式中,要根据第二算子接收第一梯度的情况,及时修改位图,从而确保位图上的就绪状态与第二算子接收第一梯度的情况保持一致。
在第三方面的一种可能的实现方式中,向所述下游的训练节点发送所述N个第一算子各自的第二梯度之后,该方法还可以包括:
将所述N个第一算子各自的指示位上的就绪状态从指示所述第二算子已接收到所述第一梯度修改为第二算子未接收到所述第一梯度。
该种可能的实现方式中,在聚合后的第二梯度被发送后,说明本轮产生的第一梯度已经不存在,要及时修改位图上第一梯度的就绪状态,以便进入下一轮训练。
在第三方面的一种可能的实现方式中,该方法还可以包括:
确定所述第一计算图中的多个第一算子包括至少两条并列的路径;
确定所述位图上所述多个第一算子的指示位按照所述至少两条并列的路径中每条路径上所包含的梯度计算量之和从小到大的顺序,以及该条路径上的第一算子之间的依赖关系排列;
所述通过所述第二算子向位于所述第一训练节点下游的训练节点发送所述N个第一算子各自的第二梯度,包括:
按照所述每条路径上的梯度计算量之和从小到大的顺序向下游的训练节点发送各条路径上的N个第一算子各自的第二梯度。
该种可能的实现方式中,当第一计算图上有两条并列的路径时,表示不同的路径上的第一算子可以并行计算,因为每条路径上的第一算子在梯度计算过程中的计算量不同,计算量小的通常先计算完,那么就可以先发送计算量小的路径上的第二梯度。这样在不影响梯度计算的前提下,既可以减少每次发送的第二梯度的数据量,还可以提高第二梯度发送的成功率。
在第三方面的一种可能的实现方式中,上述步骤:确定所述第二算子接收到所述N个第一算子输出的N个第一梯度,可以包括:
检测所述第二算子接收到的所述第一梯度的数据量;
若检测到所述第一梯度的数据量已达到所述第二算子的聚合数据量阈值,则确定所述第二算子接收到所述N个第一算子输出的N个第一梯度。
该种可能的实现方式中,可以通过检测数据量的方式来确定第二算子接收N个第一梯度的情况,从而确定是否要进行聚合和发送操作。实现了聚合和发送管理的多样化。
本申请第四方面提供一种模型训练系统,包括至少两个训练节点,该至少两个训练节点形成环状传输路径,第一训练节点为所述模型训练系统中的任一个训练节点,第二训练节点为所述环状传输路径上位于所述第一训练节点上游的训练节点,每个训练节点上都包括一份相同的训练模型的计算图,所述每个训练节点根据所述训练节点上的计算图处理训练数据,所述计算图用于定义多个算子的计算逻辑以及所述多个算子之间数据的输入关系和输出关系。
所述第一训练节点将第一训练数据输入第一计算图,所述第一计算图为所述第一训练节点上的所述训练模型的计算图,所述第一计算图包括多个第一算子;
所述第二训练节点将第二训练数据输入第二计算图,所述第二计算图为所述第二训练节点上的所述训练模型的计算图,所述第二计算图包括多个算子,所述第二计算图中的算子与所述第一计算图中的算子一一对应;
所述第一训练节点接收所述第二训练节点发送的所述第二计算图中与所述第一算子对应的算子的梯度;
当所述第一计算图中的第一算子输出第一梯度时,所述第一训练节点聚合所述第二计算图中与所述第一算子对应的算子的梯度和所述第一梯度,以得到所述第一算子的第二梯度;
所述第一训练节点向位于所述第一训练节点下游的训练节点发送所述第二梯度,所述第二梯度用于被所述下游的训练节点进行梯度聚合。
上述第四方面中,模型训练系统是指用于例如深度神经网络模型训练的系统。该系统中至少两个训练节点可以包括两个训练节点或多个训练节点。当有两个训练节点时,这两个训练节点中的第二训练节点可以认为是训练的起始节点,在启动训练后,该第一训练节点和第二训练节点可以互为上游和下游的关系,训练过程最后会结束在起始节点上,例如:有训练节点1和训练节点2,这两个训练节点环状传输路径为训练节点1->训练节点2->训练节点1,形成闭合环。当有多个训练节点时,该多个训练节点形成环状传输路径,例如:有训练节点1、训练节点2、训练节点3和训练节点4,这四个训练节点的环状传输路径为训练节点1->训练节点2->训练节点3->训练节点4->训练节点1,形成闭合环。在模型训练过程中,上述至少两个训练节点中的每个训练节点都参与模型训练,每个训练节点上都有一份训练模型的计算图,然后每个训练节点使用不同的训练数据进行训练。训练模型和转换为计算图的过程可理解为:训练模型中会有多层,每层都会包含一个或多个计算逻辑,每个计算逻辑可以对应一个算子,各个计算逻辑之间会有数据的输入或输出关系,计算逻辑之间的输入关系或输出关系可以用边的形式表示,这样就可以将训练模型转换为包括多个算子和边的计算图,边用于连接不同算子,该计算图中,用于执行梯度计算的算子可以称为第一算子,连接各第一算子之间的边称为第一边。
上述第四方面中,第一训练节点上的训练模型的计算图可以称为第一计算图,第二训练节点上的训练模型的计算图可以称为第二计算图,第一计算图和第二计算图是相同的,只是位于不同的训练节点上。若第二训练节点是起始节点,且是第一次发送梯度,则该第二计算图中所述第一算子的梯度是第二训练节点使用第二训练数据计算得到的第一算子的第一梯度,若第二训练节点不是起始节点,或者是起始节点但不是首次发送梯度,则该第二计算图中所述第一算子的梯度是该第二训练节点聚合后的梯度。该第四方面中,将每个训练节点上第一算子计算后输出的梯度称为第一梯度,将聚合后的梯度称为第二梯度,每个训练节点向下游的训练节点发送的都是第二梯度。
该第四方面所提供的梯度聚合,环上的各训练节点在梯度聚合前只需要确定自身的第一算子的第一梯度输出,就可以执行梯度聚合的过程。不需要向中心节点发送该第一梯度,由该中心节点统一执行聚合。也不需要在聚合前向环状传输路径上作为中心节点的一个训练节点报告第一梯度已就绪,在接收到该中心节点返回的聚合指令后才能开始执行梯度聚合。由此可见,该第四方面提供的模型训练中梯度聚合的方法,可以有效的减少各训练节点与中心节点之间交互产生的通信开销。
在第四方面的一种可能的实现方式中,所述第一训练节点使用所述第二梯度更新所述第一计算图中所述第一算子对应的权重。其中,训练节点上的训练模型可转换成包括多个算子的计算图,算子对应的权重指的是训练模型的权重。
该种可能的实现方式中,得到聚合后的第二梯度后,要用该第二梯度更新第一算子对应的权重,从而使训练模型向收敛更进一步。一个第一算子可以对应一个或多个权重,但不管有多少个权重,该第一算子就会输出多少个第一梯度,也就会聚合产生多少个第二梯度。例如:该第一算子对应有500个权重,那么该第一算子就会产生500个第一梯度,聚合后也就会产生500个第二梯度,然后分别对应更新相应的权重。这500个梯度的排列顺序可以按照权重的顺序排列。权重更新的过程可以是用本轮当前的权重减去本轮产生的第二梯度,得到更新后的权重,该更新后的权重用于下一轮训练。
在第四方面的一种可能的实现方式中,所述第一计算图还包括至少一个第二算子,所述第一计算图还用于定义所述至少一个第二算子以及所述多个第一算子与所述至少一个第二算子之间数据的输入关系和输出关系。
所述当所述第一计算图中的第一算子输出第一梯度时,所述第一训练节点聚合所述第二计算图中与所述第一算子对应的算子的梯度和所述第一梯度,以得到所述第一算子的第二梯度,可以包括:
所述第一训练节点当所述第二算子接收到所述第一算子输出的第一梯度时,通过所述第二算子将所述第一梯度和所述第二计算图中与所述第一算子对应的算子的梯度进行聚合,以得到所述第一算子的第二梯度;
所述第一训练节点向位于所述第一训练节点下游的训练节点发送所述第二梯度,可以包括:
所述第一训练节点通过所述第二算子向位于所述第一训练节点下游的训练节点发送所述第二梯度。
该种可能的实现方式中,第一计算图中还包括了第二算子,以及用于表示第一算子和第二算子之间输入关系或输出关系的第二边。第二算子用于执行聚合和发送操作,可以称为(all-reduce)算子。各训练节点的计算图中包含了第二算子和第二边,就可以在第一算子输出的第一梯度通过第二边到达第二算子后,通过第二算子执行梯度聚合以及聚合后的第二梯度的发送。由该种可能的实现方式可知,在第一算子输出第一梯度给第二算子后,第二算子直接可以执行聚合和发送的操作,在减少了通信开销的情况下,还提高了模型训练的效率。
在第四方面的一种可能的实现方式中,所述第二算子与N个第一算子之间具有输入关系和输出关系,N为大于1的整数;
所述第一训练节点在所述第二算子接收到所述第一算子输出的第一梯度时,通过所述第二算子将所述第一梯度和所述第二计算图中与所述第一算子对应的算子的梯度进行聚合,以得到所述第一算子的第二梯度,可以包括:
所述第一训练节点确定所述第二算子接收到所述N个第一算子输出的N个第一梯度,其中,每个第一算子输出一个第一梯度;
所述第一训练节点通过所述第二算子将N个第一算子各自输出的第一梯度与对应的所述第二计算图中与所述N个第一算子各自对应的算子的梯度进行聚合,以得到所述N个第一算子各自的第二梯度;
所述第一训练节点通过所述第二算子向位于所述第一训练节点下游的训练节点发送所述第二梯度,可以包括:
所述第一训练节点通过所述第二算子向位于所述第一训练节点下游的训练节点发送所述N个第一算子各自的第二梯度。
该种可能的实现方式中,第二算子可以是至少一个第一算子中的任意一个,一个第二算子可以关联多个第一算子,这样该第二算子就可以同时为这多个第一算子的第一梯度执行梯度聚合。这种1对N,N大于1的方式,可以减少聚合和发送次数,从而节省计算资源和通信资源。
在第四方面的一种可能的实现方式中,所述第一训练节点确定所述第二算子接收到所述N个第一算子输出的N个第一梯度,可以包括:
所述第一训练节点检测所述第二算子接收的第一梯度的数量;
若检测到所述第一梯度的数量与所述第二算子所连接的N个第一算子的数量相同,则所述第一训练节点确定所述第二算子接收到所述N个第一算子输出的N个第一梯度。
该种可能的实现方式中,可以通过第二算子接收第一梯度的数量的情况来确定是否要进行聚合和发送操作。实现了聚合和发送管理的多样化。
在第四方面的一种可能的实现方式中,所述第一训练节点确定所述第二算子接收到所述N个第一算子输出的N个第一梯度,可以包括:
所述第一训练节点检测所述第一算子的位图中所述N个第一算子的指示位,所述位图包括所述第一计算图中每个第一算子的指示位,其中每个指示位表示该第一算子的第一梯度的就绪状态,所述就绪状态用于指示所述第二算子已接收到所述第一梯度或未接收到所述第一梯度;
若所述N个第一算子的指示位上的就绪状态都指示各自的第一梯度已就绪,则所述第一训练节点确定所述第二算子接收到所述N个第一算子输出的N个第一梯度。
该种可能的实现方式中,通过位图的方式来检测第二算子接收N个第一梯度的情况来确定是否要进行聚合和发送操作,实现了聚合和发送管理的多样化。
在第四方面的一种可能的实现方式中,所述模型训练系统还包括:
当所述第二算子接收到所述第一算子的第一梯度,则所述第一训练节点将所述第一算子的指示位上的就绪状态从指示所述第二算子未接收到所述第一梯度修改为所述第二算子已接收到所述第一梯度。
该种可能的实现方式中,要根据第二算子接收第一梯度的情况及时修改位图,从而确保位图上的就绪状态与第一梯度的到达情况保持一致。
在第四方面的一种可能的实现方式中,所述第一训练节点向所述下游的训练节点发送所述N个第一算子各自的第二梯度之后,所述模型训练系统还包括:
所述第一训练节点将所述N个第一算子各自的指示位上的就绪状态从指示所述第二算子已接收到所述第一梯度修改为第二算子未接收到所述第一梯度。
该种可能的实现方式中,在聚合后的第二梯度被发送后,说明本轮产生的第一梯度已经不存在,要及时修改位图上第一梯度的就绪状态,以便进入下一轮训练。
在第四方面的一种可能的实现方式中,所述模型训练系统还包括:
所述第一训练节点确定所述第一计算图中的多个第一算子包括至少两条并列的路径;
所述第一训练节点确定所述位图上所述多个第一算子的指示位按照所述至少两条并列的路径中每条路径上所包含的梯度计算量之和从小到大的顺序,以及该条路径上的第一算子之间的依赖关系排列;
所述第一训练节点通过所述第二算子向位于所述第一训练节点下游的训练节点发送所述N个第一算子各自的第二梯度,可以包括:
所述第一训练节点按照所述每条路径上的梯度计算量之和从小到大的顺序向下游的训练节点发送各条路径上的N个第一算子各自的第二梯度。
该种可能的实现方式中,当第一计算图上有两条并列的路径时,表示不同的路径上的第一算子可以并行计算,因为每条路径上的第一算子在梯度计算过程中的计算量不同,计算量小的通常先计算完,那么就可以先发送计算量小的路径上的第二梯度。这样在不影响梯度计算的前提下,既可以减少每次发送的第二梯度的数据量,还可以提高第二梯度发送的成功率。
在第四方面的一种可能的实现方式中,所述第一训练节点确定所述第二算子接收到所述N个第一算子输出的N个第一梯度,可以包括:
所述第一训练节点检测所述第二算子接收到的所述第一梯度的数据量;
若检测到所述第一梯度的数据量已达到所述第二算子的聚合数据量阈值,则所述第一训练节点确定所述第二算子接收到所述N个第一算子输出的N个第一梯度。
该种可能的实现方式中,可以通过检测数据量的方式来确定第二算子接收N个第一梯度的情况,从而确定是否要进行聚合和发送操作,实现了聚合和发送管理的多样化。
本申请第五方面提供一种模型训练中梯度聚合的装置,该模型训练中梯度聚合的装置具有实现上述第一方面或第一方面任意一种可能实现方式的方法的功能。或者,该模型训练中梯度聚合的装置具有实现上述第三方面或第三方面任意一种可能实现方式的方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块,例如:接收单元、处理单元和发送单元。
本申请第六方面提供一种计算机设备,该计算机设备包括至少一个处理器、存储器、输入/输出(input/output,I/O)接口以及存储在存储器中并可在处理器上运行的计算机执行指令,当所述计算机执行指令被所述处理器执行时,所述处理器执行如上述第一方面或第一方面任意一种可能的实现方式所述的方法,或者,所述处理器执行如上述第三方面或第三方面任意一种可能的实现方式所述的方法。
本申请第七方面提供一种存储一个或多个计算机执行指令的计算机可读存储介质,当所述计算机执行指令被处理器执行时,所述处理器执行如上述第一方面或第一方面任意一种可能的实现方式所述的方法,或者,所述处理器执行如上述第三方面或第三方面任意一种可能的实现方式所述的方法。
本申请第八方面提供一种存储一个或多个计算机执行指令的计算机程序产品,当所述计算机执行指令被所述处理器执行时,所述处理器执行上述第一方面或第一方面任意一种可能实现方式的方法,或者,所述处理器执行如上述第三方面或第三方面任意一种可能的实现方式所述的方法。
本申请第九方面提供了一种芯片系统,该芯片系统包括处理器,用于支持训练节点实现上述第一方面或第一方面任意一种可能的实现方式中所涉及的功能,或者,用于支持训练节点实现上述第三方面或第三方面任意一种可能的实现方式中所涉及的功能。在一种可能的设计中,芯片系统还可以包括存储器,存储器,用于保存训练节点必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
其中,第五方面和第九方面或者其中任一种可能实现方式所带来的技术效果可参见第一方面或第一方面不同可能实现方式所带来的技术效果,以及第三方面或第三方面不同可能实现方式所带来的技术效果,此处不再赘述。
本申请实施例提供的梯度聚合方案,环上的各训练节点在梯度聚合前只需要确定自身的第一算子的第一梯度输出,就可以执行梯度聚合的过程。不需要向中心节点发送该第一梯度,由该中心节点统一执行聚合。也不需要在聚合前向环状传输路径上作为中心节点的一个训练节点报告第一梯度已就绪,在接收到该中心节点返回的聚合指令后才能开始执行梯度聚合。由此可见,本申请实施例提供的模型训练中梯度聚合的方法,可以有效的减少各训练节点与中心节点之间交互产生的通信开销。
附图说明
图1为本申请实施例提供的一种人工智能主体框架示意图;
图2为本申请实施例提供的一种应用环境示意图;
图3为本申请实施例提供的一种神经网络处理器的结构示意图;
图4为本申请实施例提供的两个训练节点的模型训练系统的一结构示意图;
图5为本申请实施例提供的多个训练节点的模型训练系统的一结构示意图;
图6为本申请实施例提供的计算图的一示例示意图;
图7为本申请实施例提供的多个训练节点的模型训练系统的另一结构示意图;
图8为本申请实施例提供的模型训练中梯度聚合的方法的一实施例示意图;
图9为本申请实施例提供的计算图的另一示例示意图;
图10为本申请实施例提供的计算图的另一示例示意图;
图11A至图11C为本申请实施例提供的位图的三个示例示意图;
图12为本申请实施例提供的位图的另示例示意图;
图13为本申请实施例提供的计算机设备作为训练节点的一架构示意图;
图14为本申请实施例提供的虚拟机作为训练节点的一架构示意图;
图15为本申请实施例提供的一个计算机设备中多个处理器作为训练节点的一架构示意图;
图16为本申请实施例提供的一软件架构示意图;
图17为本申请实施例提供的模型训练中梯度聚合的装置的一实施例示意图;
图18为本申请实施例提供的计算机设备的一实施例示意图。
具体实施方式
下面结合附图,对本申请的实施例进行描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请实施例提供一种模型训练系统以及模型训练中梯度聚合的方法,可以减小梯度聚合过程中的通信开销。本申请实施例还提供了相应的装置。以下分别进行详细说明。
图1示出一种人工智能主体框架示意图,该主体框架描述了人工智能系统总体工作流程,适用于通用的人工智能领域需求。
下面从“智能信息链”(水平轴)和“IT价值链”(垂直轴)两个维度对上述人工智能主题框架进行阐述。
“智能信息链”反映从数据的获取到处理的一列过程。举例来说,可以是智能信息感知、智能信息表示与形成、智能推理、智能决策、智能执行与输出的一般过程。在这个过程中,数据经历了“数据—信息—知识—智慧”的凝练过程。
“IT价值链”从人智能的底层基础设施、信息(提供和处理技术实现)到系统的产业生态过程,反映人工智能为信息技术产业带来的价值。
(1)基础设施:
基础设施为人工智能系统提供计算能力支持,实现与外部世界的沟通,并通过基础平台实现支撑。通过传感器与外部沟通;计算能力由智能芯片(中央处理器(centralprocessing unit,CPU)、神经网络出了器(network processing unit,NPU)、图形处理器(graphic processing unit GPU)、专用集成电路(application specific integratedcircuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)等硬件加速芯片)提供;基础平台包括分布式计算框架及网络等相关的平台保障和支持,可以包括云存储和计算、互联互通网络等。举例来说,传感器和外部沟通获取数据,这些数据提供给基础平台提供的分布式计算系统中的智能芯片进行计算。
(2)数据
基础设施的上一层的数据用于表示人工智能领域的数据来源。数据涉及到图形、图像、语音、文本,还涉及到传统设备的物联网数据,包括已有系统的业务数据以及力、位移、液位、温度、湿度等感知数据。
(3)数据处理
数据处理通常包括数据训练,机器学习,深度学习,搜索,推理,决策等方式。
其中,机器学习和深度学习可以对数据进行符号化和形式化的智能信息建模、抽取、预处理、训练等。
推理是指在计算机或智能系统中,模拟人类的智能推理方式,依据推理控制策略,利用形式化的信息进行机器思维和求解问题的过程,典型的功能是搜索与匹配。
决策是指智能信息经过推理后进行决策的过程,通常提供分类、排序、预测等功能。
(4)通用能力
对数据经过上面提到的数据处理后,进一步基于数据处理的结果可以形成一些通用的能力,比如可以是算法或者一个通用系统,例如,翻译,文本的分析,计算机视觉的处理,语音识别,图像的识别等等。
(5)智能产品及行业应用
智能产品及行业应用指人工智能系统在各领域的产品和应用,是对人工智能整体解决方案的封装,将智能信息决策产品化、实现落地应用,其应用领域主要包括:智能制造、智能交通、智能家居、智能医疗、智能安防、自动驾驶,平安城市,智能终端等。
参见附图2,本申请实施例提供了一种系统架构200。数据采集设备260用于采集训练数据并存入数据库230,训练设备220基于数据库230中维护的训练数据生成目标模型/规则201。下面将更详细地描述训练设备220如何基于训练数据得到目标模型/规则201,目标模型/规则201能够用于图像识别、视频分类、语音识别和语言翻译等应用场景。
该目标模型/规则201可以是基于深度神经网络得到的,下面对深度神经网络进行介绍。
深度神经网络中的每一层的工作可以用数学表达式来描述:从物理层面深度神经网络中的每一层的工作可以理解为通过五种对输入空间(输入向量的集合)的操作,完成输入空间到输出空间的变换(即矩阵的行空间到列空间),这五种操作包括:1、升维/降维;2、放大/缩小;3、旋转;4、平移;5、“弯曲”。其中1、2、3的操作由完成,4的操作由+b完成,5的操作则由a()来实现。这里之所以用“空间”二字来表述是因为被分类的对象并不是单个事物,而是一类事物,空间是指这类事物所有个体的集合。其中,W是权重向量,该向量中的每一个值表示该层神经网络中的一个神经元的权重值。该向量W决定着上文所述的输入空间到输出空间的空间变换,即每一层的权重W控制着如何变换空间。训练深度神经网络的目的,也就是最终得到训练好的神经网络的所有层的权重矩阵(由很多层的向量W形成的权重矩阵)。因此,神经网络的训练过程本质上就是学习控制空间变换的方式,更具体的就是学习权重矩阵。
因为希望深度神经网络的输出尽可能的接近真正想要预测的值,所以可以通过比较当前网络的预测值和真正想要的目标值,再根据两者之间的差异情况来更新每一层神经网络的权重向量(当然,在第一次更新之前通常会有初始化的过程,即为深度神经网络中的各层预先配置参数),比如,如果网络的预测值高了,就调整权重向量让它预测低一些,不断的调整,直到神经网络能够预测出真正想要的目标值。因此,就需要预先定义“如何比较预测值和目标值之间的差异”,这便是损失函数(loss function)或目标函数(objectivefunction),它们是用于衡量预测值和目标值的差异的重要方程。其中,以损失函数举例,损失函数的输出值(loss)越高表示差异越大,那么深度神经网络的训练就变成了尽可能缩小这个loss的过程。
训练设备220得到的目标模型/规则可以应用不同的系统或设备中。在附图2中,执行设备210配置有I/O接口212,与外部设备进行数据交互,“用户”可以通过客户设备240 向I/O接口212输入数据。
执行设备210可以调用数据存储系统250中的数据、代码等,也可以将数据、指令等存入数据存储系统250中。
计算模块211使用目标模型/规则201对输入的数据进行处理,以文本类型的语言翻译为例,计算模块211可以对第一语言的文本中的语句进行解析,得到每条语句中的主语、谓语和宾语等词语。
关联功能模块213可以对计算模块211中第一条语句中主语、谓语和宾语等词语翻译成第二语言,再结合第二语言的语法逻辑组织该条语句。
关联功能模块214可以对计算模块211中第二条语句中主语、谓语和宾语等词语翻译成第二语言,再结合第二语言的语法逻辑组织该条语句。
最后,I/O接口212将处理结果返回给客户设备240,提供给用户。
更深层地,训练设备220可以针对不同的目标,基于不同的数据生成相应的目标模型/ 规则201,以给用户提供更佳的结果。
在附图2中所示情况下,用户可以手动指定输入执行设备210中的数据,例如,在I/O 接口212提供的界面中操作。另一种情况下,客户设备240可以自动地向I/O接口212输入数据并获得结果,如果客户设备240自动输入数据需要获得用户的授权,用户可以在客户设备240中设置相应权限。用户可以在客户设备240查看执行设备210输出的结果,具体的呈现形式可以是显示、声音、动作等具体方式。客户设备240也可以作为数据采集端将采集到训练数据存入数据库230。
值得注意的,附图2仅是本申请实施例提供的一种系统架构的示意图,图中所示设备、器件、模块等之间的位置关系不构成任何限制,例如,在附图2中,数据存储系统250相对执行设备210是外部存储器,在其它情况下,也可以将数据存储系统250置于执行设备 210中。
深度神经网络可以在图3所示的NPU芯片中实现。
图3是本申请实施例提供的一种芯片硬件结构图。
神经网络处理器NPU 50作为协处理器挂载到主CPU(Host CPU)上,由Host CPU分配任务。NPU的核心部分为运算电路503,通过控制器504控制运算电路503提取存储器中的矩阵数据并进行乘法运算。
在一些实现中,运算电路503内部包括多个处理单元(Process Engine,PE)。在一些实现中,运算电路503是二维脉动阵列。运算电路503还可以是一维脉动阵列或者能够执行例如乘法和加法这样的数学运算的其它电子线路。在一些实现中,运算电路503是通用的矩阵处理器。
举例来说,假设有输入矩阵A,权重矩阵B,输出矩阵C。运算电路从权重存储器502中取矩阵B相应的数据,并缓存在运算电路中每一个PE上。运算电路从输入存储器501中取矩阵A数据与矩阵B进行矩阵运算,得到的矩阵的部分结果或最终结果,保存在累加器508accumulator中。
统一存储器506用于存放输入数据以及输出数据。权重数据直接通过存储单元访问控制器505Direct Memory Access Controller,DMAC被搬运到权重存储器502中。输入数据也通过DMAC被搬运到统一存储器506中。
BIU为Bus Interface Unit即,总线接口单元510,用于AXI总线与DMAC和取指存储器509Instruction Fetch Buffer的交互。
总线接口单元510(Bus Interface Unit,简称BIU),用于取指存储器509从外部存储器获取指令,还用于存储单元访问控制器505从外部存储器获取输入矩阵A或者权重矩阵B的原数据。
DMAC主要用于将外部存储器DDR中的输入数据搬运到统一存储器506或将权重数据搬运到权重存储器502中或将输入数据数据搬运到输入存储器501中。
向量计算单元507多个运算处理单元,在需要的情况下,对运算电路的输出做进一步处理,如向量乘,向量加,指数运算,对数运算,大小比较等等。主要用于神经网络中非卷积/FC层网络计算,如Pooling(池化),Batch Normalization(批归一化),Local ResponseNormalization(局部响应归一化)等。
在一些实现种,向量计算单元能507将经处理的输出的向量存储到统一缓存器506。例如,向量计算单元507可以将非线性函数应用到运算电路503的输出,例如累加值的向量,用以生成激活值。在一些实现中,向量计算单元507生成归一化的值、合并值,或二者均有。在一些实现中,处理过的输出的向量能够用作到运算电路503的激活输入,例如用于在神经网络中的后续层中的使用。
控制器504连接的取指存储器(instruction fetch buffer)509,用于存储控制器504使用的指令;
统一存储器506,输入存储器501,权重存储器502以及取指存储器509均为On-Chip存储器。外部存储器私有于该NPU硬件架构。
上述图1至图3描述了人工智能的相关内容,本申请实施例提供了一种模型训练中梯度聚合的方法,以及模型训练系统。本申请实施例所提供的模型训练中梯度聚合的方法可以是基于例如图2中的训练设备220实现的,该训练设备220可以相当于本申请的模型训练系统。需要说明的是本申请实施例所提供的模型训练系统的表现形式可能与上述图2中的训练设备220不同,但本申请实施例所训练的模型可以应用于图1所描述的各种场景中。
下面分别对本申请实施例中提供的模型训练系统以及模型训练中梯度聚合的方法进行介绍。
本申请实施例提供的模型训练系统,包括至少两个训练节点,所述至少两个训练节点形成环状传输路径。第一训练节点为所述模型训练系统中的任一个训练节点,第二训练节点为所述环状传输路径上位于所述第一训练节点上游的训练节点。每个训练节点上都包括一份相同的训练模型的计算图,所述训练模型的计算图用于定义多个第一算子的计算逻辑以及所述多个第一算子之间数据的输入关系和输出关系。
该模型训练系统中可以包括两个训练节点,也可以包括多个训练节点。当包括两个训练节点时,这两个训练节点互相向对方传输数据,也是形成了环状传输路径。当包括多个训练节点时,每个训练节点都会有一个上游节点,有一个下游节点,该训练节点会从上游节点接收数据,向下游节点发送数据,进而形成环状传输路径。下面分别结合图4对两个训练节点的环状传输路径,结合图5对多个训练节点的环状传输路径进行介绍。
如图4所示,该模型训练系统包括的两个训练节点为训练节点0和训练节点1。因为模型训练过程是要执行多次的循环过程,所以需要从一个训练节点启动该循环训练。可以将训练节点0作为启动循环训练的起始节点,在一轮训练中,训练节点0先向训练节点1发送数据,训练节点1再向训练节点0发送数据,完成本轮训练训练节点0->训练节点1->训练节点0的闭环。然后训练节点0再接下来执行下一轮训练。训练节点0向训练节点1发送数据时,训练节点0位于训练节点1的上游,属于训练节点1的上游节点。训练节点1向训练节点0发送数据时,训练节点1位于训练节点0的上游,属于训练节点0的上游节点。也就是说,在该两个训练节点的场景下训练节点1和训练节点0的上下游的关系是相对的,可以理解为:发出数据的训练节点是接收数据的训练节点的上游节点,接收数据的训练节点是发出数据的训练节点的下游节点。本申请实施例中可以将上游节点称为第二训练节点,将下游节点称为第一训练节点。
如图5所示,以该模型训练系统包括训练节点0、训练节点1、训练节点2和训练节点3 这四个训练节点为例。因为模型训练过程是要执行多次的循环过程,所以需要从一个训练节点启动该循环训练。可以将训练节点0作为启动循环训练的起始节点,在一轮训练中,训练节点0先向训练节点1发送数据,训练节点1再向训练节点2发送数据,训练节点2再向训练节点3发送数据,训练节点3再向训练节点0发送数据,完成本轮训练训练节点0->训练节点 1->训练节点2->训练节点3->训练节点0的闭环。然后训练节点0再接下来执行下一轮训练。该图5所示的场景中四个训练节点的上下游关系也可以参阅图4所对应部分的上下游关系进行理解,此处不再重复赘述。当然,该处至少以四个训练节点为例来说明多个训练节点的情况,不对模型训练系统包括的训练节点的数量造成限定。一个模型训练系统中可以包括三个训练节点,也可以包括更多的训练节点,但无论包括多少个训练节点,都是环状传输,各训练节点间的传输原理都与此处介绍的四个训练节点的原理相同。
无论是图4所描述的两个训练节点的模型训练系统,还是图5所描述的多个训练节点的模型训练系统。在模型训练过程中,上述至少两个训练节点中的每个训练节点都参与模型训练,每个训练节点上都有一份训练模型的计算图,然后每个训练节点使用不同的训练数据进行训练。训练模型是可以转换为计算图的,训练模型转换为计算图的过程可理解为:训练模型中会有多层,每层都会包含一个或多个计算逻辑,每个计算逻辑可以对应一个算子(operator,OP),各个计算逻辑之间会有数据的输入或输出关系,计算逻辑之间的输入关系或输出关系可以用边的形式表示,这样就可以将训练模型转换为包括多个算子和边的计算图,边用于连接不同算子。计算图的表现形式可以参阅图6进行理解。图6所示出的计算图包括四个算子,分别为OP1、OP2、OP3和OP4。这四个算子中,OP1向OP2输出数据,则 OP1和OP2之间用一条边连接。OP1向OP3输出数据,则OP1和OP3之间用一条边连接。OP2向OP4 输出数据,则OP2和OP4之间用一条边连接。OP3向OP4输出数据,则OP3和OP4之间用一条边连接。
模型训练系统的每个训练节点上都会有一份训练模型的计算图,以四个训练节点的模型训练系统为例,可以通过图7的形式来表示。为了便于描述,可以将位于第一训练节点上的训练模型的计算图称为第一计算图,将位于第二训练节点上的训练模型的计算图称为第二计算图。可以将输入到第一计算图的训练数据称为第一训练数据,将输入到第二计算图的训练数据称为第二训练数据。
在本申请实施例中各训练节点上的训练模型的计算图可以是该环状传输路径上的某个训练节点(例如:训练节点0)对训练模型进行转换得到的。转换过程可以是:将训练模型中与权重计算相关的逻辑操作转换为算子,将有数据的输入关系和输出关系的两个算子用第一边连接起来。然后由该训练节点将该训练模型的计算图广播给其他的训练节点。
如前文图2所对应内容中对深度神经网络模型所描述的,模型中包括多个待确定的参数,这些待确定的参数可以称为权重,模型训练的过程就是通过不断训练更新权重的过程。因为训练模型在权重初始化时设定的权重通常都较大,所以权重更新的过程通常使用聚合后的梯度来更新权重,具体的,可用本轮当前的权重减去本轮该权重的聚合梯度,得到更新后的权重,该更新后的权重用于下一轮训练。其中,梯度通常是权重的导数。
在前述的模型训练系统中每个训练节点针对同一个权重(例如权重A)可计算出一个梯度,每个训练节点在模型训练时通常使用不同的训练数据,所以每个训练节点针对同一个权重计算出来的梯度通常是不相同的,所以需要对各训练节点计算得到的梯度进行聚合,得到一个聚合梯度。梯度聚合的过程通常是将各训练节点结算得到的梯度相加然后再求平均值的过程。如:针对权重A,训练节点0计算出的梯度是a0、训练节点1计算出的梯度是a1、训练节点2计算出的梯度是a2、训练节点3计算出的梯度是a3,那么该权重A的聚合梯度就可以为(a0+a1+a2+a3)/4。当然,梯度聚合的方法也不限于这一种,其他可适用的梯度聚合方法也适用于本申请,此处不做更多介绍。
为了便于描述,本申请实施例中,第一计算图中的算子称为第一算子,第二计算图中的算子称为第二算子,第一算子与第二算子是对应的,只是因为位于不同的计算图上,所以称呼不同。通过第一训练数据训练出第一算子的第一梯度,通过第二训练数据训练出第二算子的第二梯度,无论是第一算子还是第二算子,经过聚合的梯度都称为聚合梯度。
在环状传输路径上,只有起始节点在第一轮训练时发送的梯度为通过训练数据得到的梯度,接下来的其他训练节点以及从第二轮训练开始的所有训练节点发送的梯度都为聚合梯度。
结合到第一计算图上,可以包括多个第一算子,连接各第一算子之间的边称为第一边。
如图8所示,模型训练系统进行模型训练的过程,也就是模型训练中梯度聚合的方法的一实施例可以包括:
601、第一训练节点将第一训练数据输入第一计算图。
所述第一计算图包括第一算子,所述第一训练数据用于训练出所述第一算子的第一梯度。
602、第二训练节点将第二训练数据输入第二计算图。
所述第二计算图包括与所述第一算子对应的第二算子,所述第二训练数据用于训练出所述第二算子的第二梯度。
603、第二训练节点向所述第一训练节点发送使用第二训练数据训练出的第二梯度或者第二算子的聚合梯度,相应地,第一训练节点接收第二训练节点发送的使用第二训练数据训练出的第二梯度或者第二算子的聚合梯度。
第一梯度可以理解为是第一算子通过计算产生的梯度,第一算子可以理解为是一些计算逻辑,这些计算逻辑中通常包括多个待确定的参数,如前文介绍的,这些待确定的参数可以称为权重,所以第一梯度也可以理解为是该第一算子上所包含的权重的第一梯度。每个权重都会有一个梯度,每个第一算子输出的梯度可以有一个也可以有多个,具体数量依据第一算子上所包含权重的数量来确定。
若第二训练节点是起始节点,且是第一轮发送数据,则第二训练节点向所述第一训练节点发送使用第二训练数据训练出的第二梯度,若第二训练节点不是起始节点,或者第二训练节点时起始节点,但不是第一轮发送数据,则则第二训练节点向所述第一训练节点发送第二算子的聚合梯度。
604、响应于接收到所述第二训练节点发送的所述聚合梯度和所述第一训练节点训练出的所述第一算子的第一梯度,所述第一训练节点聚合所述第一梯度和所述第二算子的聚合梯度,以得到所述第一算子的聚合梯度。
梯度聚合的过程可以参阅前文中针对权重A的各训练节点产生的梯度加和再求平均值的内容进行理解,此处不再重复赘述。
本申请实施例中是以第一算子的维度来执行梯度聚合的,实际上,梯度聚合是针对每个权重执行的,不管有多少个权重,该第一算子就会输出多少个第一梯度,也就会聚合产生多少个聚合梯度。例如:一个第一算子包含有500个权重,那么该第一算子就会产生500个第一梯度,聚合后也就会产生500个聚合梯度,然后分别对应更新相应的权重。这500个梯度的排列顺序可以按照权重的顺序排列。
605、所述第一训练节点向位于所述第一训练节点下游的训练节点发送所述聚合梯度,所述聚合梯度用于被所述下游的训练节点进行梯度聚合。
该下游的训练节点在两个训练节点的模型训练系统中可以是第二训练节点。
本申请实施例提供的方案,环上的各训练节点在梯度聚合前只需要确定自身的第一算子的第一梯度输出,就可以执行梯度聚合的过程。不需要向中心节点发送该第一梯度,由该中心节点统一执行聚合。也不需要在聚合前向环状传输路径上作为中心节点的一个训练节点报告第一梯度已就绪,在接收到该中心节点返回的聚合指令后才能开始执行梯度聚合。由此可见,本申请实施例提供的方案,可以有效的减少各训练节点与中心节点之间交互产生的通信开销。
上述步骤604可以是通过第一计算图上的至少一个聚合算子来执行,聚合算子也可以称为(all-reduce,Ar)算子。用于执行聚合和发送操作。在第一计算图上多个第一算子与所述至少一个聚合算子之间数据的输入关系和输出关系可以用第二边来表示。
前述介绍了例如可以通过训练节点0对训练模型进行转换以得到包含第一算子和第一边的计算图,该计算图可以称为初始计算图,可以对该初始计算图进行优化,在该初始计算图中加入聚合算子和第二边。该训练节点0通过优化得到包含聚合算子和第二边的训练模型的计算图,然后通过广播的方式向其他训练节点广播该包含聚合算子和第二边的训练模型的计算图。
在有聚合算子的情况下,上述步骤604可以包括:
响应于接收到所述第二训练节点发送的所述聚合梯度和所述第一训练节点训练出的所述第一算子的第一梯度,所述第一训练节点通过所述聚合算子聚合所述第一梯度和所述第二算子的聚合梯度,以得到所述第一算子的聚合梯度。
上述步骤605可以包括:
所述第一训练节点通过所述聚合算子向位于所述第一训练节点下游的训练节点发送所述聚合梯度。
该种情况下,在第一算子输出第一梯度给聚合算子后,聚合算子直接可以执行聚合和发送的操作,在减少了通信开销的情况下,还提高了模型训练的效率。
在训练模型的计算图中,聚合算子的数量是可以小于或等于第一算子的数量的,因为一个聚合算子可以为多个第一算子执行梯度聚合和发送操作。也就是说第一算子和聚合算子可以是一对一的关系,也可以是N对一的关系,N为大于1的整数。当是一对一的关系时,计算图用于定义多个第一算子以及每个第一算子各自对应的一个聚合算子的计算逻辑,以及每个第一算子与各自对应的一个聚合算子之间数据的输入关系和输出关系。当是一对N 的关系时,计算图用于定义N个第一算子以及N第一算子对应的一个聚合算子的计算逻辑,以及N第一算子与对应的一个聚合算子之间数据的输入关系和输出关系。下面分别结合图9 和图10进行介绍。
图9是第一算子和聚合算子一对一的关系示意图。
如图9所示,FWD表示前向计算的算子,前向计算的算子可以理解为是在使用第一算子计算第一梯度之前,用于对待训练数据执行预处理的算子。Loss表示用于计算损失函数的算子,Grad A、Grad B、Grad C、Grad D和Grad E都是第一算子。其中,Grad A用于计算权重A的第一梯度,Grad B用于计算权重B的第一梯度,Grad C用于计算权重C的第一梯度,Grad D用于计算权重D的第一梯度,Grad E用于计算权重E的第一梯度。其中Grad B的计算依赖于Grad A,Grad C的计算依赖于Grad B,也就是说在计算顺序上是Grad A->Grad B->Grad C。Grad D的计算依赖于Grad A,Grad E的计算依赖于Grad D,也就是说在计算顺序上是Grad A->Grad D->Grad E。该一对一的场景中,每个第一算子之后都有一个聚合算子,也就是Ar A、Ar B、Ar C、Ar D和Ar E。Ar A用于在Grad A输出权重A第一梯度后,执行聚合得到权重A的聚合梯度,并发送权重A的聚合梯度。同理,Ar B用于在Grad B输出权重B 第一梯度后,执行聚合得到权重B的聚合梯度,并发送权重B的聚合梯度。Ar C用于在Grad C 输出权重C第一梯度后,执行聚合得到权重C的聚合梯度,并发送权重C的聚合梯度。Ar D 用于在Grad D输出权重D第一梯度后,执行聚合得到权重D的聚合梯度,并发送权重D的聚合梯度。Ar E用于在Grad E输出权重E第一梯度后,执行聚合得到权重E的聚合梯度,并发送权重E的聚合梯度。
上述用于执行计算图优化的训练节点0在优化得到图9所示的计算图时,只需要在每个第一算子之后添加一个聚合算子,并通过第二边建立每个第一算子与对应的聚合算子的连接即可。
图10是第一算子和聚合算子N对一的关系示意图。
如图10所示,FWD表示前向计算的算子,前向计算的算子可以理解为是在使用第一算子计算第一梯度之前,用于对待训练数据执行预处理的算子。Loss表示用于计算损失函数的算子,Grad A、Grad B、Grad C、Grad D和Grad E都是第一算子。其中,Grad A用于计算权重A的第一梯度,Grad B用于计算权重B的第一梯度,Grad C用于计算权重C的第一梯度,Grad D用于计算权重D的第一梯度,Grad E用于计算权重E的第一梯度。也就是说在计算顺序上是Grad A->Grad B->Grad C。Grad D的计算依赖于Grad A,Grad E的计算依赖于 GradD,也就是说在计算顺序上是Grad A->Grad D->Grad E。该N对一的场景中,Grad A、 Grad B和Grad C共用一个Ar A&B&C算子,Grad D和Grad E共用一个Ar D&E算子。Ar A&B&C 算子用于在接收到Grad A输出A第一梯度、Grad B输出B第一梯度,以及Grad C输出C第一梯度后同时执行对权重A、权重B和权重C的梯度聚合以及各自的聚合梯度的发送。Ar D&E算子用于在Grad D输出权重D第一梯度以及Grad E输出权重E第一梯度后同时执行对D和E的梯度聚合以及各自的聚合梯度的发送。
当是N对1的关系时,需要关联到聚合算子的所有第一算子的第一梯度都被聚合算子接收后才开始执行梯度聚合和发送的操作。也就是说,需要第一训练节点确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,其中,每个第一算子输出一个第一梯度;当N 个第一梯度都已被该聚合算子接收到时,所述第一训练节点通过所述聚合算子将N个第一算子各自输出的第一梯度与所述第二计算图中与所述N个第一算子各自对应的算子的梯度进行聚合,以得到所述N个第一算子各自的聚合梯度;第一训练节点通过所述聚合算子向位于所述第一训练节点下游的训练节点发送所述N个第一算子各自的聚合梯度。例如:上述图10 中,Ar A&B&C算子和Ar D&E算子都是聚合算子,当Ar A&B&C算子执行all-reduce操作时, N=3,需要权重A、权重B和权重C的第一梯度都被Ar A&B&C算子接收到后同时执行对权重A、权重B和权重C的梯度聚合以及各自的聚合梯度的发送。当Ar D&E算子执行all-reduce操作时,需要权重D和权重E的第一梯度都被Ar D&E算子接收到后同时执行对D和E的梯度聚合以及各自的聚合梯度的发送。
上述确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度可以通过如下三种方案来理解。
方案一:
检测所述聚合算子接收的第一梯度的数量;
若检测到所述第一梯度的数量与所述聚合算子所连接的N个第一算子的数量相同,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
该方案中,可以通过计数的办法来检测N个第一算子的第一梯度到达情况,例如:图10 中的Ar A&B&C算子,接收到A的第一梯度后,就计数1,接收到B的第一梯度后,就累加1,接收到C的第一梯度后再累加1。当该累计的总数与所连接的第二边的数量相等时,就开始执行聚合和发送操作。
方案二:
检测所述第一算子的位图中所述N个第一算子的指示位,所述位图包括所述第一计算图中每个第一算子的指示位,其中每个指示位表示该第一算子的第一梯度的就绪状态,所述就绪状态用于指示所述聚合算子已接收到所述第一梯度或未接收到所述第一梯度;
若所述N个第一算子的指示位上的就绪状态都指示各自的第一梯度已就绪,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
该方案中,可以通过位图的方式来确定与聚合算子相关的N个第一梯度是否都被聚合算子接收到。该位图通常是广播训练模型的计算图的训练节点广播给各训练节点的。结合上述图10的场景,位图可以参阅图11A进行理解。该位图中包括算子名和指示位两行,其中,算子名表示每个第一算子的名称,如:Grad A、Grad B、Grad C、Grad D和Grad E,每个算子都有一个指示位,该指示位可以用1bit(比特)来表示第一梯度的就绪状态,例如用0来表示聚合算子还未接收到该第一算子的第一梯度,用1来表示聚合算子已接收到该第一算子的第一梯度。当然,这里的0或1的表示方式只是举例,也可以用其他指示方式来表示第一梯度的就绪状态,例如:用T或F的形式来表示到达或未到达。
当所述聚合算子接收到所述第一算子的第一梯度,则将所述第一算子的指示位上的就绪状态从指示所述聚合算子未接收到所述第一梯度修改为所述聚合算子已接收到所述第一梯度。
所述向所述下游的训练节点发送所述N个第一算子各自的聚合梯度之后,所述方法还可以包括:
将所述N个第一算子各自的指示位上的就绪状态从指示所述聚合算子已接收到所述第一梯度修改为聚合算子未接收到所述第一梯度。
该图11A中,Grad A、Grad B和Grad C的指示位上都标记为0,则表示该Grad A、Grad B 和Grad C的第一梯度都未被Ar A&B&C算子接收到,D和E的指示位上都标记为0,则表示D和E 的第一梯度都未被Ar D&E算子接收到。若Grad A、Grad B和Grad C的第一梯度陆续备Ar A&B&C 算子接收到,Grad D的第一梯度被Ar D&E算子接收到,但Grad E的第一梯度还未被Ar D&E 算子接收到,则随着第一梯度被聚合算子的接收情况,陆续修改Grad A、Grad B、Grad C 和Grad D的指示位,如图11B所示,将已被接收的由0修改为1。若Grad A、Grad B和Grad C 的指示位上都标记为1,则表示该Grad A、Grad B和Grad C的第一梯度都已被Ar A&B&C算子接收到,则Ar A&B&C算子开始执行all-reduce操作。在该Grad A、Grad B和Grad C的聚合梯度发送后,如图11C所示,再将位图上该Grad A、Grad B和Grad C的指示位由1修改为0。
关于各第一算子在位图中的排列顺序,可以是按照各第一算子的梯度计算顺序进行排列的。如图11A至11C中表示的是按照Grad A至Grad E的顺序计算第一梯度的。该位图中各第一算子的指示位的排列顺序可以是用于优化得到图10所示的计算图的训练节点0确定的。
但由图10所示的计算图可知,即Grad B和Grad C这条路径,以及Grad D和Grad E这条路径可以并行计算。这种情况下Grad B和Grad C以及Grad D和Grad E的第一梯度的输出顺序可能就不确定,所以,位图按照图11A至11C中的方式排列就不一定合适。针对这种训练模型的计算图中包括至少两条并列的路径的情况,用于优化得到图10所示的计算图的训练节点0可以先确定每条路径上所包含的梯度计算量之和,如确定(Grad E+Grad D)的计算量< (Grad B+Grad C)的计算量,那么在位图上排序时可以把Grad E和Grad D排在Grad B和Grad C之前。在单条路径上,Grad E要依赖于Grad D,所以Grad D要排列在Grad E之前,在另外一条路径上,Grad C要依赖于Grad B,所以Grad B要排列在Grad C之前,Grad B、Grad C、 Grad D和Grad E都要依赖于Grad A,所以确定出排列顺序为图12所示的Grad A、Grad D、 Grad E、Grad B和Grad C。
第一训练节点针对这种第一计算图中包括至少两条并列的路径的情况,会确定所述位图上所述多个第一算子的指示位按照所述至少两条并列的路径中每条路径上所包含的梯度计算量之和从小到大的顺序,以及该条路径上的第一算子之间的依赖关系排列;然后按照所述每条路径上的梯度计算量之和从小到大的顺序向下游的训练节点发送各条路径上的N 个第一算子各自的聚合梯度。
该种当第一计算图上有两条并列的路径时,表示不同的路径上的第一算子可以并行计算,因为每条路径上的第一算子在梯度计算过程中的计算量不同,计算量小的通常先计算完,那么就可以先发送计算量小的路径上的聚合梯度。这样在不影响梯度计算的前提下,既可以减少每次发送的聚合梯度的数据量,还可以提高聚合梯度发送的成功率。
方案三:
检测所述聚合算子接收到的所述第一梯度的数据量;
若检测到所述第一梯度的数据量已达到所述聚合算子的聚合数据量阈值,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
该方案中,可以通过统计数据量的方式来确定与聚合算子关联的第一梯度是否都已被聚合算子接收到,因为训练模型的计算图时预先设计好的,所以聚合算子关联的第一梯度全部到达时的数据量也是确定的,如:(Grad A+Grad B+Grad C)三者的数据量是聚合数据量阈值X兆字节,那么当检测到到达目标聚合算子的数据量达到X兆字节时,就可以确定 Grad A、Grad B和Grad C的第一梯度都已到达,可以执行梯度聚合和发送的操作。
以上三种方案分别采用不同的方式实现了确定所述N个第一算子输出的N个第一梯度被聚合算子接收到的情况,实现了聚合和发送管理的多样化。
以上所描述的模型训练系统以及模型训练中梯度聚合的方法都是从训练节点的角度进行描述的。在本申请实施例中,每个训练节点可以是独立的计算机设备。也可以是虚拟机 ((virtual machine,VM),模型训练系统中的至少两个VM可以位于一个计算机设备上,也可以位于两个或多个计算机设备上。每个训练节点还可以是同一台计算机设备上的不同处理器。下面对上述可能的情况分别结合附图进行介绍。
图13所示的是每个训练节点都是一个独立的计算机设备的情况。如图13中,该模型训练系统中包括计算机设备0、计算机设备1、计算机设备2和计算机设备3这四个计算机设备。每个计算机设备可以是相同的,也可以是不同的,但每个计算机设备的硬件结构基本是一致的,图13中以计算机设备0的硬件结构为例进行说明。
计算机设备可以包括的CPU可以是例如X86 CPU或ARM CPU。其他处理器可以是用于执行神经网络的加速器芯片,例如GPU、张量处理器(tensor processing unit,TPU)等。用于进行网络数据传输的网络接口控制器(network interface controller,NIC),也成网卡,该NIC例如可以为以太(Eth)网卡,远程直接内存访问(remote direct memory access,RDMA)网卡等。用于在运行时存储参数、梯度等信息的内存Memory,例如高带宽存储器(highbandwidth memory,HBM),双倍速率内存(Double Data Rate,DDR)等。用于持久存储网络模型和模型参数的后端存储系统Storage,例如Flash、固态硬盘(solid state drives,SSD),等。本申请会首先在CPU中执行,然后将处理后的结果输出到其他处理器中,其他处理器执行计算,并将需要传输的梯度等信息通过NIC网卡传输到其计算机设备,同时对于包含多个其他处理器的训练节点,其他处理器可以通过自身的通信模块直接进行数据传输,该场景下的四个计算机设备在模型训练的梯聚合过程中所执行的功能与上述训练节点所执行的功能相同。
图14所示的是每个训练节点都是一个VM的情况。如图14所示,以该模型训练系统中包括VM0、VM1、VM2和VM3这四个虚拟机为例,这四个虚拟机可以运行于上述图13所示的一个计算机设备上,也可以位于多个计算机设备上。该虚拟机还可以是不依赖于独立的计算机设备,而是从资源池中划分出来的计算和传输资源。每个VM的功能在模型训练的梯聚合过程中所执行的功能与上述训练节点的功能相同。
图15所示的是每个训练节点是同一台计算机设备上的不同处理器,图15中以每个训练节点是GPU为例,在该场景下的模型训练系统包括GPU0、GPU1、GPU2和GPU3,GPU0->GPU1-> GPU2->GPU3->GPU0形成环状传输路径,该场景下的四个GPU所执行的功能在模型训练的梯聚合过程中所执行的功能与上述训练节点所执行的功能相同。
本申请实例的软件系统架构可以参阅图16进行理解,例如采用张量流(tensorflow) 作为训练框架,采用Horovod作为分布式优化器(distributed optimizer)和分布式运行时(distributed runtime),并在Horovod的基础上,根据申请实施例所描述的核心思想进行优化。
图16中与本申请实施例相关的部分为图中有箭头关联的部分,即分布式运行时(distributed runtime)、内核工具(kernel implements)以及网络层(network layer)。消息传递接口(message passing interface,MPI)。
基于上述图15所示的硬件结构和图16所示的软件架构,本申请实施例执行上述模型训练中的梯度聚合的过程可以为:
运行于CPU的Tensorflow生成训练模型的原始计算图,通过Horovod的分布式优化器,在计算图中插入(all-reduce,Ar)算子,以得到训练模型的计算图。
在Horovod中添加前述实施例介绍的位图。
CPU为每个GPU拷贝一个训练模型的计算图,同时拷贝一份位图。
CPU解析每个GPU对应的计算图,并逐个向GPU下发算子,GPU开始执行第一梯度的计算。
GPU每输出一个第一梯度,则位图中对应改GPU的指示位就会由0被修改为1。
GPU开启后台梯度协同线程,该梯度协同线程会不断查询位图,一旦发现满足聚合条件,该聚合条件可以为与Ar算子关联的GPU的第一梯度都已到达该Ar算子,则向梯度聚合线程发送消息,开始进行梯度聚合。
GPU开启后台梯度聚合线程,该梯度聚合线程用于根据位图上第一梯度的就绪状态,进行梯度聚合。也可以是梯度聚合线程等待梯度协同线程的消息,一旦收到满足梯度聚合条件的消息就执行梯度聚合操作,并在梯度聚合结束之后,将对应的指示位由1修改为0。
本申请实施例所提供的模型训练系统以及模型训练中梯度聚合的方法可以应用于各种可能模型训练场景,图片处理的模型训练场景是非常常见的,下面以本申请实施例所提供的方案应用于图片处理的场景为例来描述使用本申请所提供的方案产生的收益。
表1中Imgs/sec表示每秒处理的图片的数量,该值越大越好。加速比的计算方式如下:若1个GPU的每秒处理图片的数量为X,M个GPU每秒处理的图片数量为Y,则加速比为Y/MX。表1中是通过大量实验数据统计的本申请的上述Imgs/sec和加速比两项指标相对于现有技术的收益。
表1:梯度聚合方案收益
由该表1可知,本申请的方案相对于现有技术的方案,在上述两项指标上都有明显的收益,总体上明显提高了处理图片的数据和分布式训练的加速比。
以上多个实施例描述了本申请实施例所提供的模型训练系统和模型训练中梯度聚合的方法,下面结合附图介绍本申请实施例中的模型训练中梯度聚合的装置。
如图17所示,本申请实施例提供的模型训练中梯度聚合的装置70可以为上述实施例中的第一训练节点,述第一训练节点为所述模型训练系统中的任一个训练节点,所述模型训练系统包括至少两个训练节点,所述至少两个训练节点形成环状传输路径,第二训练节点为所述环状传输路径上位于所述第一训练节点上游的训练节点,每个训练节点上都包括一份相同的训练模型的计算图,所述训练模型的计算图用于定义多个第一算子的计算逻辑以及所述多个第一算子之间数据的输入关系和输出关系,该装置70可以包括:
处理单元701,用于将第一训练数据输入第一计算图,所述第一计算图包括第一算子,所述第一训练数据用于训练出所述第一算子的第一梯度;
接收单元702,用于接收所述第二训练节点发送的第二计算图中第二算子的聚合梯度,所述第二计算图包括与所述第一算子对应的所述第二算子;
所述处理单元701,还用于响应于接收到所述第二训练节点发送的所述聚合梯度和所述第一训练节点训练出的所述第一算子的第一梯度,聚合所述第一梯度和所述第二算子的聚合梯度,以得到所述第一算子的聚合梯度。
一种可能的实施例中,该装置还可以包括:
发送单元703,用于向位于所述第一训练节点下游的训练节点发送所述处理单元聚合后得到的第一算子的聚合梯度,所述聚合梯度用于被所述下游的训练节点进行梯度聚合。
本申请实施例提供的方案,环上的各训练节点在梯度聚合前只需要确定自身的第一算子的第一梯度输出,就可以执行梯度聚合的过程。不需要向中心节点发送该第一梯度,由该中心节点统一执行聚合。也不需要在聚合前向环状传输路径上作为中心节点的一个训练节点报告第一梯度已就绪,在接收到该中心节点返回的聚合指令后才能开始执行梯度聚合。由此可见,本申请实施例提供的方案,可以有效的减少各训练节点与中心节点之间交互产生的通信开销。
一种可能的实施例中,所述第一计算图还包括至少一个聚合算子,所述第一计算图还用于定义所述多个第一算子与所述至少一个聚合算子之间数据的输入关系和输出关系;
所述处理单元701,用于响应于接收到所述第二训练节点发送的所述聚合梯度和所述第一训练节点训练出的所述第一算子的第一梯度,通过所述聚合算子聚合所述第一梯度和所述第二算子的聚合梯度,以得到所述第一算子的聚合梯度。
所述发送单元703,用于通过所述聚合算子向位于所述第一训练节点下游的训练节点发送所述聚合梯度。
一种可能的实施例中,所述聚合算子与N个第一算子之间具有输入关系和输出关系,N 为大于1的整数;
所述处理单元701用于:
确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,其中,每个第一算子输出一个第一梯度;
通过所述聚合算子将N个第一算子各自输出的第一梯度与对应的所述第二算子的聚合梯度进行聚合,以得到所述N个第一算子各自的聚合梯度。
所述发送单元703,用于通过所述聚合算子向位于所述第一训练节点下游的训练节点发送所述N个第一算子各自的聚合梯度。
一种可能的实施例中,所述处理单元701用于:
检测所述聚合算子接收的第一梯度的数量;
若所述第一梯度的数量与所述聚合算子所连接的N个第一算子的数量相同,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
一种可能的实施例中,所述处理单元701用于:
检测所述第一算子的位图中所述N个第一算子的指示位,所述位图包括所述第一计算图中每个第一算子的指示位,其中每个指示位表示该第一算子的第一梯度的就绪状态,所述就绪状态用于指示所述聚合算子已接收到所述第一梯度或未接收到所述第一梯度;
若所述N个第一算子的指示位上的就绪状态都指示各自的第一梯度已就绪,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
一种可能的实施例中,所述处理单元701,还用于当所述聚合算子接收到所述第一算子的第一梯度,则将所述第一算子的指示位上的就绪状态从指示所述聚合算子未接收到所述第一梯度修改为所述聚合算子已接收到所述第一梯度。
一种可能的实施例中,所述处理单元701,还用于将所述N个第一算子各自的指示位上的就绪状态从指示所述聚合算子已接收到所述第一梯度修改为聚合算子未接收到所述第一梯度。
一种可能的实施例中,所述处理单元701还用于:
确定所述第一计算图中的多个第一算子包括至少两条并列的路径;
确定所述位图上所述多个第一算子的指示位按照所述至少两条并列的路径中每条路径上所包含的梯度计算量之和从小到大的顺序,以及该条路径上的第一算子之间的依赖关系排列;
所述发送单元701,还用于按照所述每条路径上的梯度计算量之和从小到大的顺序向下游的训练节点发送各条路径上的N个第一算子各自的聚合梯度。
一种可能的实施例中,所述处理单元701用于:
检测所述聚合算子接收到的所述第一梯度的数据量;
若检测到所述第一梯度的数据量已达到所述聚合算子的聚合数据量阈值,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
本申请实施例所提供的模型训练中梯度聚合的装置70的相关内容可以参阅上述方法实施例的相关内容进行理解,此处不再重复赘述。
图18所示,为本申请的实施例提供的上述实施例中所涉及的计算机设备80的一种可能的逻辑结构示意图。计算机设备80包括:处理器801、通信接口802、存储器803以及总线804。处理器801、通信接口802以及存储器803通过总线804相互连接。在本申请的实施例中,处理器801用于对计算机设备80的动作进行控制管理,例如,处理器801用于执行图8中的步骤 601至605和/或用于本文所描述的技术的其他过程。通信接口802用于支持计算机设备80进行通信。存储器803,用于存储计算机设备80的程序代码和数据。
其中,处理器801可以是中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。总线804可以是外设部件互连标准(PeripheralComponent Interconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图18中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
在本申请的另一实施例中,还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当设备的至少一个处理器执行该计算机执行指令时,设备执行上述图4至图16部分实施例所描述的模型训练中梯度聚合的方法。
在本申请的另一实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;设备的至少一个处理器可以从计算机可读存储介质读取该计算机执行指令,至少一个处理器执行该计算机执行指令使得设备执行上述图4至图16部分实施例所描述的模型训练中梯度聚合的方法。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请实施例的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请实施例所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请实施例各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请实施例各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请实施例的具体实施方式,但本申请实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请实施例揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请实施例的保护范围之内。因此,本申请实施例的保护范围应以所述权利要求的保护范围为准。
Claims (17)
1.一种模型训练系统,包括至少两个训练节点,所述至少两个训练节点形成环状传输路径,第一训练节点为所述模型训练系统中的任一个训练节点,第二训练节点为所述环状传输路径上位于所述第一训练节点上游的训练节点,每个训练节点上都包括一份相同的计算图,所述每个训练节点根据所述训练节点上的计算图处理训练数据,所述计算图用于定义多个算子的计算逻辑以及所述多个算子之间数据的输入关系和输出关系,其特征在于,
所述第一训练节点将第一训练数据输入第一计算图,所述第一计算图包括第一算子和至少一个聚合算子,所述第一训练数据用于训练出所述第一算子的第一梯度,所述第一计算图还用于定义所述至少一个聚合算子以及所述多个第一算子与所述至少一个聚合算子之间数据的输入关系和输出关系,所述聚合算子与N个第一算子之间具有输入关系和输出关系,N为大于1的整数;
所述第二训练节点将第二训练数据输入第二计算图,所述第二计算图包括与所述第一算子对应的第二算子,所述第二训练数据用于训练出所述第二算子的第二梯度;
响应于所述第二训练节点聚合得到的所述第二算子的聚合梯度,所述第二训练节点将所述聚合梯度发送给所述第一训练节点;
所述第一训练节点确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,其中,每个第一算子输出一个第一梯度;
所述第一训练节点通过所述聚合算子将N个第一算子各自输出的第一梯度与对应的所述第二算子的聚合梯度进行聚合,以得到所述N个第一算子各自的聚合梯度。
2.根据权利要求1所述的模型训练系统,其特征在于,
所述第一训练节点使用所述第一算子的聚合梯度更新所述第一计算图中所述第一算子对应的权重。
3.一种模型训练中梯度聚合的方法,其特征在于,所述方法应用于模型训练系统中的第一训练节点,所述第一训练节点为所述模型训练系统中的任一个训练节点,所述模型训练系统包括至少两个训练节点,所述至少两个训练节点形成环状传输路径,第二训练节点为所述环状传输路径上位于所述第一训练节点上游的训练节点,每个训练节点上都包括一份相同的计算图,所述每个训练节点根据所述训练节点上的计算图处理训练数据,所述计算图用于定义多个算子的计算逻辑以及所述多个算子之间数据的输入关系和输出关系,所述方法包括:
将第一训练数据输入第一计算图,所述第一计算图包括第一算子和至少一个聚合算子,所述第一训练数据用于训练出所述第一算子的第一梯度,所述第一计算图还用于定义所述至少一个聚合算子以及所述多个第一算子与所述至少一个聚合算子之间数据的输入关系和输出关系,所述聚合算子与N个第一算子之间具有输入关系和输出关系,N为大于1的整数;
接收所述第二训练节点发送的第二计算图中第二算子的聚合梯度,所述第二计算图包括与所述第一算子对应的所述第二算子;
确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,其中,每个第一算子输出一个第一梯度;
通过所述聚合算子将N个第一算子各自输出的第一梯度与对应的所述第二算子的聚合梯度进行聚合,以得到所述N个第一算子各自的聚合梯度。
4.根据权利要求3所述的方法,其特征在于,所述确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,包括:
检测所述聚合算子接收的第一梯度的数量;
若所述第一梯度的数量与所述聚合算子所连接的N个第一算子的数量相同,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
5.根据权利要求3所述的方法,其特征在于,所述确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,包括:
检测所述第一算子的位图中所述N个第一算子的指示位,所述位图包括所述第一计算图中每个第一算子的指示位,其中每个指示位表示该第一算子的第一梯度的就绪状态,所述就绪状态用于指示所述聚合算子已接收到所述第一梯度或未接收到所述第一梯度;
若所述N个第一算子的指示位上的就绪状态都指示各自的第一梯度已就绪,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
当所述聚合算子接收到所述第一算子的第一梯度,则将所述第一算子的指示位上的就绪状态从指示所述聚合算子未接收到所述第一梯度修改为所述聚合算子已接收到所述第一梯度。
7.根据权利要求5或6所述的方法,其特征在于,所述方法还包括:
响应于向下游的训练节点发送所述N个第一算子各自的聚合梯度,将所述N个第一算子各自的指示位上的就绪状态从指示所述聚合算子已接收到所述第一梯度修改为聚合算子未接收到所述第一梯度。
8.根据权利要求3所述的方法,其特征在于,所述确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,包括:
检测所述聚合算子接收到的所述第一梯度的数据量;
若所述第一梯度的数据量已达到所述聚合算子的聚合数据量阈值,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
9.一种模型训练中梯度聚合的装置,其特征在于,该装置为模型训练系统中的第一训练节点,所述第一训练节点为所述模型训练系统中的任一个训练节点,所述模型训练系统包括至少两个训练节点,所述至少两个训练节点形成环状传输路径,第二训练节点为所述环状传输路径上位于所述第一训练节点上游的训练节点,每个训练节点上都包括一份相同的计算图,所述每个训练节点根据所述训练节点上的计算图处理训练数据,所述计算图用于定义多个算子的计算逻辑以及所述多个算子之间数据的输入关系和输出关系,所述装置包括:
处理单元,用于将第一训练数据输入第一计算图,所述第一计算图包括第一算子和至少一个聚合算子,所述第一训练数据用于训练出所述第一算子的第一梯度,所述第一计算图还用于定义所述至少一个聚合算子以及所述多个第一算子与所述至少一个聚合算子之间数据的输入关系和输出关系,所述聚合算子与N个第一算子之间具有输入关系和输出关系,N为大于1的整数;
接收单元,用于接收所述第二训练节点发送的第二计算图中第二算子的聚合梯度,所述第二计算图包括与所述第一算子对应的所述第二算子;
所述处理单元,还用于确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度,其中,每个第一算子输出一个第一梯度;通过所述聚合算子将N个第一算子各自输出的第一梯度与对应的所述第二算子的聚合梯度进行聚合,以得到所述N个第一算子各自的聚合梯度。
10.根据权利要求9所述的装置,其特征在于,
所述处理单元用于:
检测所述聚合算子接收的第一梯度的数量;
若所述第一梯度的数量与所述聚合算子所连接的N个第一算子的数量相同,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
11.根据权利要求9所述的装置,其特征在于,
所述处理单元用于:
检测所述第一算子的位图中所述N个第一算子的指示位,所述位图包括所述第一计算图中每个第一算子的指示位,其中每个指示位表示该第一算子的第一梯度的就绪状态,所述就绪状态用于指示所述聚合算子已接收到所述第一梯度或未接收到所述第一梯度;
若所述N个第一算子的指示位上的就绪状态都指示各自的第一梯度已就绪,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
12.根据权利要求11所述的装置,其特征在于,
所述处理单元,还用于当所述聚合算子接收到所述第一算子的第一梯度,则将所述第一算子的指示位上的就绪状态从指示所述聚合算子未接收到所述第一梯度修改为所述聚合算子已接收到所述第一梯度。
13.根据权利要求11或12所述的装置,其特征在于,
所述处理单元,还用于响应于向下游的训练节点发送所述N个第一算子各自的聚合梯度,将所述N个第一算子各自的指示位上的就绪状态从指示所述聚合算子已接收到所述第一梯度修改为聚合算子未接收到所述第一梯度。
14.根据权利要求9所述的装置,其特征在于,
所述处理单元用于:
检测所述聚合算子接收到的所述第一梯度的数据量;
若所述第一梯度的数据量已达到所述聚合算子的聚合数据量阈值,则确定所述聚合算子接收到所述N个第一算子输出的N个第一梯度。
15.一种计算设备,其特征在于,包括处理器和存储有计算机程序的计算机可读存储介质;
所述处理器与所述计算机可读存储介质耦合,所述计算机程序被所述处理器执行时实现如权利要求3-8任一项所述的方法。
16.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求3-8任一项所述的方法。
17.一种芯片系统,其特征在于,包括处理器,所述处理器被调用用于执行如权利要求3-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910880461.5A CN112528108B (zh) | 2019-09-17 | 2019-09-17 | 一种模型训练系统、模型训练中梯度聚合的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910880461.5A CN112528108B (zh) | 2019-09-17 | 2019-09-17 | 一种模型训练系统、模型训练中梯度聚合的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112528108A CN112528108A (zh) | 2021-03-19 |
CN112528108B true CN112528108B (zh) | 2023-02-07 |
Family
ID=74975036
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910880461.5A Active CN112528108B (zh) | 2019-09-17 | 2019-09-17 | 一种模型训练系统、模型训练中梯度聚合的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112528108B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114118437B (zh) * | 2021-09-30 | 2023-04-18 | 电子科技大学 | 一种面向微云中分布式机器学习的模型更新同步方法 |
CN113849293B (zh) * | 2021-11-30 | 2022-02-22 | 湖北芯擎科技有限公司 | 数据处理方法、装置、系统及计算机可读存储介质 |
CN116541779B (zh) * | 2023-07-07 | 2023-10-31 | 北京邮电大学 | 个性化公共安全突发事件检测模型训练方法、检测方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107330516A (zh) * | 2016-04-29 | 2017-11-07 | 腾讯科技(深圳)有限公司 | 模型参数训练方法、装置及系统 |
CN107688493A (zh) * | 2016-08-05 | 2018-02-13 | 阿里巴巴集团控股有限公司 | 训练深度神经网络的方法、装置及系统 |
CN109102075A (zh) * | 2018-07-26 | 2018-12-28 | 联想(北京)有限公司 | 一种分布式训练中的梯度更新方法及相关设备 |
CN110033078A (zh) * | 2018-01-12 | 2019-07-19 | 华为技术有限公司 | 一种基于树状拓扑的计算系统及方法 |
CN110135573A (zh) * | 2018-02-02 | 2019-08-16 | 阿里巴巴集团控股有限公司 | 一种深度学习模型的训练方法、计算设备以及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11423254B2 (en) * | 2019-03-28 | 2022-08-23 | Intel Corporation | Technologies for distributing iterative computations in heterogeneous computing environments |
-
2019
- 2019-09-17 CN CN201910880461.5A patent/CN112528108B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107330516A (zh) * | 2016-04-29 | 2017-11-07 | 腾讯科技(深圳)有限公司 | 模型参数训练方法、装置及系统 |
CN107688493A (zh) * | 2016-08-05 | 2018-02-13 | 阿里巴巴集团控股有限公司 | 训练深度神经网络的方法、装置及系统 |
CN110033078A (zh) * | 2018-01-12 | 2019-07-19 | 华为技术有限公司 | 一种基于树状拓扑的计算系统及方法 |
CN110135573A (zh) * | 2018-02-02 | 2019-08-16 | 阿里巴巴集团控股有限公司 | 一种深度学习模型的训练方法、计算设备以及系统 |
CN109102075A (zh) * | 2018-07-26 | 2018-12-28 | 联想(北京)有限公司 | 一种分布式训练中的梯度更新方法及相关设备 |
Non-Patent Citations (1)
Title |
---|
Bringing HPC Techniques to Deep Learning;Andrew Gibiansky;《Blog》;20170221;1-24 * |
Also Published As
Publication number | Publication date |
---|---|
CN112528108A (zh) | 2021-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113449857B (zh) | 一种数据处理方法和数据处理设备 | |
US20180336453A1 (en) | Domain specific language for generation of recurrent neural network architectures | |
CN112528108B (zh) | 一种模型训练系统、模型训练中梯度聚合的方法及装置 | |
CN111797893A (zh) | 一种神经网络的训练方法、图像分类系统及相关设备 | |
EP4145351A1 (en) | Neural network construction method and system | |
WO2021218471A1 (zh) | 一种用于图像处理的神经网络以及相关设备 | |
WO2022111617A1 (zh) | 一种模型训练方法及装置 | |
CN112990211A (zh) | 一种神经网络的训练方法、图像处理方法以及装置 | |
CN111368656A (zh) | 一种视频内容描述方法和视频内容描述装置 | |
CN113505883A (zh) | 一种神经网络训练方法以及装置 | |
WO2022012668A1 (zh) | 一种训练集处理方法和装置 | |
EP4318313A1 (en) | Data processing method, training method for neural network model, and apparatus | |
CN111797992A (zh) | 一种机器学习优化方法以及装置 | |
CN113095475A (zh) | 一种神经网络的训练方法、图像处理方法以及相关设备 | |
CN113191241A (zh) | 一种模型训练方法及相关设备 | |
CN113627422A (zh) | 一种图像分类方法及其相关设备 | |
WO2023231753A1 (zh) | 一种神经网络的训练方法、数据的处理方法以及设备 | |
CN113065633A (zh) | 一种模型训练方法及其相关联设备 | |
CN109214515A (zh) | 一种深度神经网络推理方法及计算设备 | |
CN112529151A (zh) | 一种数据处理方法以及装置 | |
CN114821096A (zh) | 一种图像处理方法、神经网络的训练方法以及相关设备 | |
WO2022100607A1 (zh) | 一种神经网络结构确定方法及其装置 | |
CN112446462A (zh) | 目标神经网络模型的生成方法和装置 | |
CN114169393A (zh) | 一种图像分类方法及其相关设备 | |
CN114936631A (zh) | 一种模型处理方法及装置 |
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 |