神经网络模型的训练方法、图像处理方法及装置与流程

文档序号:30057639发布日期:2022-05-17 19:29阅读:147来源:国知局
神经网络模型的训练方法、图像处理方法及装置与流程

1.本技术涉及人工智能领域,并且更具体地,涉及一种神经网络模型的训练方法、图像处理方法及装置。


背景技术:

2.人工智能(artificial intelligence,ai)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式作出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。人工智能领域的研究包括机器人,自然语言处理,计算机视觉,决策与推理,人机交互,推荐与搜索,ai基础理论等。
3.在人工智能领域,通过对神经网络模型进行训练能够得到性能较优的目标神经网络模型以执行各种数据处理工作。训练设备上需要保存完整的模型参数以执行神经网络模型的训练过程,然而,单个设备的内存大小有限,深度模型中的模型参数较多,给设备带来了较大的存储压力,内存较小的设备甚至无法保存完整的模型参数,难以执行神经网络模型的训练过程。
4.因此,如何降低神经网络模型的运算设备的存储压力,成为一个亟需解决的技术问题。


技术实现要素:

5.本技术提供一种神经网络模型的训练方法、图像处理方法及装置,能够降低神经网络模型的运算设备的存储压力。
6.第一方面,提供了一种神经网络模型的训练方法,该方法包括:至少一个第一加速器分别获取至少一个训练样本;至少一个第一加速器分别对至少一个训练样本执行神经网络模型的前向计算,得到前向计算的结果,其中,至少一个第一加速器在执行神经网络模型中的第i层的前向计算之前,从本地以及其他加速器获取第i层的不同参数以得到第i层的完整的模型参数,i为正整数;至少一个第一加速器分别利用前向计算的结果进行反向计算,得到神经网络模型的第一参数梯度;至少一个第一加速器分别基于神经网络模型的第一参数梯度更新神经网络模型的参数。
7.根据本技术实施例的方案,神经网络模型的参数的不同部分可以存储于多个加速器中,第一加速器可以从其他设备中获取所需的参数,并完成神经网络模型的前向计算。所需的内存远小于存储完整的神经网络模型所需的内存,减小了第一加速器的存储压力,避免由于第一加速器内存不足而导致无法训练该神经网络模型。
8.此外,该至少一个第一加速器能够实现数据并行的模型训练,提高模型的训练效率。
9.同时,相较于层间切分的方式,采用层内切分的方式,即从不同加速器获取同一层的不同参数,能够避免分布式训练时多个加速器从同一加速器获取参数时造成的通信拥堵,提高处理效率。
10.该神经网络模型的前向计算过程中所有需要从其他加速器获取参数的层均可以理解为第i层。
11.结合第一方面,在第一方面的某些实现方式中,方法还包括:至少一个第一加速器在执行神经网络模型中的第i层的前向计算之后,释放从其他加速器获取的第i层的参数。
12.根据本技术实施例的方案,在完成前向计算后,释放从其他加速器获取的参数,可以降低训练过程中模型参数所占用的空间,这样,每个加速器可以支持更多的训练样本,提高训练集群的线性度,有利于实现神经网络模型的高效训练。
13.结合第一方面,在第一方面的某些实现方式中,至少一个第一加速器在执行神经网络模型中的第j层的反向计算之前,从本地以及其他第一加速器获取第j层的不同参数以得到第j层的完整的模型参数,j为正整数。
14.根据本技术实施例的方案,在执行完前向计算后可以释放从其他设备获取的参数,执行反向计算的过程中重新获取所需参数,降低训练过程中参数所占用的存储空间。
15.该神经网络模型的反向计算过程中所有需要从其他加速器获取参数的层均可以理解为第j层。
16.结合第一方面,在第一方面的某些实现方式中,方法还包括:至少一个第一加速器在执行神经网络模型中的第j层的反向计算之后,释放从其他加速器获取的第j层的参数。
17.根据本技术实施例的方案,在完成反向计算后,释放从其他加速器获取的参数,可以进一步降低训练过程中模型参数所占用的空间,能够使得整个训练过程中的参数占用的存储空间较小,这样,每个加速器可以支持更多的训练样本,提高训练集群的线性度,有利于实现神经网络模型的高效训练。
18.结合第一方面,在第一方面的某些实现方式中,至少一个第一加速器在执行神经网络模型中的第j层之后的任一层或多层的反向计算的时段内,从本地以及其他加速器获取第j层的不同参数以得到第j层的完整的模型参数。
19.通过将获取参数和反向计算重叠起来,能够减少不能被计算过程隐藏的通信时间,以提高训练的效率,提高集群的训练性能。
20.需要说明的是,在当前层的反向计算的时段内获取其他层的参数,可以理解为在当前层的反向计算的时段内执行获取其他层的参数的操作,并不限定获取其他层的参数的时间完全处于当前层的反向计算的时段内。
21.结合第一方面,在第一方面的某些实现方式中,至少一个第一加速器在执行神经网络模型中的第i层之前的任一层或多层的前向计算的时段内,从本地以及其他加速器获取第i层的不同参数以得到第i层的完整的模型参数。
22.通过将获取参数和前向计算重叠起来,能够减少不能被计算过程隐藏的通信时间,以提高训练的效率,提高集群的训练性能。
23.需要说明的是,在当前层的前向计算的时段内获取其他层的参数,可以理解为在当前层的前向计算的时段内执行获取其他层的参数的操作,并不限定获取其他层的参数的时间完全处于当前层的前向计算的时段内。
24.结合第一方面,在第一方面的某些实现方式中,至少一个第一加速器位于第一服务器中。
25.结合第一方面,在第一方面的某些实现方式中,方法还包括:至少一个第一加速器分别将第一参数梯度发送至其他加速器。
26.这样,其他加速器可以基于第一参数梯度更新本地存储的神经网络模型的参数。
27.结合第一方面,在第一方面的某些实现方式中,至少一个第一加速器在执行神经网络模型中的第k层之前的任一层或多层的反向计算的时段内,向其他加速器发送第一参数梯度中的第k层的参数梯度,k为正整数。
28.通过将参数梯度同步和反向计算重叠起来,能够减少不能被计算过程隐藏的通信时间,以提高训练的效率,提高集群的训练性能。
29.需要说明的是,在当前层的反向计算的时段内同步其他层的参数梯度,可以理解为在当前层的反向计算的时段内执行同步其他层的参数梯度的操作,并不限定同步其他层的参数梯度的时间完全处于当前层的反向计算的时段内。
30.结合第一方面,在第一方面的某些实现方式中,方法还包括:至少一个第一加速器分别接收由其他加速器发送的神经网络模型的第二参数梯度;以及至少一个第一加速器分别基于神经网络模型的第一参数梯度更新神经网络模型的参数,包括:至少一个第一加速器分别基于神经网络模型的第一参数梯度和神经网络模型的第二参数梯度更新神经网络模型的参数。
31.相较于仅利用第一加速器自身计算得到的参数梯度进行模型参数的更新,基于其他加速器上的参数梯度和自身计算得到的参数梯度进行参数更新能够利用更多的训练样本,利用累加的参数梯度更新神经网络模型的参数,得到能够更好地逼近参数的最优值,提高训练模型的准确性。
32.结合第一方面,在第一方面的某些实现方式中,至少一个第一加速器包括两个或两个以上第一加速器,以及至少一个第一加速器分别接收由其他加速器发送的神经网络模型的第二参数梯度,包括:至少一个第一加速器同时分别接收由其他服务器中的加速器发送的神经网络模型的第二参数梯度。
33.这样,在服务器为多网卡服务器的情况下,可以同时利用多个网卡进行参数梯度同步,节约时间成本,提高通信效率,进而提高模型训练效率。
34.第二方面,提供了一种图像处理方法,该方法包括:第二加速器获取待处理图像;第二加速器对待处理图像执行目标神经网络模型的前向计算,得到待处理图像的处理结果,其中,第二加速器在执行目标神经网络模型中的第p层的前向计算之前,从本地以及其他加速器获取第p层的不同参数以得到第p层的完整的模型参数,p为正整数。
35.根据本技术实施例中的方案,第二加速器上仅存储神经网络模型的一部分,在执行前向计算之前从其他加速器中获取所需的参数,所需的内存远小于存储完整的神经网络模型所需的内存,减小了第二加速器的存储压力。
36.同时,相对于层间切分的方式,本技术实施例采用层内切分的方式存储模型参数,第二加速器从多个加速器获取同一层的不同参数,以得到该层的完整参数,能够减少通信时间,提高处理效率。
37.结合第二方面,在第二方面的某些实现方式中,第二加速器在执行目标神经网络
模型中的第p层的前向计算之后,释放从其他加速器获取的第p层的参数。
38.根据本技术实施例的方案,在执行完前向计算后可以释放从其他设备获取的参数,降低运算过程中参数所占用的存储空间。
39.结合第二方面,在第二方面的某些实现方式中,第二加速器在执行目标神经网络模型中的第p层之前的任一层或多层的前向计算的时段内,从本地以及其他加速器获取第p层的不同参数以得到第p层的完整的模型参数。
40.根据本技术实施例的方案,通过将获取参数和前向计算重叠起来,能够减少不能被计算过程隐藏的通信时间,以提高推理的效率,降低时间成本。
41.结合第二方面,在第二方面的某些实现方式中,目标神经网络模型的参数是通过至少一个第一加速器分别基于神经网络模型的第一参数梯度更新神经网络模型的参数得到的,神经网络模型的第一参数梯度是通过至少一个第一加速器利用前向计算的结果进行反向计算得到,前向计算的结果是通过至少一个第一加速器分别对至少一个训练样本执行神经网络模型的前向计算得到的,神经网络模型中的第i层的完整的模型参数是从本地以及其他加速器获取第i层的不同参数得到的。
42.应理解,第二方面中的图像处理方法可以采用第一方面中的神经网络模型的训练方法得到目标神经网络模型,该目标神经网络模型可以是已经训练好的神经网络模型,可以利用该训练好的神经网络模型对待处理图像进行处理。
43.本技术中,由于目标神经网络模型是采用上述第一方面的方法得到的,比较符合或者贴近神经网络模型的应用需求,利用这样的神经网络模型进行图像处理,能够取得较好的处理效果。
44.在本技术实施例中,第一加速器上仅存储神经网络模型的一部分,在执行前向计算之前从其他加速器中获取所需的参数,所需的内存远小于存储完整的神经网络模型所需的内存,减小了第一加速器的存储压力,避免由于第一加速器内存不足而导致无法训练该神经网络模型。
45.同时,相对于层间切分的方式,本技术实施例采用层内切分的方式存储模型参数,第一加速器从多个加速器获取同一层的不同参数,以得到该层的完整参数,能够减少通信时间,提高处理效率。进一步地,能够避免分布式训练时多个加速器从同一加速器获取参数时造成的通信拥堵,提高处理效率。
46.结合第二方面,在第二方面的某些实现方式中,至少一个第一加速器执行神经网络模型中的第j层的反向计算时,神经网络模型中的第j层的完整的模型参数是从本地以及其他加速器获取第j层的不同参数得到的。
47.第三方面,提供了一种神经网络模型的训练装置,装置包括用于执行上述第一方面以及第一方面中的任意一种实现方式中的第一加速器所执行的方法的模块或单元。
48.第四方面,提供了一种图像处理装置,所述装置包括用于执行上述第二方面以及第二方面中的任意一种实现方式中的第二加速器所执行的方法的模块或单元。
49.应理解,在上述第一方面中对相关内容的扩展、限定、解释和说明也适用于第二方面、第三方面和第四方面中相同的内容。
50.第五方面,提供了一种神经网络模型的训练装置,该装置包括:存储器,用于存储程序;处理器,用于执行所述存储器存储的程序,当所述存储器存储的程序被执行时,所述
处理器用于执行第一方面以及第一方面中任意一种实现方式中的第一加速器所执行的方法。
51.上述第五方面中的处理器既可以是中央处理器(central processing unit,cpu),也可以是cpu与神经网络运算处理器的组合,这里的神经网络运算处理器可以包括图形处理器(graphics processing unit,gpu)、神经网络处理器(neural-network processing unit,npu)和张量处理器(tensor processing unit,tpu)等等。其中,tpu是谷歌(google)为机器学习全定制的人工智能加速器专用集成电路。
52.第六方面,提供了一种图像处理装置,该装置包括:存储器,用于存储程序;处理器,用于执行所述存储器存储的程序,当所述存储器存储的程序被执行时,所述处理器用于执行第二方面以及第二方面中的任意一种实现方式中的第二加速器所执行的方法。
53.上述第六方面中的处理器既可以是中央处理器,也可以是cpu与神经网络运算处理器的组合,这里的神经网络运算处理器可以包括图形处理器、神经网络处理器和张量处理器等等。其中,tpu是谷歌为机器学习全定制的人工智能加速器专用集成电路。
54.第七方面,提供一种计算机可读介质,该计算机可读介质存储用于设备执行的程序代码,该程序代码包括用于执行第一方面或第二方面中的任意一种实现方式中的第一加速器或第二加速器所执行的方法。
55.第八方面,提供一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述第一方面或第二方面中的任意一种实现方式中第一的方法。
56.第九方面,提供一种芯片,所述芯片包括处理器与数据接口,所述处理器通过所述数据接口读取存储器上存储的指令,执行上述第一方面或第二方面中的任意一种实现方式中第一加速器或第二加速器所执行的方法。
57.可选地,作为一种实现方式,所述芯片还可以包括存储器,所述存储器中存储有指令,所述处理器用于执行所述存储器上存储的指令,当所述指令被执行时,所述处理器用于执行第一方面或第二方面中的任意一种实现方式中的第一加速器或第二加速器所执行的方法。
58.上述芯片具体可以是现场可编程门阵列(field-programmable gate array,fpga)或者专用集成电路(application-specific integrated circuit,asic)。
附图说明
59.图1是本技术实施例提供的一种人工智能主体框架示意图;
60.图2为本技术实施例提供的一种集合通信的示意图;
61.图3为本技术实施例提供的一种系统架构的示意图;
62.图4为本技术实施例提供的一种芯片的硬件结构示意图;
63.图5为本技术实施例提供的一种服务器的结构示意图;
64.图6为本技术实施例提供的一种系统架构的示意图;
65.图7为本技术实施例提供的一种训练系统的示意图;
66.图8为本技术实施例提供的一种神经网络模型的训练方法的示意性流程图;
67.图9为本技术实施例提供的一种神经网络模型层内切分结果的示意图;
68.图10为本技术实施例提供的一种获取参数过程的示意图;
69.图11为本技术实施例提供的参数获取过程与计算过程的示意性流程图;
70.图12为本技术实施例提供的一种反向计算过程的示意图;
71.图13为本技术实施例提供的不同网卡场景下的参数梯度同步过程的示意图;
72.图14为本技术实施例提供的一种参数梯度同步过程的示意性流程图;
73.图15为本技术实施例提供的另一种参数梯度同步过程的示意性流程图;
74.图16为本技术实施例提供的一种数据处理方法的示意性流程图;
75.图17是本技术实施例提供的神经网络模型的训练装置的示意性框图;
76.图18是本技术实施例提供的图像处理装置的示意性框图;
77.图19是本技术实施例提供的神经网络模型的训练装置的示意性框图;
78.图20是本技术实施例提供的图像处理装置的示意性框图。
具体实施方式
79.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。
80.图1示出一种人工智能主体框架示意图,该主体框架描述了人工智能系统总体工作流程,适用于通用的人工智能领域需求。
81.下面从“智能信息链”(水平轴)和“信息技术(information technology,it)价值链”(垂直轴)两个维度对上述人工智能主题框架进行详细的阐述。
[0082]“智能信息链”反映从数据的获取到处理的一列过程。举例来说,可以是智能信息感知、智能信息表示与形成、智能推理、智能决策、智能执行与输出的一般过程。在这个过程中,数据经历了“数据—信息—知识—智慧”的凝练过程。
[0083]“it价值链”从人智能的底层基础设施、信息(提供和处理技术实现)到系统的产业生态过程,反映人工智能为信息技术产业带来的价值。
[0084]
(1)基础设施:
[0085]
基础设施为人工智能系统提供计算能力支持,实现与外部世界的沟通,并通过基础平台实现支撑。
[0086]
基础设施可以通过传感器与外部沟通,基础设施的计算能力可以由智能芯片提供。
[0087]
这里的智能芯片可以是中央处理器(central processing unit,cpu)、神经网络处理器(neural-network processing unit,npu)、图形处理器(graphics processing unit,gpu)、专门应用的集成电路(application specific integrated circuit,asic)以及现场可编程门阵列(field programmable gate array,fpga)等硬件加速芯片。
[0088]
基础设施的基础平台可以包括分布式计算框架及网络等相关的平台保障和支持,可以包括云存储和计算、互联互通网络等。
[0089]
例如,对于基础设施来说,可以通过传感器和外部沟通获取数据,然后将这些数据提供给基础平台提供的分布式计算系统中的智能芯片进行计算。
[0090]
(2)数据:
[0091]
基础设施的上一层的数据用于表示人工智能领域的数据来源。该数据涉及到图形、图像、语音、文本,还涉及到传统设备的物联网数据,包括已有系统的业务数据以及力、
位移、液位、温度、湿度等感知数据。
[0092]
(3)数据处理:
[0093]
上述数据处理通常包括数据训练,机器学习,深度学习,搜索,推理,决策等处理方式。
[0094]
其中,机器学习和深度学习可以对数据进行符号化和形式化的智能信息建模、抽取、预处理、训练等。
[0095]
推理是指在计算机或智能系统中,模拟人类的智能推理方式,依据推理控制策略,利用形式化的信息进行机器思维和求解问题的过程,典型的功能是搜索与匹配。
[0096]
决策是指智能信息经过推理后进行决策的过程,通常提供分类、排序、预测等功能。
[0097]
(4)通用能力:
[0098]
对数据经过上面提到的数据处理后,进一步基于数据处理的结果可以形成一些通用的能力,比如可以是算法或者一个通用系统,例如,翻译,文本的分析,计算机视觉的处理,语音识别,图像的识别等等。
[0099]
(5)智能产品及行业应用:
[0100]
智能产品及行业应用指人工智能系统在各领域的产品和应用,是对人工智能整体解决方案的封装,将智能信息决策产品化、实现落地应用,其应用领域主要包括:智能制造、智能交通、智能家居、智能医疗、智能安防、自动驾驶,平安城市,智能终端等。
[0101]
本技术实施例可以应用在人工智能中的很多领域,例如,智能制造、智能交通、智能家居、智能医疗、智能安防、自动驾驶,平安城市等领域。
[0102]
具体地,本技术实施例可以具体应用在自动驾驶、图像分类、图像检索、图像语义分割、图像质量增强、图像超分辨率和自然语言处理等需要使用(深度)神经网络的领域。
[0103]
下面对相册图片分类和平安城市这两种应用场景进行简单的介绍。
[0104]
相册图片分类:
[0105]
当用户在终端设备(例如,手机)或者云盘上存储了大量的图片时,通过对相册中图像进行识别可以方便用户或者系统对相册进行分类管理,提升用户体验。
[0106]
利用本技术实施例的神经网络模型的训练方法,能够获得或者优化适用于相册分类的神经网络。接下来就可以利用该神经网络模型对图片进行分类,从而为不同的类别的图片打上标签,便于用户查看和查找。另外,这些图片的分类标签也可以提供给相册管理系统进行分类管理,节省用户的管理时间,提高相册管理的效率,提升用户体验。
[0107]
平安城市场景下的属性识别:
[0108]
平安城市场景下,需要进行多种属性识别,例如行人属性识别和骑行属性识别,深度神经网络凭借着其强大的能力在多种属性识别中发挥着重要的作用。通过采用本技术实施例的神经网络模型的训练方法,能够获得或优化适用于平安城市场景下进行属性识别的神经网络模型。接下来就可以利用该神经网络模型对输入的道路画面进行处理,从而识别出道路画面中的不同的属性信息。
[0109]
由于本技术实施例涉及大量神经网络的应用,为了便于理解,下面先对本技术实施例可能涉及的神经网络的相关术语和概念进行介绍。
[0110]
(1)神经网络
[0111]
神经网络可以是由神经单元组成的,神经单元可以是指以xs和截距1为输入的运算单元,该运算单元的输出可以为:
[0112][0113]
其中,s=1、2、
……
n,n为大于1的自然数,ws为xs的权重,b为神经单元的偏置。f为神经单元的激活函数(activation functions),用于将非线性特性引入神经网络中,来将神经单元中的输入信号转换为输出信号。该激活函数的输出信号可以作为下一层卷积层的输入,激活函数可以是sigmoid函数。神经网络是将多个上述单一的神经单元联结在一起形成的网络,即一个神经单元的输出可以是另一个神经单元的输入。每个神经单元的输入可以与前一层的局部接受域相连,来提取局部接受域的特征,局部接受域可以是由若干个神经单元组成的区域。
[0114]
(2)深度神经网络
[0115]
深度神经网络(deep neural network,dnn),也称多层神经网络,可以理解为具有多层隐含层的神经网络。按照不同层的位置对dnn进行划分,dnn内部的神经网络可以分为三类:输入层,隐含层,输出层。一般来说第一层是输入层,最后一层是输出层,中间的层数都是隐含层。层与层之间是全连接的,也就是说,第i层的任意一个神经元一定与第i+1层的任意一个神经元相连。
[0116]
虽然dnn看起来很复杂,但是就每一层的工作来说,其实并不复杂,简单来说就是如下线性关系表达式:其中,是输入向量,是输出向量,是偏移向量,w是权重矩阵(也称系数),α()是激活函数。每一层仅仅是对输入向量经过如此简单的操作得到输出向量由于dnn层数多,系数w和偏移向量的数量也比较多。这些参数在dnn中的定义如下所述:以系数w为例:假设在一个三层的dnn中,第二层的第4个神经元到第三层的第2个神经元的线性系数定义为上标3代表系数w所在的层数,而下标对应的是输出的第三层索引2和输入的第二层索引4。
[0117]
综上,第l-1层的第k个神经元到第l层的第j个神经元的系数定义为
[0118]
需要注意的是,输入层是没有w参数的。在深度神经网络中,更多的隐含层让网络更能够刻画现实世界中的复杂情形。理论上而言,参数越多的模型复杂度越高,“容量”也就越大,也就意味着它能完成更复杂的学习任务。训练深度神经网络的也就是学习权重矩阵的过程,其最终目的是得到训练好的深度神经网络的所有层的权重矩阵(由很多层的向量w形成的权重矩阵)。
[0119]
(3)卷积神经网络
[0120]
卷积神经网络(convolutional neuron network,cnn)是一种带有卷积结构的深度神经网络。卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器,该特征抽取器可以看作是滤波器。卷积层是指卷积神经网络中对输入信号进行卷积处理的神经元层。在卷积神经网络的卷积层中,一个神经元可以只与部分邻层神经元连接。一个卷积层中,通常包含若干个特征平面,每个特征平面可以由一些矩形排列的神经单元组成。同一特征平面的神经单元共享权重,这里共享的权重就是卷积核。共享权重可以理解为提取图像信息的方式与位置无关。卷积核可以以随机大小的矩阵的形式化,在卷积神经网络的训练
过程中卷积核可以通过学习得到合理的权重。另外,共享权重带来的直接好处是减少卷积神经网络各层之间的连接,同时又降低了过拟合的风险。
[0121]
(4)损失函数
[0122]
在训练深度神经网络的过程中,因为希望深度神经网络的输出尽可能的接近真正想要预测的值,所以可以通过比较当前网络的预测值和真正想要的目标值,再根据两者之间的差异情况来更新每一层神经网络的权重向量(当然,在第一次更新之前通常会有化的过程,即为深度神经网络中的各层预先配置参数),比如,如果网络的预测值高了,就调整权重向量让它预测低一些,不断地调整,直到深度神经网络能够预测出真正想要的目标值或与真正想要的目标值非常接近的值。因此,就需要预先定义“如何比较预测值和目标值之间的差异”,这便是损失函数(loss function)或目标函数(objective function),它们是用于衡量预测值和目标值的差异的重要方程。其中,以损失函数举例,损失函数的输出值(loss)越高表示差异越大,那么深度神经网络的训练就变成了尽可能缩小这个loss的过程。
[0123]
(5)反向传播算法
[0124]
神经网络可以采用误差反向传播(back propagation,bp)算法在训练过程中修正的神经网络模型中参数的大小,使得神经网络模型的重建误差损失越来越小。具体地,前向传递输入信号直至输出会产生误差损失,通过反向传播误差损失信息来更新的神经网络模型中参数,从而使误差损失收敛。反向传播算法是以误差损失为主导的反向传播运动,旨在得到最优的神经网络模型的参数,例如权重矩阵。
[0125]
(6)集合通信逻辑
[0126]
集合通信逻辑包括全局收集(all-gather)、规约(reduce)、全局规约(all-reduce)和分散规约(reduce-scatter)等多种通信方式。
[0127]
all-gather指的是当数据分布在多个进程中,将多个进程的数据聚合至每个进程中。多个进程也可以理解为多个设备。
[0128]
图2中的进程0(rank 0)、进程1(rank 1)、进程2(rank2)和进程3(rank3)表示4个不同的进程,即4个不同的设备;a0、a1、a2和a3表示rank0上存储的数据,b0、b1、b2和b3表示rank1上存储的数据,c0、c1、c2和c3表示rank2上存储的数据,d0、d1、d2和d3表示rank3上存储的数据。
[0129]
例如,如图2的(a)所示,每个设备中均存储有完整数据的一部分,通过all-gather从其他设备获取本地没有存储的数据,从而在本地保存完整数据。
[0130]
reduce指的是将多个进程中的数据按照指定的映射函数进行运算,得到的结果保存在一个进程中。示例性地,映射函数可以为求和函数、最大值函数、最小值函数或平均值函数等。
[0131]
例如,如图2的(b)图所示,指定的映射函数为求和函数,即将4个进程中的数据进行求和,并将求和结果保存在rank0中。
[0132]
all-reduce指的是将多个进程中的数据按照指定的映射函数进行运算,将得到的结果保存在该多个进程中,即每个进程均保存相同的结果。示例性地,映射函数可以为求和函数、最大值函数、最小值函数或平均值函数等。
[0133]
例如,如图2的(c)图所示,指定的映射函数为求和函数,将4个进程中的数据进行
求和,并将求和结果保存在每个进程中。
[0134]
reduce-scatter指的是将多个进程中的数据按照指定的映射函数进行运算,将得到的结果中的不同部分分别保存至不同的进程中,即每个进程保存该运算结果的一部分。若进程数为n,即集合通信的设备数量为n,则每个进程中保存的数据量为运算结果对应的数据量的1/n。示例性地,映射函数可以为求和函数、最大值函数、最小值函数或平均值函数等。
[0135]
例如,如图2所示的(d)图所示,指定的映射函数为求和函数,将4个进程中的数据进行求和,并将求和结果按照4个进程各自负责的数据分为4个部分,将该4部分分别保存至对应的进程中。
[0136]
(7)分布式机器学习
[0137]
分布式机器学习是利用计算机集群,使机器学习算法更好地从大数据中训练出性能优良的大模型。
[0138]
分布式机器学习包括数据并行模式和模型并行模式。
[0139]
在数据并行模式中,每个设备中保存一份模型参数,训练数据被划分后分配至各个设备中,各个设备根据各自分配的训练数据,对模型进行训练,即各自完成前向计算和反向计算得到参数梯度,各个设备得到的参数梯度同步后更新模型的参数。各自被分配的训练数据通常是一个批量大小(batchsize)。
[0140]
在模型并行模式中,每个设备中保存模型的一部分参数,各个设备负责同一模型的不同部分的计算,共同协作完成模型的训练。
[0141]
如图3所示,本技术实施例提供了一种系统架构100。在图3中,数据采集设备160用于采集训练数据。针对本技术实施例的图像处理方法来说,训练数据可以包括训练图像以及训练图像对应的分类结果,其中,训练图像的结果可以是人工预先标注的结果。
[0142]
在采集到训练数据之后,数据采集设备160将这些训练数据存入数据库130,训练设备120基于数据库130中维护的训练数据训练得到目标模型/规则101。
[0143]
下面对训练设备120基于训练数据得到目标模型/规则101进行描述,训练设备120对输入的原始图像进行处理,将输出的图像与原始图像进行对比,直到训练设备120输出的图像与原始图像的差值小于一定的阈值,从而完成目标模型/规则101的训练。
[0144]
上述目标模型/规则101能够用于实现本技术实施例的图像处理方法。本技术实施例中的目标模型/规则101具体可以为神经网络。需要说明的是,在实际的应用中,所述数据库130中维护的训练数据不一定都来自于数据采集设备160的采集,也有可能是从其他设备接收得到的。另外需要说明的是,训练设备120也不一定完全基于数据库130维护的训练数据进行目标模型/规则101的训练,也有可能从云端或其他地方获取训练数据进行模型训练,上述描述不应该作为对本技术实施例的限定。
[0145]
根据训练设备120训练得到的目标模型/规则101可以应用于不同的系统或设备中,如应用于图3所示的执行设备110,所述执行设备110可以是终端,如手机终端,平板电脑,笔记本电脑,增强现实(augmented reality,ar)ar/虚拟现实(virtual reality,vr),车载终端等,还可以是服务器或者云端等。在图3中,执行设备110配置输入/输出(input/output,i/o)接口112,用于与外部设备进行数据交互,用户可以通过客户设备140向i/o接口112输入数据,所述输入数据在本技术实施例中可以包括:客户设备输入的待处理图像。
[0146]
预处理模块113和预处理模块114用于根据i/o接口112接收到的输入数据(如待处理图像)进行预处理,在本技术实施例中,也可以没有预处理模块113和预处理模块114(也可以只有其中的一个预处理模块),而直接采用计算模块111对输入数据进行处理。
[0147]
在执行设备110对输入数据进行预处理,或者在执行设备110的计算模块111执行计算等相关的处理过程中,执行设备110可以调用数据存储系统150中的数据、代码等以用于相应的处理,也可以将相应处理得到的数据、指令等存入数据存储系统150中。计算模块111使用目标模型/规则101对输入的数据进行处理,例如,在本技术实施例中,对输入的待处理图像进行处理,得到图像处理结果(例如,图像分类结果)。
[0148]
最后,i/o接口112将处理结果,如上述得到的图像的分类结果返回给客户设备140,从而提供给用户。
[0149]
值得说明的是,训练设备120可以针对不同的目标或称不同的任务,基于不同的训练数据生成相应的目标模型/规则101,该相应的目标模型/规则101即可以用于实现上述目标或完成上述任务,从而为用户提供所需的结果。
[0150]
在图3中所示情况下,用户可以手动给定输入数据,该手动给定可以通过i/o接口112提供的界面进行操作。另一种情况下,客户设备140可以自动地向i/o接口112发送输入数据,如果要求客户设备140自动发送输入数据需要获得用户的授权,则用户可以在客户设备140中设置相应权限。用户可以在客户设备140查看执行设备110输出的结果,具体的呈现形式可以是显示、声音、动作等具体方式。客户设备140也可以作为数据采集端,采集如图所示输入i/o接口112的输入数据及输出i/o接口112的输出结果作为新的样本数据,并存入数据库130。当然,也可以不经过客户设备140进行采集,而是由i/o接口112直接将如图所示输入i/o接口112的输入数据及输出i/o接口112的输出结果,作为新的样本数据存入数据库130。
[0151]
值得注意的是,图3仅是本技术实施例提供的一种系统架构的示意图,图中所示设备、器件、模块等之间的位置关系不构成任何限制,例如,在图3中,数据存储系统150相对执行设备110是外部存储器,在其它情况下,也可以将数据存储系统150置于执行设备110中。
[0152]
如图3所示,根据训练设备120训练得到目标模型/规则101,该目标模型/规则101在本技术实施例中可以是本技术中的神经网络,具体的,本技术实施例构建的神经网络可以为cnn,深度卷积神经网络(deep convolutional neural networks,dcnn),循环神经网络(recurrent neural network,rnns)等等。
[0153]
图4为本技术实施例提供的一种芯片的硬件结构,该芯片包括神经网络处理器50。
[0154]
该芯片可以被设置在如图3所示的执行设备110中,用以完成计算模块111的计算工作。该芯片也可以被设置在如图3所示的训练设备120中,用以完成训练设备120的训练工作并输出目标模型/规则101。神经网络中各层的算法均可在如图4所示的芯片中得以实现。
[0155]
神经网络处理器npu 50作为协处理器挂载到主中央处理器(central processing unit,cpu)(host cpu)上,由主cpu分配任务。npu的核心部分为运算电路503,控制器504控制运算电路503提取存储器(权重存储器或输入存储器)中的数据并进行运算。
[0156]
在一些实现中,运算电路503内部包括多个处理单元(process engine,pe)。在一些实现中,运算电路503是二维脉动阵列。运算电路503还可以是一维脉动阵列或者能够执行例如乘法和加法这样的数学运算的其它电子线路。在一些实现中,运算电路503是通用的
矩阵处理器。
[0157]
举例来说,假设有输入矩阵a,权重矩阵b,输出矩阵c。运算电路从权重存储器502中取矩阵b相应的数据,并缓存在运算电路中每一个pe上。运算电路从输入存储器501中取矩阵a数据与矩阵b进行矩阵运算,得到的矩阵的部分结果或最终结果,保存在累加器(accumulator)508中。
[0158]
向量计算单元507可以对运算电路的输出做进一步处理,如向量乘,向量加,指数运算,对数运算,大小比较等等。例如,向量计算单元507可以用于神经网络中非卷积/非fc层的网络计算,如池化(pooling),批归一化(batch normalization),局部响应归一化(local response normalization)等。
[0159]
在一些实现中,向量计算单元能507将经处理的输出的向量存储到统一缓存器506。例如,向量计算单元507可以将非线性函数应用到运算电路503的输出,例如累加值的向量,用以生成激活值。在一些实现中,向量计算单元507生成归一化的值、合并值,或二者均有。在一些实现中,处理过的输出的向量能够用作到运算电路503的激活输入,例如用于在神经网络中的后续层中的使用。
[0160]
统一存储器506用于存放输入数据以及输出数据。
[0161]
存储单元访问控制器505(direct memory access controller,dmac)将外部存储器中的输入数据存入输入存储器501和/或统一存储器506、将外部存储器中的权重数据存入权重存储器502,以及将统一存储器506中的数据存入外部存储器。
[0162]
总线接口单元(bus interface unit,biu)510,用于通过总线实现主cpu、dmac和取指存储器509之间进行交互。
[0163]
与控制器504连接的取指存储器(instruction fetch buffer)509,用于存储控制器504使用的指令。
[0164]
控制器504,用于调用指存储器509中缓存的指令,实现控制该运算加速器的工作过程。
[0165]
一般地,统一存储器506,输入存储器501,权重存储器502以及取指存储器509均为片上(on-chip)存储器,外部存储器为该npu外部的存储器,该外部存储器可以为双倍数据率同步动态随机存储器(double data rate synchronous dynamic random access memory,ddr sdram)、高带宽存储器(high bandwidth memory,hbm)或其他可读可写的存储器。
[0166]
其中,本技术实施例中的神经网络中各层的运算可以由运算电路503或向量计算单元507执行。
[0167]
本技术实施例中的神经网络模型的训练方法可以是由多个加速器共同配合完成的。能够执行神经网络模型中各层的运算的设备均可以称为加速器。示例性地,加速器可以为图4所示的npu 50,或者,加速器也可以为cpu,或者,加速器也可以包括cpu和npu。
[0168]
如图5所示,本技术实施例提供了一种服务器400。该服务器400可以作为如图3所示的执行设备110,用以完成计算模块111的计算工作。该服务器400也可以作为如图3所示的训练设备120,用以完成训练设备120的训练工作并输出目标模型/规则101。
[0169]
服务器400包括网卡401、cpu 402和多个gpu。如图5所示,加速器可以包括gpu403、gpu404、gpu405等。图5所示的服务器中,gpu用于执行神经网络模型中各层的运算。在图5
中,gpu也可以理解为加速器。应理解,图5中仅以gpu作为加速器作为示例,在实际应用中,加速器还可以为cpu、npu或tpu等其他能够执行神经网络模型的各层运算的设备。例如,加速器可以为图4所示的npu 50。本技术实施例对此不做限定。
[0170]
应理解,图5中的设备的数量仅为示意,服务器400可以包括比图5所示的数量更多或更少数量的cpu、网卡以及gpu。
[0171]
具体地,由cpu确定需要gpu进行计算的计算图以及训练样本,并下发至gpu中,由gpu按照计算图和对应的训练样本进行计算,并将计算结果反馈至cpu。
[0172]
示例性地,可以通过软件优化目前cpu和gpu所执行的神经网络模型的训练方法以及通信流程,以实现本技术实施例中的神经网络模型的训练方法。例如,在cpu上软件,由该软件生成并下发需要gpu计算的计算图和训练样本。也就是说,本技术实施例的可以在现有的硬件的基础上通过软件的方式实现,具体地,在服务器中的cpu上运行,由cpu控制服务器中的gpu执行本技术实施例中的神经网络模型的训练方法。
[0173]
如图6所示,本技术实施例提供了一种系统架构300。该系统架构包括本地设备301、本地设备302以及执行设备310和数据存储系统350,其中,本地设备301和本地设备302通过通信网络与执行设备310连接。
[0174]
执行设备310可以由一个或多个服务器实现。可选的,执行设备310可以与其它计算设备配合使用,例如:数据存储器、路由器、负载均衡器等设备。执行设备310可以布置在一个物理站点上,或者分布在多个物理站点上。执行设备310可以使用数据存储系统350中的数据,或者调用数据存储系统350中的程序代码来实现本技术实施例的神经网络模型的训练方法。
[0175]
具体地,在一种实现方式中,执行设备110中包括至少一个第一加速器,至少一个第一加速器可以执行以下过程:
[0176]
至少一个第一加速器分别获取至少一个第一训练样本;
[0177]
至少一个第一加速器分别对至少一个第一训练样本执行神经网络模型的前向计算,得到前向计算的结果,其中,至少一个第一加速器在执行神经网络模型中的第i层的前向计算之前,从本地以及其他加速器获取第i层的不同参数以得到第i层的完整的模型参数,i为正整数;
[0178]
至少一个第一加速器分别利用前向计算的结果进行反向计算,得到神经网络模型的第一参数梯度;
[0179]
至少一个第一加速器分别基于神经网络模型的第一参数梯度更新神经网络模型的参数。
[0180]
通过上述过程执行设备110能够获取一个训练好的神经网络,即目标神经网络,该目标神经网络可以用于图像分类或者进行图像处理等等。
[0181]
用户可以操作各自的用户设备(例如本地设备301和本地设备302)与执行设备310进行交互。每个本地设备可以表示任何计算设备,例如个人计算机、计算机工作站、智能手机、平板电脑、智能摄像头、智能汽车或其他类型蜂窝电话、媒体消费设备、可穿戴设备、机顶盒、游戏机等。
[0182]
每个用户的本地设备可以通过任何通信机制/通信标准的通信网络与执行设备310进行交互,通信网络可以是广域网、局域网、点对点连接等方式,或它们的任意组合。
[0183]
在一种实现方式中,本地设备301、本地设备302从执行设备310获取到目标神经网络的相关参数,将目标神经网络部署在本地设备301、本地设备302上,利用该目标神经网络进行图像分类或者图像处理等等。
[0184]
在另一种实现中,执行设备310上可以直接部署目标神经网络,执行设备310通过从本地设备301和本地设备302获取待处理图像,并采用目标神经网络模型对待处理图像进行分类或者其他类型的图像处理。
[0185]
需要注意的,执行设备310的所有功能也可以由本地设备实现。例如,本地设备301实现执行设备310的功能并为自己的用户提供服务,或者为本地设备302的用户提供服务。
[0186]
上述执行设备310也可以为云端设备,此时,执行设备310可以部署在云端;或者,上述执行设备310也可以为终端设备,此时,执行设备310可以部署在用户终端侧,本技术实施例对此并不限定。
[0187]
如图7所示,本技术实施例提供一种训练系统700的结构示意图,该训练系统700可以作为图6中的执行设备310,用以完成执行设备的训练工作得到目标神经网络模型,也可以作为图3中的训练设备120,用以完成训练设备120的训练工作并输出目标模型/规则101。
[0188]
训练系统700包括服务器710、服务器720和服务器730,服务器之间通过通信网络互连。
[0189]
示例性地,通信网络可以由交换机(switch)构成。如图7所示,通信网络由交换机741、交换机742和交换机743构成。
[0190]
服务器中可以包括一个或多个cpu和一个或多个加速器。例如,如图7所示,加速器可以为gpu。服务器710可以包括cpu 711、gpu 712、gpu 713和gpu 714。服务器720可以包括cpu 721、gpu 722、gpu 723和gpu 724。服务器730可以包括cpu 731、gpu 732、gpu 733和gpu 734。
[0191]
应理解,图7中的设备的数量仅为示意,训练系统700可以包括比图7所示的数量更多或更少数量的服务器、cpu、网卡以及gpu。
[0192]
单个设备的内存大小有限,深度模型中的模型参数较多,给设备带来了较大的存储压力,内存较小的设备甚至无法保存完整的模型参数,难以执行神经网络模型的训练过程。
[0193]
本技术实施例提出一种神经网络模型的训练方法,能够降低训练设备的存储压力。
[0194]
下面结合图8对本技术实施例的一种神经网络模型的训练方法1000进行详细的介绍。图8所示的方法可以由神经网络的训练系统来执行,该训练系统可以是云服务设备,也可以是移动终端,例如,电脑、服务器等运算能力足以用来执行方法1000的装置。示例性地,图8所示的方法可以由图3中所示的训练设备120、图4中的神经网络处理器50、图5中的服务器400、图6中的执行设备310或图7中的服务器710、服务器720、服务器730执行。
[0195]
示例性地,该训练系统中包括多个设备(device),例如,该系统可以为图5所示的服务400,该服务器中包括3个加速器,该3个加速器即为3个设备,该3个设备用于执行神经网络模型中各层的运算,也就是用于对神经网络模型进行训练。具体地,该3个设备可以用于执行方法1000。例如,加速器可以为cpu、gpu、npu或tpu等。再如,该系统可以为如图7所示的系统,该系统中包括3个服务器,每个服务器中可以包括3个设备,例如gpu,该9个设备用
于执行神经网络模型中各层的运算,也就是用于对神经网络模型进行训练。具体地,该9个设备可以作为9个第一加速器用于执行方法1000。
[0196]
为了更好地描述方法1000,下面结合附图说明本技术实施例中的神经网络模型的划分方式和存储方式。
[0197]
将神经网络模型进行层内切分后得到n个参数分区。其中,n为用于分布式存储的设备的数量,用于分布式存储的设备指的是共同存储完整的神经网络模型的模型参数的多个设备。该值可以由用户设定,也可以是预先存储的,本技术实施例对此不做限定。n为大于1的整数。
[0198]
该n个参数分区分别存储于n个加速器中。该n个加速器可以为能够执行神经网络模型中的各层网络的运算的设备,例如,该n个加速器可以为npu、gpu或tpu等。该n个加速器可以理解为一个共享内存组中的加速器。训练系统中可以包括一个共享内存组,也可以包括多个共享内存组。多个共享内存组中的每个共享内存组均包括n个加速器。例如,训练系统中包括一个共享内存组,即系统至少包括n个加速器,该n个加速器可以用于执行该神经网络模型的训练。再如,训练系统中包括3个共享内存组,则该系统至少包括3n个加速器。
[0199]
层内切分指的是将神经网络模型的至少一层的参数进行切分,得到n个参数分区,每个参数分区包括该至少一层的部分参数。例如,将神经网络模型中的第一层的参数进行切分,每个参数分区均包括第一层的部分参数。
[0200]
示例性地,将神经网络模型的每层的参数进行切分,则每个参数分区包括神经网络模型中至少一层的部分参数。在该情况下,神经网络模型中的任一层的参数存储于至少两个加速器中。
[0201]
进一步地,每个参数分区也可以包括神经网络模型中的每层的部分参数。例如,神经网络模型包括32层,则每个分区包括该32层中的每层的部分参数。
[0202]
进一步地,对神经网络模型进行层内切分可以为对神经网络模型进行均匀地层内切分。也就是说,该n个参数分区中所包含的参数的数量可以是相同的。每个参数分区中包括该神经网络模型的参数的1/n。n个加速器中的每个加速器上存储神经网络模型的1/n的参数。这样,每个加速器上存储该神经网络模型的一部分,每个加速器存储该神经网络模型所需的内存(除了特征占用的内存之外)减少为原本所需的内存1/n。
[0203]
例如,如图9所示的神经网络模型包括32层网络,即图9中从左至右的l1至l32,l1表示第一层,l32表示第32层。将该神经网络模型在层内均匀切分,n为4,得到4个参数分区。每个参数分区均包括32层中的每层参数的部分参数。也就是将每层参数均分为4部分,l1至l32层参数中每层参数中的第一部分a构成4个参数分区中的第一参数分区w
al1-l32
,l1至l32层参数中每层参数中的第二部分b构成4个参数分区中的第二参数分区w
bl1-l32
,l1至l32层参数中每层参数中的第三部分c构成4个参数分区中的第三参数分区w
cl1-l32
,l1至l32层参数中每层参数中的第四部分d构成4个参数分区中的第四参数分区w
dl1-l32
。或者,可以理解为将模型横向划分为4个条带a/b/c/d,每个条带中的参数作为一个参数分区。
[0204]
应理解,以上仅为示例,每个参数分区可以包括至少一层参数中的部分参数。至少一层可以为32层,即整个神经网络模型,也可以少于32层,即每个参数分区中所涉及的层数可以少于32层,本技术实施例对此不做限定。
[0205]
图9中的4个参数分区分别存储于4个加速器,即图9中的d1、d2、d3和d4。这样,每个
加速器上仅保存1/4的参数,如以下公式所示。
[0206][0207]wd1(a)l1-l32
表示存储于d1上的l1至l32层参数的第一部分a,也就是每层参数的第一部分a存储于d1上,w
d2(b)l1-l32
表示存储于d2上的l1至l32层参数的第二部分b,也就是每层参数的第二部分b存储于d2上,w
d3(c)l1-l32
表示存储于d3上的l1至l32层参数的第三部分c,也就是每层参数的第三部分c存储于d3上,w
d4(d)l1-l32
表示存储于d4上的l1至l32层参数的第四部分d,也就是每层参数的第四部分d存储于d4上。
[0208]
具体地,n个参数分区可以分别存储于n个加速器的内存中。
[0209]
示例性地,每个加速器可以包括arm核(core)和人工智能(artificial intelligence,ai)core,加速器的内存可以包括hbm。例如,如图10所示,每个加速器集成一个arm核和4个ai core,加速器的内存为hbm。参数分区可以存储于加速器的hbm中。例如,如图9所示,4个参数分区分别存储于d1的内存hbm1、d2的内存hbm2、d3的内存hbm3和d4的内存hbm4中。
[0210]
该n个加速器可以位于一个服务器(server)中,也可以位于多个服务器中。本技术实施例中仅以该n个加速器位于一个服务器中为例进行说明,不对本技术实施例的方案构成限定。
[0211]
在模型训练过程中,一次迭代训练包括三个阶段:前向计算、反向计算和参数更新。反向计算也可以称为反向传播。优化器是实现参数更新的功能模块,不同的优化器可以采用不同的参数更新方法对模型的参数进行更新,本技术实施例对优化器的类型不做限定。
[0212]
进一步地,在反向传播过程中的参数梯度也可以按照上述方式存储至对应的加速器中,即按照模型中的参数切分的方式将参数梯度划分为多个部分存储至相应的参数所在的加速器中。
[0213]
示例性地,将模型的参数梯度δw均匀分为4个参数梯度分区示例性地,将模型的参数梯度δw均匀分为4个参数梯度分区和和表示l1至l32层中每层的参数梯度的第一部分,表示l1至l32层中每层的参数梯度的第二部分,表示l1至l32层中每层的参数梯度的第三部分,表示l1至l32层中每层的参数梯度的第四部分。4个参数梯度分区分别存储于d1、d2、d3和d4上,如以下公式所示。
[0214][0215]
表示存储于d1上的l1至l32层的参数梯度的第一部分,也就是每层参数梯度的第一部分存储于d1上,表示存储于d2上的l1至l32层的参数梯度的第二部分,也就是每层参数梯度的第二部分存储于d2上,表示存储于d3上的l1至l32层的参数梯度的第三部分,也就是每层参数梯度的第三部分存储于d2上,表示存储于d4上的l1至l32层的参数梯度的第四部分,也就是每层参数梯度的第四部分存储于d4上。
[0216]
进一步地,在参数更新过程中的优化器中涉及的参数、参数动量以及状态信息也可以参照上述方式存储至对应的加速器中,即按照模型的参数切分的方式将上述信息划分
为多个部分分别存储至对应参数所在的加速器中。
[0217]
基于上述神经网络模型的划分方式和存储方式,训练系统中的加速器可以按照数据并行的方式进行神经网络模型的分布式训练。
[0218]
以一个内存共享组中的n个加速器为例,该n个加速器分别基于不同的训练样本进行前向计算和反向计算,得到参数梯度,然后基于全部或部分训练样本得到的参数梯度对模型的参数进行更新。
[0219]
例如,如图9所示,一个内存共享组包括n个加速器,该n个加速器中的每个加速器每次迭代输入的训练样本为m个,该m个训练样本可以保存在加速器的hbm中。每个加速器上输入的训练样本可以不同。若训练系统中用于训练该神经网络模型的设备为该n个加速器,在该情况下,n个加速器每次迭代训练n*m个训练样本,也就是每次迭代可以基于n*m个训练样本得到的参数梯度对模型的参数进行更新,或者,每次迭代也可以基于于n*m个训练样本中的部分训练样本得到的参数梯度对模型的参数进行更新。每次迭代中,n*m个训练样本即为全部训练样本。若训练系统中用于训练该神经网络模型的设备还包括除该n个加速器之外的其他加速器,在该情况下,该n个加速器还可以基于该n个加速器以及除该n个加速器之外的其他加速器得到的参数梯度对模型的参数进行更新。在该情况下,全部训练样本还包括其他加速器所使用的训练样本。
[0220]
根据本技术实施例的方案,多个加速器按照数据并行的方式进行神经网络模型的分布式训练,每个加速器上仅保存神经网络模型的部分参数,所需内存远小于保存整个神经网络模型的参数所需的内存,节约大量内存,使得每个加速器可以支持更多的训练样本进行训练,提高了训练性能。
[0221]
下面结合附图分别对数据并行方式训练神经网络模型的前向计算过程、反向计算过程和参数更新过程进行说明。
[0222]
s1010,至少一个第一加速器获取至少一个训练样本。
[0223]
其中,训练样本可以预先存储于加速器的内存中,也可以由用户输入。
[0224]
示例性地,在进行分布式训练的情况下,该至少一个加速器包括两个或两个以上加速器。该两个或两个以上加速器可以属于同一个共享内存组,也可以属于不同的共享内存组。
[0225]
例如,该至少一个加速器为n个加速器,可以将多个训练样本分为n组,n个加速器分别获取该n组训练样本。例如,将多个训练样本平均分为n组,每组训练样本包括m个训练样本。n个加速器中的每个加速器分别获取一组训练样本,即每个加速器获取m个训练样本。例如,如图9所示,该n组训练样本分别存储于n个加速器中,每个加速器可以从内存中获取m个训练样本。
[0226]
示例性地,n个加速器可以如图10所示,在图10中,n为4,每个加速器集成一个高级精简指令集机器(advanced risc machines,arm)core和四个ai core。训练样本分别保存于d1至d4的内存中,例如,保存至图10中hbm1、hbm2、hbm3和hbm4中,d1至d4可以分别从各自的hbm中加载m个训练样本至ai core中。
[0227]
应理解,图10中所示的加速器仅为示例,本技术实施例对加速器的形式不做限定,该加速器能够用于实现神经网络模型的训练即可。例如,n个加速器还可以为如图4所示的神经网络处理器50。还需要说明的是,图9和图10仅以同一个内存共享组的n个设备作为示
例,训练系统中用于分布式训练的加速器也可以属于不同的内存共享组。
[0228]
s1020,至少一个第一加速器分别对至少一个训练样本执行神经网络模型的前向计算,得到前向计算的结果。
[0229]
其中,至少一个第一加速器在执行神经网络模型中的第i层的前向计算之前,从本地以及其他加速器获取第i层的不同参数以得到第i层的完整的模型参数,i为正整数。
[0230]
在执行神经网络模型每一层的前向计算时,需要该层的完整的模型参数。第i层的不同参数分别存储于多个加速器中,第i层的部分参数存储于第一加速器中,其他部分分别存储于其他加速器中,第一加速器在执行第i层的前向计算之前需要从本地和其他加速器中获取第i层的完整的模型参数。其中,其他加速器为与第一加速器属于同一个共享内存组的加速器。例如,第i层的不同参数分别存储于n个加速器中,该n个加速器属于一个共享内存组。该n个加速器中一个加速器(第一加速器的一例)在执行第i层的前向计算之前需要从本地和其余n-1个加速器中存储的第i层的不同参数,以得到第i层的完整的模型参数。
[0231]
例如,如图9所示,在进行l1层的前向计算时,需要l1层完整的参数。l1层的参数包括存储于4个加速器上的4部分,即第一部分第二部分第三部分和第四部分如图9所示,在进行l1层的前向计算之前,需要分别从4个加速器中获取该4部分,以得到l1层完整的参数。如图10所示,d1(第一加速器的一例)的hbm中存储有l1层的参数的一部分,其余3个部分分别存储于d2至d4的hbm中。d1从hmb1中获取l1层的参数的一个部分,从hbm2、hbm3和hbm4分别获取其余3个部分,得到l1层的完整的参数。
[0232]
该神经网络模型的前向计算过程中所有需要从其他加速器获取参数的层均可以理解为第i层。第一加速器在执行任一层的前向计算之前,若本地没有存储该层的完整的模型参数,可以从本地和其他加速器中获取该层的不同参数,以获取该层的完整的模型参数。
[0233]
需要说明的是,第一加速器每次获取参数的层数可以为一层,也可以为多层。例如,第一加速器在执行第i层的前向计算之前的任一次参数获取过程中,均可以仅获取第i层的参数,也可以同时获取第i层和其他层的参数。
[0234]
也就是说,第一加速器每次获取参数的粒度可以根据需要设定。第一加速器每次获取参数的粒度可以是人为设定的,具体地,可以根据硬件能力和软件需求设定。例如,根据第一加速器的存储空间设定。
[0235]
获取参数的粒度可以理解为获取参数的层数。获取参数的粒度可以为一层的参数,也可以为多层的参数。获取参数的粒度越大,获取的参数的层数越多,所需的存储空间越大。
[0236]
例如,该神经网络模型包括32层,第一设备按照从第1层到第32层的顺序执行前向计算。若该神经网络模型中每一层均进行了层内切分,并存储至多个加速器中,则第一加速器在执行每一层的前向计算之前均需要从本地和其他加速器中获取该层的完整的参数。若每次获取的参数粒度为一层的参数,则第一加速器按照从第1层到第32层的顺序每次获取一层的参数。若每次获取的参数粒度为两层的参数,则第一加速器按照从第1层到第32层的顺序每次获取两层的参数,比如,从本地和其他加速器中同时获取第1层和第2层的不同参数以获取第1层和第2层的完整的模型参数。需要说明的是,以上仅为示例,在前向计算的过程中,第一加速器每次获取参数的粒度可以是相同的,也可以是不同的。例如,可以根据当
前第一加速器的存储空间确定下一次获取的参数粒度,只要获取的参数中至少包括一层的参数即可。至少一个第一加速器中每个第一加速器获取参数的粒度可以相同,也可以不同。
[0237]
进一步地,对于属于同一个共享内存组的n个设备,该n个设备可以获取相同的参数。
[0238]
例如,图10中d1至d4属于同一个共享参数组,d1至d4均用于对该神经网络模型进行训练,也就是说至少一个加速器包括d1至d4。第i层的参数可以包括4部分,4个加速器上分别存储该4部分。d1从自身获取第一部分参数,从其他三个设备中获取其余三个部分,得到第i层的完整的模型参数。d2从自身获取第二部分参数,从其他三个设备中获取其余三个部分,得到第i层的完整的模型参数。d3从自身获取第三部分参数,从其他三个设备中获取其余三个部分,得到第i层的完整的模型参数。d4从自身获取第四部分参数,从其他三个设备中获取其余三个部分,第i层的完整的模型参数。例如,参数存储于hbm中,获取参数可以为将参数从hbm中加载参数至ai core的cache中。也就是说,该4个加速器需要从4个hbm上获取参数。
[0239]
获取参数片段也可以理解为加载(load)参数。示例性地,可以采用点到点通信、cache读写方式或集合通信的方式获取参数片段。例如,点到点通信可以通过直接存储器访问(direct memory access,dma)引擎传输或网卡传输实现。再如,集合通信可以通过dma引擎传输或网卡(network interface card,nic)传输实现。
[0240]
在神经网络模型的前向计算过程中,n个加速器需要在各设备间加载模型参数,其他数据可以在本地保存。
[0241]
需要说明的是,本技术实施例中的“模型”与“神经网络模型”所表示的含义相同。
[0242]
可选地,至少一个第一加速器在执行神经网络模型中的第i层的前向计算之后,释放从其他加速器获取的第i层的参数。
[0243]
具体地,第一加速器执行第i层的前向计算,可以得到第一特征,第一加速器保存第一特征,并释放从其他加速器获取的第i层的参数。
[0244]
也就是说,第一加速器可以在执行任一层的前向计算之后,保存该层输出的特征,若该层的参数中包括从其他加速器获取的参数,则释放从其他加速器获取的该层的参数。
[0245]
第一加速器可以在第i层的前向计算完成后保存第一特征,并释放从其他加速器获取的第i层的参数,然后执行第i+1层的前向计算;或者,第一加速器也可以在第i层之后的任一层的前向计算完成后保存相应层输出的特征,并释放从其他加速器获取的第i层的参数。
[0246]
例如,第一加速器可以将第一特征可以保存至hbm中,并释放cache。
[0247]
例如,第一加速器分别从本地和其他加速器获取l1和l2层的不同参数,以得到l1和l2层的完整的模型参数,第一加速器执行l1层的前向计算,输出特征a(第一特征的一例),特征a输入l2层中,第一加速器执行l2层的前向计算,输出特征b(第一特征的一例),第一加速器保存特征a和特征b,并释放l1层的参数和l2层的参数。或者,第一加速器执行l1层的前向计算,输出特征a(第一特征的一例),第一加速器保存特征a,并释放l1层的参数,特征a输入l2层中,第一加速器执行l2层的前向计算,输出特征b(第一特征的一例),第一加速器保存特征b,并释放l2层的参数。
[0248]
根据本技术实施例的方案,在完成前向计算后,释放从其他加速器获取的参数,可
以降低训练过程中模型参数所占用的空间,这样,每个加速器可以支持更多的训练样本,提高训练集群的线性度,有利于实现神经网络模型的高效训练。
[0249]
该至少一个加速器分别基于不同的训练样本进行前向计算,分别得到前向计算的结果。下面结合图9中所示的神经网络模型作为示例对前向计算过程进行说明,不对本技术实施例的方案构成限定。
[0250]
参数分区按照图9中的方式划分后分别保存至d1至d4的内存中,例如,保存至图10中的hbm1、hbm2、hbm3和hbm4中,其中,w-a、w-b、w-c和w-d分别表示存储于hbm1、hbm2、hbm3和hbm4中的神经网络模型的4个参数分区。图9的神经网络模型中的每一层均进行了层内切分,得到4个部分,每个部分分别存储在d1至d4的内存中。
[0251]
如图10所示,在进行l1层的前向计算之前,各个加速器分别获取至少一层参数,该至少一层参数包括l1层参数。或者,可以理解为各个加速器以一层层为单位加载参数或者以多层为单位加载参数。也就是说各个加速器进行l1层的前向计算可以加载l1层参数,即以一层为单位加载参数,也可以加载包括l1层在内的多层参数,即以多层为单位加载参数。
[0252]
下面结合图10以加速器以层一层为单位加载参数对前向计算过程进行说明。图10中的4个加速器(至少一个第一加速器的一例)属于同一个共享内存组。
[0253]
步骤1:该4个加速器加载l1层参数。
[0254]
示例性地,4个加速器可以采用all-gather的方式加载l1层参数。例如,如图10所示,4个加速器分别从hbm1加载l1层参数的第一部分从hbm2加载l1层参数的第二部分从hbm3加载l1层参数的第三部分和从hbm4加载l1层参数的第四部分以得到l1层的参数。具体地,各个加速器将参数加载至各自的ai core的cache中。这样,各个加速器的ai core的cache中均保存有l1层完整的参数。
[0255]
步骤2:4个加速器分别基于本地的训练样本并行进行l1层的前向计算,得到l1层输出的特征(feature)(第一特征的一例),将feature分别保存至本地的hbm中。
[0256]
进一步地,当l1层的前向计算完成后,各个加速器可以释放ai core的cache。
[0257]
步骤3:依次执行l2至l32层的前向计算。
[0258]
按照l1层的前向计算过程依次执行l2层至l32层的前向计算,直至各层的前向计算完成。
[0259]
下面结合图10以加速器以多层为单位加载参数对前向计算过程进行说明。
[0260]
步骤1:4个加速器加载l1层参数和l2层参数。
[0261]
示例性地,各个加速器可以采用all-gather的方式加载l1层参数和l2层参数。例如,各个加速器分别从hbm1加载l1层参数的第一部分和l2层参数的第一部分从hbm2加载l1层参数的第二部分和l2层参数的第二部分从hbm3加载l1层参数的第三部分和l2层参数的第三部分从hbm4加载l1层参数的第四部分和l2层参数的第四部分具体地,各个加速器将参数加载至各自的ai core的cache中。这样,各个加速器的ai core的cache中均保存有l1层完整的参数和l2层完整的参数。
[0262]
步骤2:4个加速器分别基于本地的训练样本并行进行l1层和l2层的前向计算,得到l1层和l2层输出的特征(第一特征的一例),将feature保存至本地的hbm中。进一步地,当
l2层的前向计算完成后,可以释放ai core的cache。
[0263]
步骤3:依次执行l3至l32层的前向计算。
[0264]
按照l1和l2层的前向计算过程依次执行l3层至l32层的前向计算,直至各层的前向计算完成。
[0265]
应理解,在整个前向计算过程中需要多次加载参数,以上仅以每次以相同粒度加载参数为例进行说明。在具体实施过程中,每次加载参数的粒度可以不同,例如,第一次以层一层为单位加载参数,第二次以层两层为单位加载参数,本技术实施例对每次加载的参数粒度不做限定。在具体实施过程中,也可以根据硬件能力和软件需求自行选择加载参数的粒度。
[0266]
可选地,获取参数和前向计算可以是串行执行的,也可以是以重叠(overlap)方式执行的。
[0267]
串行执行指的是,在进行一层或多层的前向计算完成后,获取该层或多层之后的层的参数。
[0268]
例如,如图11的(a)所示,各个加速器每次加载一层参数,然后执行该层的前向计算。该层的前向计算完成后,加载下一层的参数,然后执行下一层的前向计算,直至完成整个模型的前向计算。
[0269]
以overlap方式执行指的是,在进行一层或多层的前向计算的时段内,获取该一层或多层之后的层的参数。
[0270]
或者可以理解为,至少一个第一加速器在执行神经网络模型中的第i层之前的任一层或多层的前向计算的时段内,从本地以及其他加速器获取第i层的不同参数以得到第i层的完整的模型参数。
[0271]
需要说明的是,在当前层的前向计算的时段内获取其他层的参数,可以理解为在当前层的前向计算的时段内执行获取其他层的参数的操作,并不限定获取其他层的参数的时间完全处于当前层的前向计算的时段内。
[0272]
例如,如图11的(b)所示,各个设备每次加载一层参数,然后执行该层的前向计算。在执行该层的前向计算的时段内,加载下一层的参数,然后执行下一层的前向计算,直至完成整个模型的前向计算。
[0273]
通过将获取参数和前向计算重叠起来,能够减少不能被计算过程隐藏的通信时间,以提高训练的效率,提高集群的训练性能。
[0274]
s1030,至少一个第一加速器分别利用前向计算的结果进行反向计算,得到神经网络模型的第一参数梯度。
[0275]
s1040,至少一个第一加速器分别基于神经网络模型的第一参数梯度更新神经网络模型的参数。
[0276]
步骤s1010至步骤s1040可以视为一次迭代过程,至少一个第一加速器可以重复上述迭代过程,直至得到训练好的神经网络模型。
[0277]
需要说明的是,对于神经网络模型中没有被切分的层,或者说,第一加速器中保存有完整的模型参数的层,可以采用现有方式训练,此处不再赘述。
[0278]
根据本技术实施例的方案,神经网络模型的参数的不同部分可以存储于多个加速器中,第一加速器可以从其他设备中获取所需的参数,并完成神经网络模型的前向计算。这
样可以在不影响第一加速器对神经网络模型训练的同时,降低第一加速器的存储压力。
[0279]
此外,该至少一个第一加速器能够实现数据并行的模型训练,提高模型的训练效率。
[0280]
在单个设备的计算能力和内存大小无法满足神经网络训练的情况下,可以采用分布式并行训练的方式训练神经网络模型。分布式并行训练包括数据并行训练方式和模型并行训练方式。其中,在数据并行的训练方式下,每个设备基于部分训练样本对完整的神经网络模型进行训练。每个设备需要保存完整的模型参数、模型参数梯度等信息,还需要保存部分训练样本在计算过程中产生的大量特征值信息。模型越大,模型参数和模型参数梯度等信息占用的内存越大。在该情况下,每个设备可以支持的训练样本的数量越小,也就是说,当模型占用内存较大时,每个设备只能基于少量的训练样本训练神经网络模型,导致训练集群的线性度变差,集群有效性能降低。当模型过大,尤其是在单个设备无法存储一个完整的模型参数时,可以采用模型并行方式进行训练。在模型并行的训练方式下,每个设备基于所有训练样本对神经网络模型中的一部分进行训练。这样会给训练集群引入高昂的通信成本,降低集群有效性能。
[0281]
本技术实施例进一步提出一种神经网络模型的训练方法,能够实现神经网络模型的高效训练。
[0282]
在步骤s1020中,执行完前向计算后可以释放从其他设备获取的参数,降低在训练过程中参数所占用的存储空间。
[0283]
进一步地,在执行反向计算时参考前向计算过程中获取参数的方式重新获取所需参数以执行反向计算。
[0284]
下面对反向计算过程,即步骤s1030,进行说明。
[0285]
可选地,在步骤s1030中,至少一个第一加速器在执行神经网络模型中的第j层的反向计算之前,从本地以及其他第一加速器获取第j层的不同参数以得到第j层的完整的模型参数,j为正整数。
[0286]
在执行神经网络模型每一层的反向计算时,需要该层的完整的模型参数。第j层的不同参数分别存储于多个加速器中,第j层的部分参数存储于第一加速器中,其他部分分别存储于其他加速器中,第一加速器在执行第j层的反向计算之前需要从本地和其他加速器中获取第j层的完整的模型参数。
[0287]
例如,如图9所示,在进行l32层的反向计算时,需要32层完整的参数。l32层的参数包括存储于4个加速器上的4部分,即第一部分第二部分第三部分和第四部分如图9所示,在进行l32层的反向计算之前,需要分别从4个加速器中获取该4部分,以得到l32层完整的参数。如图12所示,d1(第一加速器的一例)的hbm中存储有l32层的参数的一部分,其余3个部分分别存储于d2至d4的hbm中。d1从hmb1中获取l32层的参数的一个部分,从hbm2、hbm3和hbm4分别获取其余3个部分,得到l32层的完整的参数。
[0288]
该神经网络模型的反向计算过程中所有需要从其他加速器获取参数的层均可以理解为第j层。第一加速器在执行任一层的前向计算之前,若本地没有存储该层的完整的模型参数,可以从本地和其他加速器中获取该层的不同参数,以获取该层的完整的模型参数。
[0289]
需要说明的是,第i层和第j层可以是相同的层,也可以是不同的层。若在前向计算
完成后,第一加速器释放了所有从其他加速器获取的参数,则第i层和第j层可以为相同的层。若在前向计算完成后,第一加速器仅释放了部分从其他加速器获取的参数,则第i层和第j层可以为不同的层。例如,第i层可以包括l1层和l5层,在前向计算完整后,释放了l1层和l5层的参数,则反向计算过程中,第j层可以包括l1层和l5层,在该情况下,第i层和第j层相同。再如,第i层可以包括l1层和l5层,在前向计算完整后,释放了l1层的参数,则反向计算过程中,第j层可以包括l1层,在该情况下,第i层和第j层不同。第一加速器每次获取参数的粒度可以是人为设定的,具体地,可以根据硬件能力和软件需求设定。例如,根据第一加速器的存储空间设定。
[0290]
例如,神经网络模型包括32层,第一设备按照从第32层到第1层的顺序执行反向计算。若该神经网络模型中每一层均进行了层内切分,并存储至多个加速器中,则第一加速器在执行每一层的反向计算之前均需要从本地和其他加速器中获取该层的完整的参数。若每次获取的参数粒度为一层的参数,则第一加速器按照从第32层到第1层的顺序每次获取一层的参数。若每次获取的参数粒度为两层的参数,则第一加速器按照从第32到第1层的顺序每次获取两层的参数,比如,从本地和其他加速器中同时获取第32层和第31层的不同参数以获取第32层和第31层的完整的模型参数。需要说明的是,以上仅为示例,在反向计算的过程中,第一加速器每次获取参数的粒度可以是相同的,也可以是不同的。例如,可以根据当前第一加速器的存储空间确定下一次获取的参数粒度,只要获取的参数中至少包括一层的参数即可。至少一个第一加速器中每个第一加速器获取参数的粒度可以相同,也可以不同。进一步地,对于属于同一个共享内存组的n个设备,该n个设备可以获取相同的参数。
[0291]
例如,图12中d1至d4属于同一个共享参数组,d1至d4均用于对该神经网络模型进行训练,也就是说至少一个加速器包括d1至d4。第j层的参数包括4部分,4个加速器上分别存储该4部分。d1从自身获取第一部分参数,从其他三个加速器中获取其余三个部分,得到第j层的完整的模型参数。d2从自身获取第二部分参数,从其他三个加速器中获取其余三个部分,得到第j层的完整的模型参数。d3从自身获取第三部分参数,从其他三个加速器中获取其余三个部分,得到该第j层的完整的模型参数。d4从自身获取第四部分参数,从其他三个加速器中获取其余三个部分,得到第j层的完整的模型参数。例如,参数存储于hbm中,获取参数可以为将参数从hbm中加载参数至ai core的cache中。也就是说,该4个加速器需要从4个hbm上获取参数。
[0292]
在前向计算后释放了从其他加速器获取的参数的情况下,在神经网络模型的反向计算过程中,n个加速器需要在各加速器间加载模型参数,其他数据可以在本地保存。
[0293]
可选地,至少一个第一加速器在执行神经网络模型中的第j层的反向计算之后,释放从其他加速器获取的第j层的参数。
[0294]
具体地,第一加速器执行第j层的反向计算,可以得到第j层对应的参数梯度,第一加速器保存第j层的部分或全部参数梯度,并释放从其他加速器获取的第j层的参数。其中,第j层的部分参数梯度指的是第j层的部分参数对应的参数梯度,第j层的全部参数梯度指的是第j层的完整的模型参数对应的参数梯度。
[0295]
也就是说,第一加速器可以在执行任一层的反向计算之后,保存该层的部分或全部参数梯度,若该层的参数中包括从其他加速器获取的参数,则释放从其他加速器获取的该层的参数。
[0296]
第一加速器可以在第j层的反向计算完成后保存第j层的部分或全部参数梯度,并释放从其他加速器获取的第j层的参数,然后执行第j-1层的反向计算;或者,第一加速器也可以在第j层之前的任一层的反向计算完成后保存相应层的部分或全部参数梯度,并释放从其他加速器获取的第j层的参数。第j层之前的任一层指的是层数小于j的任一层,例如,第j-1层、j-2层等。
[0297]
例如,第一加速器可以将参数梯度可以保存至hbm中,并释放cache。
[0298]
例如,第一加速器分别从本地和其他加速器获取l32和l31层的不同参数,以得到l32和l31层的完整的模型参数,第一加速器执行l32层的反向计算,输出l32层的参数梯度(第一参数梯度的一例),l32层的参数梯度输入l31层中,第一加速器执行l31层的反向计算,输出l31层的参数梯度(第一参数梯度的一例),第一加速器保存l32层和l32层的全部或部分参数梯度,并释放l32层的参数和l31层的参数。或者,第一加速器执行l32层的前向计算,输出l32层的参数梯度(第一参数梯度的一例),第一加速器保存l32层的部分或全部参数梯度,并释放l32层的参数,l32层的参数梯度输入l31层中,第一加速器执行l31层的反向计算,输出l31层的参数梯度(第一参数梯度的一例),第一加速器保存l31层的部分或全部参数梯度,并释放l31层的参数。
[0299]
根据本技术实施例的方案,在完成反向计算后,释放从其他加速器获取的参数,可以进一步降低训练过程中模型参数所占用的空间,能够使得整个训练过程中的参数占用的存储空间较小,这样,每个加速器可以支持更多的训练样本,提高训练集群的线性度,有利于实现神经网络模型的高效训练。
[0300]
如前所述,第一加速器可以保存第j层的全部参数梯度,也可以保存第j层的部分参数梯度。
[0301]
第j层的部分参数梯度可以为第一加速器中保存的第j层的部分参数对应的参数梯度。
[0302]
该至少一个加速器分别基于不同的前向计算的结果进行反向计算,得到第一参数梯度。第一参数梯度可以包括由该至少一个加速器分别计算得到的神经网络模型的参数梯度。
[0303]
下面结合图9中所示的神经网络模型作为示例对反向计算过程进行说明,不对本技术实施例的方案构成限定。
[0304]
如图12所示,在进行l32层的反向计算之前,各个加速器分别获取至少一层参数,该至少一层参数包括l32层参数。也就是说各个加速器进行l32层的反向计算前可以加载l32层参数,即以一层为单位加载参数,也可以加载包括l32层在内的多层参数,即以多层为单位加载参数。
[0305]
下面结合图12以加速器以一层为单位加载参数对反向计算过程进行说明。
[0306]
步骤1:该4个加速器加载l32层参数。
[0307]
示例性地,4个加速器可以采用all-gather的方式加载l32层参数。例如,4个加速器分别从hbm1加载l32层参数的第一部分从hbm2加载l32层参数的第二部分从hbm3加载l32层参数的第三部分和从hbm4加载l32层参数的第四部分以得到l32层的参数。具体地,4个加速器将参数加载至各自的ai core的cache中。这样,4个加速器的
ai core的cache中均保存有l32层完整的参数。
[0308]
步骤2:4个加速器分别进行l32层的反向计算,得到l32层的参数梯度(第一参数梯度的一例),将l32层的部分或全部参数梯度保存至本地的hbm中。
[0309]
进一步地,当l32层的反向计算完成后,可以释放ai core的cache。
[0310]
步骤3:4个加速器依次执行l31至l1层的反向计算。
[0311]
按照l32层的反向计算过程依次执行l31层至l1层的反向计算,直至各层的反向计算完成。
[0312]
下面结合图12以加速器以多层为单位加载参数对反向计算过程进行说明。
[0313]
步骤1:4个加速器加载l32层参数和l31层参数。也就是以2层为单位加载参数。
[0314]
示例性地,4个加速器可以采用all-gather的方式加载l32层参数和l31层参数。例如,4个加速器分别从hbm1加载l32层参数的第一部分和l31层参数的第一部分从hbm2加载l32层参数的第二部分和l31层参数的第二部分从hbm3加载l32层参数的第三部分和l31层参数的第三部分从hbm4加载l32层参数的第四部分和l31层参数的第四部分具体地,4个加速器将参数加载至各自的ai core的cache中。这样,各个加速器的ai core的cache中均保存有l32层完整的参数和l31层完整的参数。
[0315]
步骤2:4个加速器分别依次进行l32层和l31层的反向计算,得到l32层的参数梯度和l31层的参数梯度(第一参数梯度的一例),将l32层的参数梯度和l31层的参数梯度中的部分或全部保存至本地的hbm中。
[0316]
进一步地,当l31层的反向计算完成后,可以释放ai core的cache。
[0317]
步骤3:依次执行l30至l1层的反向计算。
[0318]
按照l32和l31层的反向计算过程依次执行l30至l1层的反向计算,直至各层的反向计算完成。
[0319]
应理解,在整个反向计算过程中需要多次加载参数,以上仅以每次以相同粒度加载参数为例进行说明。在具体实施过程中,每次加载参数的粒度可以不同,例如,第一次以1层为单位加载参数,第二次以2层为单位加载参数,本技术实施例对每次加载的参数粒度不做限定。在具体实施过程中,也可以根据硬件能力和软件需求自行选择加载参数的粒度。
[0320]
可选地,获取参数和反向计算可以是串行执行的,也可以是以重叠(overlap)方式执行的。
[0321]
串行执行指的是,在进行一层或多层的反向计算完成后,获取该层或多层之前的层的参数。
[0322]
本技术实施例中,某一层之前的层指的是层数比该层小的层。
[0323]
例如,如图11的(a)所示,各个加速器每次加载一层参数,然后执行该层的反向计算。该层的反向计算完成后,加载下一层的参数,然后执行下一层的反向计算,直至完成整个模型的反向计算。
[0324]
以overlap方式执行指的是,在进行一层或多层的反向计算的时段内,获取该一层或多层之后的层的参数。
[0325]
或者可以理解为,至少一个第一加速器在执行神经网络模型中的第j层之后的任一层或多层的反向计算的时段内,从本地以及其他加速器获取第j层的不同参数以得到第j
层的完整的模型参数。
[0326]
需要说明的是,在当前层的反向计算的时段内获取其他层的参数,可以理解为在当前层的反向计算的时段内执行获取其他层的参数的操作,并不限定获取其他层的参数的时间完全处于当前层的反向计算的时段内。
[0327]
例如,如图11的(b)所示,各个加速器每次加载一层参数,然后执行该层的反向计算。在执行该层的反向计算的时段内,加载下一层的参数,然后执行下一层的反向计算,直至完成整个模型的反向计算。比如,在执行l32层的反向计算的时段内,开始加载l31层的参数。
[0328]
通过将获取参数和反向计算重叠起来,能够减少不能被计算过程隐藏的通信时间,以提高训练的效率,提高集群的训练性能。
[0329]
根据本技术实施例的方案,在执行完前向计算后可以释放从其他设备获取的参数,执行反向计算的过程中重新获取所需参数,降低训练过程中参数所占用的存储空间。
[0330]
此外,在执行完反向计算后可以释放从其他设备获取的参数,进一步降低训练过程中参数所占用的存储空间,以减小整个训练过程中参数所占用的存储空间。
[0331]
下面对参数更新过程,即步骤s1040,进行说明。
[0332]
可选地,至少一个第一加速器分别基于神经网络模型的第一参数梯度更新本地存储的模型参数。
[0333]
第一参数梯度可以理解为第一加速器自身反向计算得到的参数梯度。也就是说第一加速器可以基于自身反向计算得到的参数梯度更新本地存储的模型参数。
[0334]
进一步地,至少一个第一加速器分别接收其他加速器发送的神经网络模型的第二参数梯度,并分别基于第一参数梯度和第二参数梯度更新神经网络模型的参数。
[0335]
例如,基于第一参数梯度和第二参数梯度的和更新神经网络模型的参数。
[0336]
第一加速器接收其他加速器发送的第二参数梯度,“其他加速器”可以属于该至少一个第一加速器,也可以不属于该至少一个第一加速器。
[0337]
在本技术实施例中,对于每个第一加速器而言,自身计算得到的参数梯度称为第一参数梯度,其他加速器计算得到的参数梯度称为第二参数梯度。
[0338]
示例性地,“其他加速器”可以属于该至少一个第一加速器,也就是说,至少一个第一加速器包括两个或两个以上第一加速器。对至少一个第一加速器反向计算得到的参数梯度进行处理,根据处理的结果更新本地存储的模型参数。
[0339]
例如,处理方式可以为求和处理等。对至少一个第一加速器反向计算得到的参数梯度进行求和处理,该至少一个第一加速器分别根据求和处理的结果更新本地存储的模型参数。即该至少一个第一加速器中的每个第一加速器均根据相同的结果更新本地存储的模型参数。
[0340]
进一步地,至少一个第一加速器分别将第一参数梯度发送至其他加速器。
[0341]
其他加速器可以基于第一参数梯度分别更新本地存储的模型参数。
[0342]
第一加速器将第一参数梯度发送至其他加速器可以包括:第一加速器将第一参数梯度的全部发送至其他加速器;或者,第一加速器将第一参数梯度中的部分发送至其他加速器。
[0343]
示例性地,一个共享内存组包括n个加速器,第一加速器可以基于第一参数梯度中
本地存储的参数对应的参数梯度更新本地存储的模型参数,并将第一参数梯度发送至其余n-1个加速器,以使其余n-1个加速器分别更新本地存储的模型参数;或者第一加速器也可以将第一参数梯度中除本地存储的参数对应的参数梯度之外的参数梯度分别发送至其余n-1个加速器中,以使其余n-1个加速器分别更新本地存储的模型参数。
[0344]
上述参数梯度的传输过程可以理解为多个加速器之间的参数梯度的同步过程,参数梯度同步后,多个加速器中的模型参数均是基于相同的参数梯度更新得到的。
[0345]
如前所述,第一加速器可以保存第j层的部分参数梯度或全部参数梯度。在第一加速器和其他加速器进行第j层的参数梯度的同步之后,或者说,在第一加速器将第j层的参数梯度发送至其他加速器之后,可以仅保存第j层中本地存储的模型参数对应的参数梯度,释放或者说丢弃第j层的其余参数梯度。
[0346]
参数梯度同步可以通过集合通信的方式实现。示例性地,至少一个第一加速器包括两个或两个以上第一加速器,该至少一个加速器中的所有加速器进行参数梯度的同步。该至少一个加速器上的参数梯度之间执行all-reduce操作,即对该至少一个加速器反向计算得到的参数梯度进行求和处理,得到累加的参数梯度,每个加速器上保存累加的参数梯度。该至少一个加速器分别基于累加的参数梯度对本地存储的神经网络模型的参数进行更新。或者,该至少一个加速器的参数梯度之间执行reduce-scatter操作,即对该至少一个加速器反向计算得到的参数梯度进行求和处理,得到累加的参数梯度,每个加速器上保存累加的参数梯度中的本地存储的参数对应的参数梯度。该至少一个加速器基于本地存储的参数对应的参数梯度对本地存储的神经网络模型的参数进行更新。
[0347]
进一步地,用于训练神经网络模型的系统中可以包括m个服务器,m个服务器中的每个服务器上包括至少一个加速器。m为大于或等于1的整数。
[0348]
可选地,该至少一个第一加速器位于第一服务器中。
[0349]
也就是说,该至少一个第一加速器位于同一个服务器中。
[0350]
可选地,至少一个第一加速器包括两个或两个以上第一加速器,至少一个第一加速器分别接收由其他加速器发送的神经网络模型的第二参数梯度,包括:至少一个第一加速器同时分别接收由其他服务器中的加速器发送的神经网络模型的第二参数梯度。
[0351]
也就是说,当服务器中包括多个网卡时,多个第一加速器可以同时与其他服务器进行参数梯度的传输。
[0352]
示例性地,在m大于1的情况下,同一个服务器的多个第一加速器在进行参数梯度的同步之后,可以在不同服务器的设备之间进行参数梯度的同步。
[0353]
下面以每个服务器包括n个加速器为例进行说明。每个服务器包括n个加速器指的是每个服务器中当前用于同一个神经网络模型训练的加速器的数量为n。
[0354]
该m个服务器中包括n*m个加速器,若一个加速器可以训练m个训练样本,则n*m个加速器可以并行训练n*m*m个训练样本。
[0355]
在m大于1的情况下,同一个服务器中的n个加速器在进行参数梯度的同步之后,可以在服务器的加速器之间进行参数梯度的同步。
[0356]
示例性地,在每个服务器包括n个网卡的情况下,在同一服务器的n个加速器的参数梯度之间执行all-reduce操作之后,m个服务器的加速器的参数梯度之间可以执行all-reduce操作,m个服务器中的所有加速器可以基于同步后的参数梯度对本地存储的神经网
络模型的参数进行更新。
[0357]
进一步地,该m个服务器中的n个加速器可以是一一对应的。或者说,该m个服务器中的n个加速器上存储的参数分区可以是相同的。在该情况下,每个服务器上的n个加速器属于同一个共享内存组。
[0358]
示例性地,在每个服务器包括n个网卡的情况下,同一服务器的n个加速器的参数梯度之间执行reduce-scatter操作,得到本地存储的神经网络模型的参数对应的参数梯度;m个服务器对应的加速器的参数梯度之间可以执行all-reduce操作。也就是说,m个服务器中的每个服务器内的n个加速器分别与其余m-1个服务器中对应的加速器执行本地存储的神经网络模型的参数对应的参数梯度的all-reduce操作,得到目标参数梯度。例如,m个服务器中的每个服务器上的每个加速器对本地保存的参数梯度和其余m-1个服务器中对应的加速器保存的参数梯度进行求和处理,并保存求和处理后的参数梯度,这样,每个加速器上可以保存本地存储的参数对应的参数梯度。m个服务器中的所有加速器可以基于本地保存的参数梯度对本地存储的神经网络模型的参数进行更新。其中,其余m-1个服务器中对应的加速器指的是其余m-1个服务器中与当前服务器中的加速器保存的参数相同的加速器。
[0359]
例如,系统中包括服务器1和服务器2,服务器1中的加速器11保存神经网络模型的第一部分参数,服务器2中的加速器21保存神经网络模型的第一部分参数,则服务器1中的加速器11与服务器2中的加速器21之间存在对应关系,即加速器11即为服务器2中的加速器21在服务器1中对应的加速器,加速器21即为服务器1中的加速器11在服务器2中对应的加速器。加速器11与服务器1内部的加速器的参数梯度之间执行reduce-scatter操作,加速器12与服务器2内部的加速器的参数梯度之间执行reduce-scatter操作,加速器11与加速器21的参数梯度之间执行all-reduce操作,服务器1和服务器2中的其余n-1个加速器执行相同的操作。服务器1和服务器2的加速器基于本地保存的参数梯度更新本地存储的模型参数。
[0360]
如图13的(a)所示,每个服务器为多网卡服务器,每个服务器中包括4个加速器以及4个网卡nic1、nic2、nic3和nic4。其中,a0-a3分别表示d1反向计算得到的参数梯度中4个参数分区的参数对应的参数梯度,b0-b3分别表示d2反向计算得到的参数梯度中4个参数分区的参数对应的参数梯度,c0-c3分别表示d3反向计算得到的参数梯度中4个参数分区的参数对应的参数梯度。d0-d3分别表示d4反向计算得到的参数梯度中4个参数分区的参数对应的参数梯度。执行reduce-scatter操作后,d1上存储的参数梯度为d1上存储的参数对应的参数梯度a0+b0+c0+d0,其他加速器存储的参数梯度如图13所示。d1-d4分别通过nic1-nic4执行参数梯度间的all-reduce操作。
[0361]
示例性地,在每个服务器仅包括单网卡的情况下,同一个服务器的n个加速器加速器的参数梯度之间可以先执行reduce操作,然后将reduce操作后得到的参数梯度在服务器间通过一个网卡执行all-reduce操作。
[0362]
如图13的(b)所示,每个服务器为单网卡服务器,每个服务器中包括4个加速器以及1个网卡nic1。执行reduce操作后,d1上存储的参数梯度为神经网络模型的全部参数对应的参数梯度a0+b0+c0+d0、a1+b1+c1+d1、a2+b2+c2+d2和a3+b3+c3+d3。d1通过nic1与其他服务器的加速器执行参数梯度间的all-reduce操作。
[0363]
这样,当服务器中包含多张网卡时,在服务器内执行reduce-scatter操作后,可以
同时利用多张网卡执行参数梯度的all-reduce操作,提高了服务器间的all-reduce的性能,节约通信时间,提高通信效率,从而提高集群训练性能。
[0364]
基于全部参与训练的加速器反向计算得到的参数梯度进行同步指的是利用所有参与训练的加速器上的训练样本得到的参数梯度进行同步,基于部分加速器反向计算得到参数梯度进行同步指的是利用所有参与训练的加速器中的部分加速器上的训练样本得到的参数梯度进行同步。因此,相较于基于部分加速器上的参数梯度进行模型参数的更新,基于全部加速器上的参数梯度进行参数更新能够利用更多的训练样本,利用累加的参数梯度更新神经网络模型的参数,得到能够更好地逼近参数的最优值,提高训练模型的准确性。
[0365]
参数梯度同步可以在反向计算过程中执行,也可以在整个神经网络模型的反向计算完成后执行。
[0366]
上述参数同步过程中的参数梯度可以为神经网络模型部分层的参数梯度或全部层的参数梯度。
[0367]
下面通过两个示例(示例1和示例2)对参数更新过程和反向计算过程进行说明。
[0368]
示例1:
[0369]
各个加速器完成所有层的反向计算后,得到神经网络模型的所有参数梯度;基于各个加速器得到的所有参数梯度进行同步。
[0370]
也就是说,在一次迭代过程中,每个加速器上保存由该加速器计算得到的神经网络模型的所有参数梯度。
[0371]
例如,如图14所示,d1上保存由d1计算得到的l1-l32层的所有参数对应的参数梯度或者,也可以理解为d1上保存基于本地保存的训练样本得到的l1-l32层的所有参数对应的参数梯度。
[0372]
d2上保存由d2计算得到的l1-l32层的所有参数对应的参数梯度或者,也可以理解为d2上保存基于本地保存的得到的l1-l32层的所有参数对应的参数梯度。
[0373]
d3和d4同上,不再赘述,d3上保存d4上保存
[0374]
其中,分别表示由d1计算得到的l1-l32层的所有参数中第一部分a对应的参数梯度、第二部分b对应的参数梯度、第三部分区c对应的参数梯度以及第四部分d对应的参数梯度。其他参数梯度以此类推,此处不再赘述。
[0375]
示例性地,对d1计算得到的l1-l32层的所有参数对应的参数梯度d2计算得到的l1-l32层的所有参数对应的参数梯度d3计算得到的l1-l32层的所有参数对应的参数梯度和d4上的l1-l32层的所有参数对应的参数梯度执行reduce-scatter操作。
[0376]
例如,将4个加速器上的所有参数梯度求和后,将累加的参数梯度分配至各个加速器上。具体地,d1得到reduce-scatter操作的结果为累加的参数梯度中l1-l32层的第一部
分参数对应的参数梯度d2得到reduce-scatter操作结果为累加的参数梯度中l1-l32层的第二部分参数对应的参数梯度d3得到reduce-scatter操作结果为累加的参数梯度中l1-l32层的第三部分参数对应的参数梯度d4得到reduce-scatter操作结果为累加的参数梯度中l1-l32层的第四部分参数对应的参数梯度4个加速器可以基于上述参数梯度分别更新本地负责的参数,即本地存储的参数。
[0377]
进一步地,所有服务器的各个加速器完成所有层的反向计算后,得到神经网络模型的所有参数梯度;基于所有服务器的各个加速器得到的所有参数梯度进行同步。
[0378]
例如,用于训练神经网络模型的加速器为n*m个,位于m个服务器中,每个服务器中包括n个加速器。参数分区在各个服务器的n个设备中是相同的。
[0379]
在一种实现方式中,在一个服务器中参照前述reduce-scatter操作得到4个加速器上对应的参数梯度之后,各个服务器的对应加速器之间执行all-reduce操作。
[0380]
具体地,如图14所示,各server的d1之间同步第一部分a对应的参数梯度δwa,即实现对的all-reduce操作,例如,并保存结果到本地;各server的d2之间同步第二部分b对应的参数梯度δwb,即实现对的all-reduce操作,例如,并保存结果到本地;各server的d3之间同步第三部分c对应的参数梯度δw,即实现对的all-reduce操作,例如,并保存结果到本地;各server的d4之间同步第四部分d对应的参数梯度δwd,即实现对的all-reduce操作,例如,并保存结果到本地。每个服务器上的4个加速器可以基于上述参数梯度分别更新本地负责的参数,即本地存储的参数。
[0381]
其中,表示服务器m1中的d1在执行完reduce-scatter之后得到的l1-l32层的参数中的第一部分a对应的参数梯度,表示服务器m2中的d1在执行完reduce-scatter之后得到的l1-l32层的参数中的第一部分a对应的参数梯度。其余参数以此类推,此处不再赘述。
[0382]
这样,在服务器为多网卡服务器的情况下,可以同时利用多个网卡进行参数梯度同步,节约时间成本,提高通信效率,进而提高模型训练效率。例如,利用多个网卡执行all-reduce操作,提高通信效率,进而提高集群训练的性能。
[0383]
在一种实现方式中,在一个服务器中各个加速器之间执行参数梯度的reduce操作,保存结果至其中一个加速器上。各个服务器的对应加速器之间执行all-reduce操作。
[0384]
示例2:
[0385]
在加速器的内存较小时,可能无法保存整个神经网络模型的所有梯度参数。在该情况下,每个加速器可以仅保存自身负责的参数对应的参数梯度。
[0386]
可选地,各个加速器完成一层或多层的反向计算后,得到该一层或多层对应的参
数梯度;基于各个加速器得到的该一层或多层对应的参数梯度进行同步,并保存本地存储的参数对应的参数梯度;各个加速器基于该参数梯度更新本地存储的参数;重复上述过程直至更新完所有层的参数。
[0387]
在一次迭代过程中,每个加速器上可以仅保存由该加速器得到的一层或多层的参数梯度。
[0388]
例如,如图15所示,在4个加速器完成l32层的反向计算后,d1计算得到l32层的参数梯度或者,也可以理解为d1基于第一训练样本得到l32层的参数梯度。d2计算得到l32层的参数梯度或者,也可以理解为d2基于第二训练样本得到的l32层的参数梯度。d3和d4以此类推,此处不再赘述,d3上保存d4上保存
[0389][0390]
其中,分别表示由d1计算得到的l32层的所有参数中第一部分a对应的参数梯度、第二部分b对应的参数梯度、第三部分区c对应的参数梯度以及第四部分d对应的参数梯度。其他参数梯度以此类推,此处不再赘述。
[0391]
示例性地,对d1计算得到的l32层的参数梯度d2计算得到的l32层的参数梯度d3计算得到的l32层的参数梯度和d4上的l32层的参数梯度执行reduce-scatter操作。
[0392]
例如,将4个加速器上的l32层的参数梯度求和后,将累加的参数梯度分配至各个加速器上。具体地,d1得到reduce-scatter操作的结果为l32层的第一部分参数对应的参数梯度d2得到reduce-scatter操作结果为l32层的第二部分参数对应的参数梯度d3得到reduce-scatter操作结果为l32层的第三部分参数对应的参数梯度d4得到reduce-scatter操作结果为l32层的第四部分参数对应的参数梯度4个加速器可以基于上述参数梯度分别更新l32层中本地负责的参数,即本地存储的参数。
[0393]
重复上述过程,直至完成32层的参数更新。
[0394]
进一步地,所有服务器的各个加速器完成一层或多层的反向计算后,得到神经网络模型的该一层或多层的参数梯度;基于所有服务器的各个加速器得到的该一层或多层的参数梯度进行同步。
[0395]
例如,用于训练神经网络模型的加速器为n*m个,位于m个服务器中,每个服务器中包括n个加速器。参数分区在各个服务器的n个设备中是相同的。
[0396]
在一种实现方式中,在完成一层或多层的反向计算后,在一个服务器中参照前述reduce-scatter操作得到4个加速器上对应的参数梯度之后,各个服务器的对应加速器之间执行all-reduce操作。
[0397]
具体地,如图15所示,各server的d1之间同步第一部分a对应的参数梯度δwa,即
实现对的all-reduce操作,例如,并保存结果到本地;各server的d2之间同步第二部分b对应的参数梯度δwb,即实现对的all-reduce操作,例如,并保存结果到本地;各server的d3之间同步第三部分c对应的参数梯度δwc,即实现对的all-reduce操作,例如,并保存结果到本地;各server的d4之间同步第四部分d对应的参数梯度δwd,即实现对的all-reduce操作,例如,并保存结果到本地。每个服务器上的4个加速器可以基于上述参数梯度分别更新本地负责的参数,即本地存储的参数。重复上述过程,直至完成32层的参数更新。
[0398]
其中,表示服务器m1中的d1在执行完reduce-scatter之后得到的l32层的参数中第一部分a对应的参数梯度,表示服务器m2中的d1在执行完reduce-scatter之后得到的l32层的参数中第一部分a对应的参数梯度。其余参数以此类推,此处不再赘述。
[0399]
这样,在服务器为多网卡服务器的情况下,可以同时利用多个网卡进行参数梯度同步,节约时间成本,提高通信效率,进而提高模型训练效率。例如,利用多个网卡执行all-reduce操作,提高通信效率,进而提高集群训练的性能。
[0400]
在一种实现方式中,在完成一层或多层的反向计算后,在一个服务器中各个加速器之间执行参数梯度的reduce操作,保存结果至其中一个加速器上。各个服务器的对应加速器之间执行all-reduce操作。
[0401]
可选地,参数梯度同步和反向计算可以是串行执行的,也可以是以overlap方式执行的。
[0402]
参数梯度同步可以包括第一加速器接收其他加速器发送的第二参数梯度或第一加速器向其他加速器发送第一参数梯度。
[0403]
串行执行指的是,在一层或多层的参数梯度同步完成后,进行该层或多层之前的层的反向计算。
[0404]
例如,各个加速器对第32层进行反向计算,该层的反向计算完成后,在加速器间进行参数梯度同步,在第32层的参数梯度同步完成后,执行第31层的反向计算,直至完成整个模型的参数更新。
[0405]
再如,各个加速器对第32层和第31层进行反向计算,在第31层反向计算完成后,在加速器间进行参数梯度同步,在第32层和第31层的参数梯度同步完成后,执行第30层的反向计算,直至完成整个模型的参数更新。
[0406]
以overlap方式执行指的是,在一层或多层的参数梯度同步的时段内,进行该层或多层之前的层的反向计算。也就是在该一层或多层的参数同步完成前,进行该一层或多层之前的层的反向计算。
[0407]
或者可以理解为至少一个第一加速器在执行神经网络模型中的第k层之前的任一
层或多层的反向计算的时段内,向其他加速器发送第一参数梯度中第k层的参数梯度或者接收其他加速器发送的第二参数梯度中的第k层的参数梯度。k为正整数。
[0408]
需要说明的是,在当前层的反向计算的时段内同步其他层的参数梯度,可以理解为在当前层的反向计算的时段内执行同步其他层的参数梯度的操作,并不限定同步其他层的参数梯度的时间完全处于当前层的反向计算的时段内。
[0409]
例如,各个加速器对第32层进行反向计算,该层的反向计算完成后,在加速器间进行参数梯度同步,在第32层的参数梯度同步完成前,执行第31层的反向计算,直至完成整个模型的参数更新。
[0410]
再如,各个加速器对第32层和第31层进行反向计算,在第31层反向计算完成后,在加速器间进行参数梯度同步,在第32层和第31层的参数梯度同步完成之前,执行第30层的反向计算,直至完成整个模型的参数更新。
[0411]
通过将参数梯度同步和反向计算重叠起来,能够减少不能被计算过程隐藏的通信时间,以提高训练的效率,提高集群的训练性能。
[0412]
如前所述,可以通过多个服务器共同训练神经网络模型,下面分别说明在单网卡场景和多网卡场景中的参数梯度同步的实现方式。
[0413]
多网卡场景指的是服务器中包括多个网卡,该服务器可以称为多网卡服务器。
[0414]
单网卡场景指的是服务器中包括一张网卡,或者在同一时刻仅有一个网卡可以工作,该服务器可以称为单网卡服务器。
[0415]
在示例1中,每个加速器上可以保存完整的参数梯度。
[0416]
在多网卡场景中可以同时利用多张网卡实现服务器间的参数梯度同步。
[0417]
示例性地,服务器中的每个加速器均对应一张网卡,例如,如图13的(a)所示,4个加速器对应4张网卡。当神经网络模型的反向计算完成后,在服务器内的加速器之间执行reduce-scatter操作,即将服务器内的多个加速器上产生的参数梯度进行求和处理,然后根据每个加速器负责的参数分区分为n份,并保存至对应的加速器上。这样,每个加速器上均保存有自身负责的参数对应的参数梯度和。通过每个加速器对应的网卡在服务间执行all-reduce操作。
[0418]
通过多个网卡同时进行参数梯度同步,能够提高同步效率。
[0419]
在单网卡场景中通过该网卡实现服务器间的参数梯度同步。
[0420]
示例性地,服务器中包括一张网卡。如图13的(b)所示,当神经网络模型的反向计算完成后,在服务器内的加速器之间执行reduce操作,即将服务器内的多个加速器上产生的参数梯度进行求和处理,然后根据将参数梯度和保存至一个加速器上。通过服务器上的网卡在服务间执行all-reduce操作。
[0421]
在示例2中,每个加速器上仅保存自身负责的参数对应的参数梯度。
[0422]
在多网卡场景中,可以同时利用多张网卡实现服务器间的参数梯度同步。
[0423]
示例性地,服务器中的每个加速器均对应一张网卡,例如,如图13的(a)所示,4个加速器对应4张网卡。当神经网络模型中的一层或多层的反向计算完成后,在服务器内的加速器之间执行reduce-scatter操作,即将服务器内的多个加速器上产生的参数梯度进行求和处理,然后根据每个加速器负责的参数分区分为n份,并保存至对应的加速器上。这样,每个加速器上均保存有自身负责的参数对应的参数梯度和。通过每个加速器对应的网卡在服
务间执行all-reduce操作。
[0424]
通过多个网卡同时进行参数梯度同步,能够提高同步效率。
[0425]
在单网卡场景中通过该网卡实现服务器间的参数梯度同步。
[0426]
示例性地,服务器中包括一张网卡。例如,如图13的(b)所示,当神经网络模型中的一层或多层的反向计算完成后,在服务器内的加速器之间执行reduce操作,即将服务器内的多个加速器上产生的参数梯度进行求和处理,然后根据将参数梯度和保存至一个加速器上。通过服务器上的网卡在服务间执行all-reduce操作。
[0427]
在本技术实施例中,第一加速器上仅存储神经网络模型的一部分,在执行前向计算之前从其他加速器中获取所需的参数,所需的内存远小于存储完整的神经网络模型所需的内存,减小了第一加速器的存储压力,避免由于第一加速器内存不足而导致无法训练该神经网络模型。
[0428]
同时,相对于层间切分的方式,本技术实施例采用层内切分的方式存储模型参数,第一加速器从多个加速器获取同一层的不同参数,以得到该层的完整参数,能够减少通信时间,提高处理效率。进一步地,能够避免分布式训练时多个加速器从同一加速器获取参数时造成的通信拥堵,提高处理效率。
[0429]
根据本技术实施例的方案,在执行完前向计算后可以释放从其他设备获取的参数,执行反向计算的过程中重新获取所需参数,降低训练过程中参数所占用的存储空间。
[0430]
此外,在执行完反向计算后可以释放从其他设备获取的参数,进一步降低训练过程中参数所占用的存储空间,以减小整个训练过程中参数所占用的存储空间。这样,第一加速器可以支持更多的训练样本同时进行训练,达到更好的训练性能。
[0431]
此外,在本技术实施例的方案中,模型状态在层内切分后分布式存储在多个加速器上,无需在每个加速器上保存完整的模型状态,大大节省了加速器的内存,进而使得加速器可以支持更大数量的训练样本训练,提高了训练后的模型的性能。
[0432]
此外,通过数据并行的方式取代低效的模型并行方式,同时解决了数据并行训练过程中模型参数冗余的问题,除特征占用的内存之外,将用于训练的加速器所需要的内存大大减小,大幅度减小了神经网络训练过程中的内存占用,提高了集训的训练效率。或者说,本技术实施例的方案能够利用更小内存容量的硬件达到更高配置硬件的训练性能。
[0433]
此外,采用层内切分模型的方式进行分布式存储,在服务器具备多张网卡的情况下,能够同时利用多张网卡实现服务器间的参数梯度的同步,提高通信效率,进而提高集群的训练性能。
[0434]
图16示出了本技术实施例提供的数据处理方法1300的示意性流程图,该方法可以由能够执行神经网络模型的运算的装置执行,该装置可以为是云服务设备,也可以是移动终端,例如,电脑、服务器等运算能力足以用来执行方法1300的装置。示例性地,图16所示的方法可以由图3中所示的计算设备110、图4中的神经网络处理器50、图5中的服务器400、图6中的执行设备310或图7中的服务器710、服务器720、服务器730执行。
[0435]
方法1300包括步骤1310至步骤1320。下面对步骤s1310至步骤s1320进行说明。
[0436]
s1310,获取待处理数据。
[0437]
示例性地,待处理数据可以为待处理图像或待处理文本等数据。本技术实施例对待处理数据的类型不做限定。
[0438]
其中,所述待处理图像可以是终端设备(或者电脑、服务器等其他装置或设备)通过摄像头拍摄到的图像,或者,该待处理图像还可以是从终端设备(或者电脑、服务器等其他装置或设备)内部获得的图像(例如,终端设备的相册中存储的图像,或者终端设备从云端获取的图像),本技术实施例对此并不限定。
[0439]
s1320,第二加速器对待处理数据执行目标神经网络模型的前向计算,得到待处理数据的处理结果,其中,第二加速器在执行目标神经网络模型中的第p层的前向计算之前,从本地以及其他加速器获取第p层的不同参数以得到第p层的完整的模型参数,p为正整数。
[0440]
待处理数据的处理结果与目标神经网络模型所要处理的任务有关。示例性地,待处理数据为待处理图像,目标神经网络模型为图像识别模型,待处理图像的处理结果为该待处理图像的识别结果,或者,目标神经网络模型为图像分类模型,待处理图像的处理结果为该待处理图像的分类结果;或者,目标神经网络模型为语音识别模型,待处理数据为待处理音频,待处理音频的处理结果为该待处理音频的识别结果。
[0441]
第p层的不同参数分别存储于多个加速器中,第p层的部分参数存储于第二加速器中,其他部分分别存储于其他加速器中,第二加速器在执行第p层的前向计算之前需要从本地和其他加速器中获取第p层的完整的模型参数。其中,其他加速器为与第二加速器属于同一个共享内存组的加速器。例如,第p层的不同参数分别存储于n个加速器中,该n个加速器属于一个共享内存组。该n个加速器中一个加速器(第二加速器的一例)在执行第p层的前向计算之前需要从本地和其余n-1个加速器中存储的第p层的不同参数,以得到第p层的完整的模型参数。
[0442]
该目标神经网络模型的前向计算过程中所有需要从其他加速器获取参数的层均可以理解为第p层。第二加速器在执行任一层的前向计算之前,若本地没有存储该层的完整的模型参数,可以从本地和其他加速器中获取该层的不同参数,以获取该层的完整的模型参数。
[0443]
第二加速器与第一加速器可以是相同的加速器,也可以是不同的加速器。
[0444]
在本技术实施例中,第二加速器上仅存储神经网络模型的一部分,在执行前向计算之前从其他加速器中获取所需的参数,所需的内存远小于存储完整的神经网络模型所需的内存,减小了第二加速器的存储压力。
[0445]
同时,相对于层间切分的方式,对神经网络模型中的参数进行层内切分后存储于多个加速器中,第二加速器从多个加速器获取同一层的不同参数,以得到该层的完整参数,能够减少通信时间,提高处理效率。
[0446]
可选地,第二加速器在执行目标神经网络模型中的第p层的前向计算之后,释放从其他加速器获取的第p层的参数。
[0447]
根据本技术实施例的方案,在执行完前向计算后可以释放从其他设备获取的参数,降低运算过程中参数所占用的存储空间。本技术实施例的方案能够利用更小内存容量的硬件达到更高配置硬件的运算性能。
[0448]
可选地,第二加速器在执行目标神经网络模型中的第p层之前的任一层或多层的前向计算的时段内,从本地以及其他加速器获取第p层的不同参数以得到第p层的完整的模型参数。
[0449]
需要说明的是,在当前层的前向计算的时段内获取其他层的参数,可以理解为在
当前层的前向计算的时段内执行获取其他层的参数的操作,并不限定获取其他层的参数的时间完全处于当前层的前向计算的时段内。
[0450]
通过将获取参数和前向计算重叠起来,能够减少不能被计算过程隐藏的通信时间,以提高推理的效率,节约时间成本。
[0451]
目标神经网络模型的前向计算的具体描述可以参考前述方法1000中的步骤s1020,此处不再赘述。
[0452]
进一步地,图16中的数据处理方法1300中使用的目标神经网络可以是通过上述图8中的方法构建的。方法1300中的具体实现方式可以参照前述方法1000,为了避免不必要的重复,下面在介绍方法1300时适当省略重复的描述。
[0453]
可选地,目标神经网络模型的参数是通过至少一个第一加速器分别基于神经网络模型的第一参数梯度更新神经网络模型的参数得到的,神经网络模型的第一参数梯度是通过至少一个第一加速器利用前向计算的结果进行反向计算得到,前向计算的结果是通过至少一个第一加速器分别对至少一个训练样本执行神经网络模型的前向计算得到的,神经网络模型中的第i层的完整的模型参数是从本地以及其他加速器获取第i层的不同参数得到的。
[0454]
可选地,至少一个第一加速器执行神经网络模型中的第j层的反向计算时,神经网络模型中的第j层的完整的模型参数是从本地以及其他加速器获取第j层的不同参数得到的。
[0455]
可选地,第j层的完整的模型参数是在至少一个第一加速器执行神经网络模型中的第j层之后的任一层或多层的反向计算的时段内获得的。
[0456]
可选地,至少一个第一加速器位于第一服务器中。
[0457]
可选地,目标神经网络模型的参数是通过至少一个第一加速器分别基于神经网络模型的第一参数梯度更新神经网络模型的参数得到的,包括:
[0458]
目标神经网络模型的参数是通过至少一个第一加速器分别基于神经网络模型的第一参数梯度和神经网络模型的第二参数梯度更新神经网络模型的参数得到的,其中,神经网络模型的第二参数梯度包括至少一个第一加速器接收的其他加速器发送的参数梯度。
[0459]
可选地,至少一个第一加速器包括两个或两个以上第一加速器,神经网络模型的第二参数梯度包括至少一个第一加速器同时接收的由其他服务器中的其他加速器发送的参数梯度。
[0460]
下面结合图17至图20对本技术实施例的装置进行说明。应理解,下面描述的装置能够执行前述本技术实施例的方法,为了避免不必要的重复,下面在介绍本技术实施例的装置时适当省略重复的描述。
[0461]
图17是本技术实施例的神经网络模型的训练装置的示意性框图。图17所示训练装置3000包括获取单元3010和处理单元3020。
[0462]
获取单元3010和处理单元3020可以用于执行本技术实施例的神经网络模型的训练方法,具体地,可以用于执行方法1000。
[0463]
获取单元3010用于获取至少一个训练样本。
[0464]
处理单元3020用于对至少一个训练样本执行神经网络模型的前向计算,得到前向计算的结果,其中,在执行神经网络模型中的第i层的前向计算之前,获取单元3010从本地
以及其他加速器获取第i层的不同参数以得到第i层的完整的模型参数,i为正整数;利用前向计算的结果进行反向计算,得到神经网络模型的第一参数梯度;基于神经网络模型的第一参数梯度更新神经网络模型的参数。
[0465]
可选地,作为一个实施例,处理单元3020还用于:在执行神经网络模型中的第i层的前向计算之后,释放从其他加速器获取的第i层的参数。
[0466]
可选地,作为一个实施例,获取单元3010具体用于:在执行神经网络模型中的第j层的反向计算之前,从本地以及其他第一加速器获取第j层的不同参数以得到第j层的完整的模型参数,j为正整数。
[0467]
可选地,作为一个实施例,处理单元3020还用于:在执行神经网络模型中的第j层的反向计算之后,释放从其他加速器获取的第j层的参数。
[0468]
可选地,作为一个实施例,获取单元3010具体用于:在执行神经网络模型中的第j层之后的任一层或多层的反向计算的时段内,从本地以及其他加速器获取第j层的不同参数以得到第j层的完整的模型参数。
[0469]
可选地,作为一个实施例,获取单元3010具体用于:在执行神经网络模型中的第i层之前的任一层或多层的前向计算的时段内,从本地以及其他加速器获取第i层的不同参数以得到第i层的完整的模型参数。
[0470]
可选地,作为一个实施例,装置还包括发送单元,用于将第一参数梯度发送至其他加速器。
[0471]
可选地,作为一个实施例,发送单元具体用于:在执行神经网络模型中的第k层之前的任一层或多层的反向计算的时段内,向其他加速器发送第一参数梯度中的第k层的参数梯度,k为正整数。
[0472]
可选地,作为一个实施例,获取单元3010还用于:接收由其他加速器发送的神经网络模型的第二参数梯度;以及处理单元3020具体用于:基于神经网络模型的第一参数梯度和神经网络模型的第二参数梯度更新神经网络模型的参数。
[0473]
可选地,作为一个实施例,处理单元3020具体用于:与位于同一服务器中的其他加速器同时分别接收由其他服务器中的加速器发送的神经网络模型的第二参数梯度。
[0474]
图18是本技术实施例提供的图像处理装置的示意性框图。图18所示的装置4000包括获取单元4010和处理单元4020。
[0475]
获取单元4010和处理单元4020可以用于执行本技术实施例的图像处理方法,例如,可以用于执行方法1300。
[0476]
获取单元4010用于获取待处理图像。
[0477]
处理单元4020用于对待处理图像执行目标神经网络模型的前向计算,得到待处理图像的处理结果,其中,在执行目标神经网络模型中的第p层的前向计算之前,获取单元4010从本地以及其他加速器获取第p层的不同参数以得到第p层的完整的模型参数,p为正整数。
[0478]
可选地,作为一个实施例,处理单元4020还用于:在执行目标神经网络模型中的第p层的前向计算之后,释放从其他加速器获取的第p层的参数。
[0479]
可选地,作为一个实施例,获取单元4010具体用于:在执行目标神经网络模型中的第p层之前的任一层或多层的前向计算的时段内,从本地以及其他加速器获取第p层的不同
参数以得到第p层的完整的模型参数。
[0480]
可选地,作为一个实施例,目标神经网络模型的参数是通过至少一个第一加速器分别基于神经网络模型的第一参数梯度更新神经网络模型的参数得到的,神经网络模型的第一参数梯度是通过至少一个第一加速器利用前向计算的结果进行反向计算得到,前向计算的结果是通过至少一个第一加速器分别对至少一个训练样本执行神经网络模型的前向计算得到的,神经网络模型中的第i层的完整的模型参数是从本地以及其他加速器获取第i层的不同参数得到的。
[0481]
可选地,作为一个实施例,至少一个第一加速器执行神经网络模型中的第j层的反向计算时,神经网络模型中的第j层的完整的模型参数是从本地以及其他加速器获取第j层的不同参数得到的。
[0482]
可选地,作为一个实施例,第j层的完整的模型参数是在至少一个第一加速器执行神经网络模型中的第j层之后的任一层或多层的反向计算的时段内获得的。
[0483]
可选地,作为一个实施例,至少一个第一加速器位于第一服务器中。
[0484]
可选地,作为一个实施例,目标神经网络模型的参数是通过至少一个第一加速器分别基于神经网络模型的第一参数梯度更新神经网络模型的参数得到的,包括:目标神经网络模型的参数是通过至少一个第一加速器分别基于神经网络模型的第一参数梯度和神经网络模型的第二参数梯度更新神经网络模型的参数得到的,其中,神经网络模型的第二参数梯度包括至少一个第一加速器接收的其他加速器发送的参数梯度。
[0485]
可选地,作为一个实施例,至少一个第一加速器包括两个或两个以上第一加速器,神经网络模型的第二参数梯度包括至少一个第一加速器同时接收的由其他服务器中的其他加速器发送的参数梯度。
[0486]
需要说明的是,上述训练装置3000以及装置4000以功能单元的形式体现。这里的术语“单元”可以通过软件和/或硬件形式实现,对此不作具体限定。
[0487]
例如,“单元”可以是实现上述功能的软件程序、硬件电路或二者结合。所述硬件电路可能包括应用特有集成电路(application specific integrated circuit,asic)、电子电路、用于执行一个或多个软件或固件程序的处理器(例如共享处理器、专有处理器或组处理器等)和存储器、合并逻辑电路和/或其它支持所描述的功能的合适组件。
[0488]
因此,在本技术的实施例中描述的各示例的单元,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
[0489]
图19是本技术实施例提供的神经网络模型的训练装置的硬件结构示意图。图19所示的训练装置5000(该装置5000具体可以是一种计算机设备)包括存储器5001、处理器5002、通信接口5003以及总线5004。其中,存储器5001、处理器5002、通信接口5003通过总线5004实现彼此之间的通信连接。
[0490]
存储器5001可以是只读存储器(read only memory,rom),静态存储设备,动态存储设备或者随机存取存储器(random access memory,ram)。存储器5001可以存储程序,当存储器5001中存储的程序被处理器5002执行时,处理器5002用于执行本技术实施例的神经网络模型的训练方法的各个步骤。具体地,处理器5002可以执行上文中图8所示的方法中的
步骤s1020至步骤s1040。
[0491]
处理器5002可以采用通用的中央处理器(central processing unit,cpu),微处理器,应用专用集成电路(application specific integrated circuit,asic),图形处理器(graphics processing unit,gpu)或者一个或多个集成电路,用于执行相关程序,以实现本技术方法实施例的神经网络模型的训练方法。
[0492]
处理器5002还可以是一种集成电路芯片,具有信号的处理能力,例如,可以是图4所示的芯片。在实现过程中,本技术的神经网络模型的训练方法的各个步骤可以通过处理器5002中的硬件的集成逻辑电路或者软件形式的指令完成。
[0493]
上述处理器5002还可以是通用处理器、数字信号处理器(digital signal processing,dsp)、专用集成电路(asic)、现成可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本技术实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器5001,处理器5002读取存储器5001中的信息,结合其硬件完成图17所示的训练装置中包括的单元所需执行的功能,或者,执行本技术方法实施例的图8所示的神经网络模型的训练方法。
[0494]
通信接口5003使用例如但不限于收发器一类的收发装置,来实现装置5000与其他设备或通信网络之间的通信。例如,可以通过通信接口5003获取训练样本或模型参数等。
[0495]
总线5004可包括在装置5000各个部件(例如,存储器5001、处理器5002、通信接口5003)之间传送信息的通路。
[0496]
图20是本技术实施例的图像处理装置的硬件结构示意图。图20所示的装置6000包括存储器6001、处理器6002、通信接口6003以及总线6004。其中,存储器6001、处理器6002、通信接口6003通过总线6004实现彼此之间的通信连接。
[0497]
存储器6001可以是rom,静态存储设备和ram。存储器6001可以存储程序,当存储器6001中存储的程序被处理器6002执行时,处理器6002和通信接口6003用于执行本技术实施例的图像处理方法的各个步骤。具体地,处理器6002可以执行上文中图16所示的方法中的步骤s1320。
[0498]
处理器6002可以采用通用的,cpu,微处理器,asic,gpu或者一个或多个集成电路,用于执行相关程序,以实现本技术实施例的图像处理装置中的单元所需执行的功能,或者执行本技术方法实施例的图像处理方法。
[0499]
处理器6002还可以是一种集成电路芯片,具有信号的处理能力,例如,可以是图4所示的芯片。在实现过程中,本技术实施例的图像处理方法的各个步骤可以通过处理器6002中的硬件的集成逻辑电路或者软件形式的指令完成。
[0500]
上述处理器6002还可以是通用处理器、dsp、asic、fpga或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本技术实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完
成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器6001,处理器6002读取存储器6001中的信息,结合其硬件完成图18所示的图像处理装置中包括的单元所需执行的功能,或者执行图18所示的图像处理方法。
[0501]
通信接口6003使用例如但不限于收发器一类的收发装置,来实现装置6000与其他设备或通信网络之间的通信。例如,可以通过通信接口6003获取待处理图像。
[0502]
总线6004可包括在装置6000各个部件(例如,存储器6001、处理器6002、通信接口6003)之间传送信息的通路。
[0503]
应注意,尽管上述装置5000和装置6000仅仅示出了存储器、处理器、通信接口,但是在具体实现过程中,本领域的技术人员应当理解,装置5000和装置6000还可以包括实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当理解,装置5000和装置6000还可包括实现其他附加功能的硬件器件。此外,本领域的技术人员应当理解,装置5000和装置6000也可仅仅包括实现本技术实施例所必须的器件,而不必包括图19和图20中所示的全部器件。
[0504]
应理解,本技术实施例中的处理器可以为中央处理单元(central processing unit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0505]
还应理解,本技术实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,rom)、可编程只读存储器(programmable rom,prom)、可擦除可编程只读存储器(erasable prom,eprom)、电可擦除可编程只读存储器(electrically eprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(random access memory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的随机存取存储器(random access memory,ram)可用,例如静态随机存取存储器(static ram,sram)、动态随机存取存储器(dram)、同步动态随机存取存储器(synchronous dram,sdram)、双倍数据速率同步动态随机存取存储器(double data rate sdram,ddr sdram)、增强型同步动态随机存取存储器(enhanced sdram,esdram)、同步连接动态随机存取存储器(synchlink dram,sldram)和直接内存总线随机存取存储器(direct rambus ram,dr ram)。
[0506]
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令或计算机程序。在计算机上加载或执行所述计算机指令或计算机程序时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过
有线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质。半导体介质可以是固态硬盘。
[0507]
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况,其中a,b可以是单数或者复数。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系,但也可能表示的是一种“和/或”的关系,具体可参考前后文进行理解。
[0508]
本技术中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
[0509]
应理解,在本技术的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
[0510]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
[0511]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0512]
在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0513]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0514]
另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0515]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。
而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0516]
以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1