发明内容
本发明所要解决的技术问题是提供一种基于MPI的神经网络架构搜索并行化、设备和计算机可读存储介质,使得能够在保证神经网络架构搜索结果模型的识别率的基础上,有效地加速神经网络架构搜索训练效率,大幅度减少训练时间,从而提升自动化深度学习过程的效率。
通过本发明可以实现的技术目的不限于上文已经特别描述的内容,并且本领域技术人员将从下面的详细描述中更加清楚地理解本文中未描述的其他技术目的。
本发明解决上述技术问题的技术方案如下:
根据本公开的一方面,本发明提供一种基于MPI的神经网络架构搜索并行化方法,其特征在于,所述方法包括以下步骤:S101:根据当前多机环境中的GPU的数量启动多个MPI进程,并按顺序进行编排,其中所述多机环境包含多个机器节点,所述多个机器节点中的各节点包含多个GPU以及多个MPI任务进程,所述MPI任务进程根据输入参数进行神经网络架构搜索训练;S102:启动后的MPI进程根据其自己的序号从训练集中的指定的位置读取数据,并进行梯度计算;S103:每个节点的多个GPU根据分层结构进行梯度规约计算,将计算的结果汇总至多个GPU中的首个GPU中;S104:每个节点的多个GPU中的首个GPU按环形结构进行梯度全规约计算;S105:在每个节点内从该首个GPU开始,按分层结构广播梯度计算结果,从而使得所有GPU都获取到新的梯度值;S106:利用该新的梯度值更新神经网络的权值和偏置值。
可选地,在如上所述的方法中,在S101中,所述多个机器节点按顺序设为Node0、Node1、Node2…Noden-1,其中n是总节点数;相应地机器节点的GPU数量设为M0、M1、M2…Mn-1,GPU的数量总共为M=M0+M1+M2+…+Mn-1;通过MPI任务进程运行指令,根据每个节点的GPU数量分别启动M0、M1、M2…Mn-1个训练进程,每个进程分别指定一个GPU进行训练,通过输入参数指定batch_size及MaxSize。
可选地,在如上所述的方法中,在S102中,所述训练集部署在各个机器节点上,以供各个机器节点按需读取,将当前训练数据的起始位置为Set,第0个MPI任务进程使用第0个GPU并加载[Set,Set+batch_size)数据,第1个进程使用第1个GPU并加载[Set+batch_size,Set+2*batch_size)训练数据,相应地第M-1个GPU加载[Set+(M-1)batch_size,Set+M*batch_size)训练数据,将Set更新为Set+M*batch_size,各个GPU用自己获取到的训练数据进行训练并得到相应的梯度数据G。
可选地,在如上所述的方法中,在S103中,如果每个节点的GPU数量大于1,则将其按结对分层结构组织,从第0层开始,逐层往上对结对GPU进行规约计算,直到第0个GPU获取到结果。
可选地,在如上所述的方法中,在S104中,所述多个节点的首个GPU按环形结构进行梯度全规约计算,所述首个GPU是在机器内进行梯度规约计算后,汇总梯度计算结果的GPU,每个节点的第0个GPU中的梯度数据G按总共节点数分成N,每份数据为G/N,将N个节点的第0个GPU连成环形的架构,第0个节点的前继节点为第N-1个节点,后继节点为第1个节点;第1个节点的前继节点为第0个节点,后继节点为第2个节点,以此类推,直到第N-1个节点的前继节点为第N-2个节点,后继节点为第0个节点;首先进行梯度规约,需要进行N-1轮迭代;然后进行梯度传播,需要进行N-1轮迭代,其中,所述梯度规约的每轮步骤过程包括:在第i轮操作时,第j个节点将第(j-i)%N块数据发送给第j+1个节点,并接受第j-1个节点的(j-i-1)%N块数据,将接受来的数据进行规约操作,其中i、j都从0开始计算;所述梯度传播的每轮步骤过程包括:在第i轮操作时,第j个节点将第(j+i+1)%N块数据发送给第j+1个GPU,并接受第j-1个GPU的(j+i)%N块数据,将接受来的数据块替换值相应块的位置,最后所有节点中第0个GPU中获取到梯度计算结果,其中i、j都从0开始计算。
可选地,在如上所述的方法中,在S105中,所述按分层结构广播梯度计算结果从第0层开始分层,每个节点中第0个GPU中的梯度计算结果按分层结构,逐级发送至下层的GPU,直到所有GPU都获取到梯度计算结果。
可选地,在如上所述的方法中,在所述梯度规约计算的过程中,对小于MaxSize的梯度张量进行融合后再进行计算,而对于大于MaxSize的梯度张量进行裁剪后再进行计算。
根据本公开的一方面,本发明提供一种基于MPI的神经网络架构搜索并行化方法设备,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上任一项所述的基于MPI的神经网络架构搜索并行化方法的步骤。
根据本公开的一方面,本发明提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现如上任一项所述的基于MPI的神经网络架构搜索并行化方法的步骤。
上述技术方案仅为本发明实施例的一些部分,本领域技术人员从以下本发明的详细描述中可以导出和理解包含了本发明的技术特征的各种实施例。
本发明的技术方案采用数据节点的方式记录数据信息简单易于扩展,易于使用。数据信息表中的数据按名称排序,可以实现快速查找,使用起来更方便。数据信息表中存放所有的节点信息,后续所有数据方面的操作可以直接查找该表,不用再查找语法树,大大地提高了使用的效率。数据交叉的节点单独记录为多条数据链路,不容易产生混乱。以数组的方式记录数据链路,简单而易于使用。数据信息表可以作为数据字典表,也可以作为数据索引表来使用。数据污染点和数据传递过程记录详细,使用简单。
本领域技术人员将会理解,通过本发明可以实现的效果不限于上文已经具体描述的内容,并且从以下详细说明中将更清楚地理解本发明的其他优点。
具体实施方式
现在将详细参考本发明的示例性实施例,其示例在附图中示出。下面将参考附图给出的详细描述旨在解释本发明的示例性实施例,而不是示出可以根据本发明实现的唯一实施例。以下详细描述包括具体细节以便提供对本发明的透彻理解。然而,对于本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下实践本发明。
在一些情况下,已知的结构和设备被省略或以框图形式示出,集中于结构和设备的重要特征,以免模糊本发明的概念。在整个说明书中将使用相同的附图标记来表示相同或相似的部分。
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
在本发明的描述中,需要理解的是,术语“上”、“下”、“中心”、“内”、“外”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
实施例1
本发明实施例提供一种基于MPI的神经网络架构搜索并行化方法,所述方法包括以下步骤(如图16所示):S101:根据当前多机环境中的GPU的数量启动多个MPI进程,并按顺序进行编排,其中所述多机环境包含多个机器节点,所述多个机器节点中的各节点包含多个GPU以及多个MPI任务进程,所述MPI任务进程根据输入参数进行神经网络架构搜索训练;S102:启动后的MPI进程根据其自己的序号从训练集中的指定的位置读取数据,并进行梯度计算;S103:每个节点的多个GPU根据分层结构进行梯度规约计算,将计算的结果汇总至多个GPU中的首个GPU中;S104:每个节点的多个GPU中的首个GPU按环形结构进行梯度全规约计算;S105:在每个节点内从该首个GPU开始,按分层结构广播梯度计算结果,从而使得所有GPU都获取到新的梯度值;S106:利用该新的梯度值更新神经网络的权值和偏置值。可选地,在S101中,所述多个机器节点按顺序设为Node0、Node1、Node2…Noden-1,其中n是总节点数;相应地机器节点的GPU数量设为M0、M1、M2…Mn-1,GPU的数量总共为M=M0+M1+M2+…+Mn-1;通过MPI任务进程运行指令,根据每个节点的GPU数量分别启动M0、M1、M2…Mn-1个训练进程,每个进程分别指定一个GPU进行训练,通过输入参数指定batch_size及MaxSize。可选地,在S102中,所述训练集部署在各个机器节点上,以供各个机器节点按需读取,将当前训练数据的起始位置为Set,第0个MPI任务进程使用第0个GPU并加载[Set,Set+batch_size)数据,第1个进程使用第1个GPU并加载[Set+batch_size,Set+2*batch_size)训练数据,相应地第M-1个GPU加载[Set+(M-1)batch_size,Set+M*batch_size)训练数据,将Set更新为Set+M*batch_size,各个GPU用自己获取到的训练数据进行训练并得到相应的梯度数据G。可选地,在S103中,如果每个节点的GPU数量大于1,则将其按结对分层结构组织,从第0层开始,逐层往上对结对GPU进行规约计算,直到第0个GPU获取到结果。可选地,在S104中,所述多个节点的首个GPU按环形结构进行梯度全规约计算,所述首个GPU是在机器内进行梯度规约计算后,汇总梯度计算结果的GPU,每个节点的第0个GPU中的梯度数据G按总共节点数分成N,每份数据为G/N,将N个节点的第0个GPU连成环形的架构,第0个节点的前继节点为第N-1个节点,后继节点为第1个节点;第1个节点的前继节点为第0个节点,后继节点为第2个节点,以此类推,直到第N-1个节点的前继节点为第N-2个节点,后继节点为第0个节点;首先进行梯度规约,需要进行N-1轮迭代;然后进行梯度传播,需要进行N-1轮迭代,其中,所述梯度规约的每轮步骤过程包括:在第i轮操作时,第j个节点将第(j-i)%N块数据发送给第j+1个节点,并接受第j-1个节点的(j-i-1)%N块数据,将接受来的数据进行规约操作,其中i、j都从0开始计算;所述梯度传播的每轮步骤过程包括:在第i轮操作时,第j个节点将第(j+i+1)%N块数据发送给第j+1个GPU,并接受第j-1个GPU的(j+i)%N块数据,将接受来的数据块替换值相应块的位置,最后所有节点中第0个GPU中获取到梯度计算结果,其中i、j都从0开始计算。可选地,在S105中,所述按分层结构广播梯度计算结果从第0层开始分层,每个节点中第0个GPU中的梯度计算结果按分层结构,逐级发送至下层的GPU,直到所有GPU都获取到梯度计算结果。可选地,所述梯度规约计算的过程中,对小于MaxSize的梯度张量进行融合后再进行计算,而对于大于MaxSize的梯度张量进行裁剪后再进行计算。
根据本发明的具体实施方式,本发明提供了一种基于MPI的神经网络架构搜索并行化方法。该方法的具体步骤为:
步骤1,机器节点按序设为Node0、Node1、Node2…Noden-1,总节点数为N;每个节点GPU数量为M0、M1、M2…Mn-1,总共具有GPU数量M=M0+M1+M2+…+Mn-1。
步骤2,将训练数据集及验证数据集分别部署到各个节点上。可微分神经网络架构搜索方法分为两个过程:神经网络Cell搜索训练、最终模型训练。两个训练过程并行化设计,除了数据拆分不一样,其它设计都是一样的。
步骤3,(S101)通过MPI运行指令,按节点GPU数量分别启动M0、M1、M2…Mn-1个训练进程。每个进程分别指定一个独占的GPU进行训练,通过运行指令输入参数指定batch_size以及最大梯度张量尺寸MaxSize。
步骤4,如果是神经网络Cell搜索训练,需要将训练数据按固定比例拆分成训练数据和验证数据,再对拆分而成的训练数据进行并行训练;如果是最终模型训练,直接使用训练数据即可。假设当前训练数据起始位置为Set,第0个进程使用第0个GPU并加载[Set,Set+batch_size)数据,第1个进程使用第1个GPU并加载[Set+batch_size,Set+2*batch_size)训练数据,以此类推,直到第M-1个GPU加载[Set+(M-1)batch_size,Set+M*batch_size)训练数据。同时,更新Set为Set+M*batch_size,为下一轮训练做准备。
步骤5,(S102)各个GPU用自己获取到的训练数据进行训练并得到相应的梯度数据G。
步骤6,每个节点的GPU数如果大于1,将其按结对分层结构组织。第一层,第0个GPU与第1个GPU结对,第2个GPU与第3个GPU结对…;第二层,第0个GPU与第2个GPU结对,第3个GPU与第5个GPU结对…;以此类推,直到最后两个GPU结对。
步骤7,(S103)从第0层开始,逐层往上对结对GPU进行规约计算,直到第0个GPU获取到结果。
步骤8,每个节点的第0个GPU中的梯度数据G分成按总共节点数分成N,每份数据为G/N。
步骤9,(S104)将N个节点的第0个GPU连成一个环的架构,第0个节点的前继节点为第N-1个节点,后继节点为第1个节点;第1个节点的前继节点为第0个节点,后继节点为第2个节点;以此类推,直到第N-1个节点的前继节点为第N-2个节点,后继节点为第0个节点。
步骤10,第一步进行梯度规约计算,需要进行N-1轮迭代,在第i轮操作时,第j个节点将第(j-i)%N块数据发送给第j+1个节点,并接受第j-1个节点的(j-i-1)%N块数据,将接受来的数据进行规约操作。(i、j都从0开始计算)。
在梯度规约计算过程中,如果经过反向传播生成的梯度数据大于MaxSize,则按MaxSize尺寸大小将梯度张量进行裁剪后,再进行规约计算,且在规约计算队列中,设立优先级别,反向传播过程靠后计算得到的梯度张量优先级大于反向传播靠前计算得到的梯度张量。这样可以使下一轮的前向传播与前一轮的梯度规约计算重叠。在对规约计算队列中的梯度进行规约计算的过程中,如果发现连续的梯度张量数据和小于MaxSize,则申请一个缓存空间,将小梯度数据进行融合成不大于MaxSize的张量,再进行规约计算,在计算完毕后,各个张量从缓存空间取走计算结果即可。
步骤11,第二步进行梯度传播,需要进行N-1轮迭代,在第i轮操作时,第j个节点将第(j+i+1)%N块数据发送给第j+1个GPU,并接收第j-1个GPU的(j+i)%N块数据,将接受来的数据块替换值相应块的位置。最后所有节点中第0个GPU中获取到梯度计算结果。(i、j都从0开始计算)。
步骤12,假设节点数N比较大,可将节点按多层环形的架构进行组织。假设有N个节点,如果全挂在一个环上,则需要进行2(N-1)轮计算。假设均分为R层环形,0层每个环有R0个节点,1层每个环有R1个节点,R-1层每个环有Rr-1个节点,则需要进行2(R0+R1+…+Rr-1-R)。由于N=R0*R1*R2*…*Rr-1,所以R0+R1+…+Rr-1-R远小于2(N-1)。但根据实际执行情况,由于分层过深,给控制通信带来一定的难度和开销,所以分为2层即可。梯度规约计算从低层环形开始,往高层环形继续,直接所有环结构的梯度规约计算完毕。
步骤13,在梯度规约计算完毕以后,将环内的节点按分层的结构,逐级发送至下层的节点,直到环内所有节点都获取到梯度计算结果。
步骤14,(S105)将每个节点中第0个GPU中的梯度计算结果按分层结构,逐级发送至下层的GPU,直到所有GPU都获取到梯度计算结果。
步骤15,(S106)每个GPU将得到的梯度应用到对权值和偏置值参数的计算,并更新权值和偏置值参数。
步骤16,各个MPI进程分别获取下一个batch_size的训练数据,按步骤4到步骤15重复进行计算,直到将所有训练数据训练完毕。
步骤17,为了进一步训练出效果更好的模型,按指定的epochs,重复训练数据集,直到得到识别率较高的神经网络架构。
上述基于MPI的神经网络架构搜索并行化方法,由于针对的神经网络架构搜索算法本身的可微分性,利用随机梯度下降算法,可使计算数据并行。各个节点计算各自的梯度值,利用MPI将汇总梯度值并求得平均值,同时按并行数量提高学习率,以降低对loss下降速度的影响。在同等的epochs下,在理想的情况下,能达到近线性的训练速度提升。
可微分神经网络架构搜索存在的一个问题是,神经网络Cell搜索训练过程中,网络参数很多,由于单GPU显存有限,导致只能选择浅层网络进行搜索,与最终模型训练层的深度有很大的差距。将训练修改成并行化后,可以在保持固定的占用显存下,减少batch_size,增大layer数,从而间接地解决了此问题。
根据本发明的更具体的实施方式,本发明还提供了一种基于MPI的神经网络架构搜索并行化方法。该方法的具体步骤为:
步骤1,每个节点部署好Linxu系统、MPI(Message PassingInterface)及深度学习框架(例如Tensorflow、Pytorch)软件环境,以及GPU驱动程序环境。
步骤2,将各节点部署在一个局域网上,节点间尽量用Infiniband卡连接。这样可以利用RDMA技术获得更大的带宽。
步骤3,将节点间的主机名到IP的映射关系设置好,同时将Secure Shell设置成基于密钥的安全验证方式进行访问,以到达无需传递账号与口令便可访问,从而以用户名和主机名便能相互访问。这样便能在一台主机器上执行命令,在本机运行训练地同时,通过远程访问,在其他机器上也自动运行训练。
步骤4,机器节点按序设为Node0、Node1、Node2…Noden-1,总节点数N,这里假设有16个节点,每4个节点组成一环,共4个环;每个节点GPU数量为M0、M1、M2…Mn-1总共有GPU数量M=M0+M1+M2+…+Mn-1,假设每个节点有4块GPU,共有64块GPU。
步骤5,下载CIFAR10训练及验证数据部署到各个节点上,其中训练数据样本60000张,验证数据集10000张。
步骤6,通过MPI运行指令,按节点GPU数量分别启动4个训练进程,总共64个MPI进程。每个进程分别指定一个GPU进行训练,通过输入参数指定batch_size及MaxSize,这里设batch_size为32,MaxSize为64,默认训练数据起始位置为Set为0。第0个MPI进程初始化模型权值和偏置值,并广播给其他MPI进程,如果是神经网络Cell搜索训练,则还需广播神经网络架构操作权值参数值。
步骤7,如果是神经网络Cell搜索训练,需要将训练数据按1:1比例拆分成训练数据和验证数据,再对拆分而成的训练数据进行并行化训练;如果是最终模型训练,则直接使用训练数据即可。第0个进程使用第0个GPU并加载[Set,Set+32)数据,第1个进程使用第1个GPU并加载[Set+32,Set+64)训练数据,以此类推,直到第63个GPU加载[Set+2016,Set+2047)训练数据。更新Set为Set+2047。
步骤8,各个GPU用自己获取到的训练数据进行训练并得到相应的梯度数据G。
步骤9,第一层,第0个GPU与第1个GPU结对,第2个GPU与第3个GPU结对;第二层,第0个GPU与第2个GPU结对。
步骤10,从第0层开始,逐层往上对结对GPU进行规约计算,直到第0个GPU获取到结果,共需要2轮计算,如图1所示。
步骤11,每个节点的第0个GPU中的梯度数据G分成按总共节点数分成4,每份数据为G/4,初始状态如图2所示。
步骤12,将环内4个节点的第0个GPU连成一个环的架构,第0个节点的前继节点为第3个节点,后继节点为第1个节点;第1个节点的前继节点为第0个节点,后继节点为第2个节点;以此类推,直到第3个节点的前继节点为第2个节点,后继节点为第0个节点。
步骤13,第一步进行梯度规约计算,需要进行3轮迭代,在第i轮操作时,第j个节点将第(j-i)%4块数据发送给第j+1个节点,并接受第j-1个节点的(j-i-1)%4块数据,将接受来的数据进行规约操作。如图3、图4、图5所示。(i、j都从0开始计算)
在梯度规约计算过程中,将反向传播生成的梯度数据按MaxSize进行裁剪后,放入规约计算队列中,并设立优先级别,反向传播过程靠后计算得到的梯度张量优先级大于反向传播靠前计算得到的梯度张量。如图6所示,对不切割张量情况与切割张量情况下梯度规约计算过程分析,切割后,整个过程花费时间明显少于原梯度张量规约计算。张量规约计算队列中,连续的张量尺寸按MaxSize进行张量合并后,再进行规约计算。这样有效地防止张量过小,导致时间都耗费再通信延时上的问题。当然,梯度张量切割和融合是否有效和实际环境通信质量有关系,最大梯度张量依据于具体环境而定,可以在正式进行训练之前,通过预热数据训练以贝叶斯的方法逐步评估训练速度来决定最优的最大梯度张量尺寸。使用此种自动化调参的过程中,由于可微分神经网络架构搜索占用显存跟batch_size成正比,可以在最大化利用显存的条件下,固定batch_size,仅对最大梯度张量进行评估和预测。
步骤14,第二步进行梯度传播,需要进行3轮迭代,在第i轮操作时,第j个节点将第(j+i+1)%4块数据发送给第j+1个GPU,并接受第j-1个GPU的(j+i)%4块数据,将接受来的数据块替换值相应块的位置。如图6、图7、图8。最后所有节点中第0个GPU中获取到梯度计算结果。(i、j都从0开始计算)
步骤15,将第0,4,8,12个节点连成的环,按步骤12、13、14再做一层环形梯度规约,如图9所示。
步骤16,将各个环内的第0个节点中的梯度计算结果按分层结构,逐级发送至下层节点,直到环内所有节点都获取到梯度计算结果。第0轮,将第0个节点的梯度数据传递给第1个节点;第2轮,将第0,1个节点梯度数据分别传递给2,3个节点。如图10、11所示。
步骤17,将每个节点中第0个GPU中的梯度计算结果按分层结构,逐级发送至下层的GPU,直到所有GPU都获取到梯度计算结果。第0轮,将第0个GPU的梯度数据传递给第1个GPU;第2轮,将第0,1个GPU梯度数据分别传递给2,3个GPU。如图12-15所示。
步骤18,每个GPU将得到的梯度应用到对权值和偏置值参数的计算,并更新权值和偏置值参数。如果是神经网络Cell搜索训练,还需将神经网络架构操作参数值计算得到的梯度值应用到操作权值参数进行更新。
步骤19,各个MPI进程分别获取下一个batch_size的训练数据,按步骤7到步骤18重复进行计算,直到将所有训练数据训练完毕。
步骤20,为了进一步训练出效果更好的模型,按指定的epochs,重复训练数据集,直到得到识别率较高的神经网络架构。
以上步骤中,假设节点数为16,仅是为了用较小的模型,更清楚地描述各步骤具体过程,而实际实施时,可能会有成百上千个节点。
实施例2
根据本发明的实施例,本发明提供一种基于MPI的神经网络架构搜索并行化设备,如图17所示,包括:存储器10、处理器12及存储在所述存储器10上并可在所述处理器12上运行的计算机程序,所述计算机程序被所述处理器12执行时实现如上实施例1中所述的基于MPI的神经网络架构搜索并行化方法的步骤。
实施例3
根据本发明的实施例,本发明提供一种计算机可读存储介质,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现如上实施例1中所述的基于MPI的神经网络架构搜索并行化方法的步骤。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本申请可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现。基于这样的理解,本申请的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
如上所述,已经给出了本发明的优选实施例的详细描述,以使本领域技术人员能够实施和实践本发明。虽然已经参照示例性实施例描述了本发明,但是本领域技术人员将会理解,在不脱离所附权利要求书中描述的本发明的精神或范围的情况下,可以在本发明中进行各种修改和改变。因此,本发明不应限于在此描述的特定实施例,而应被赋予与本文公开的原理和新颖特征一致的最宽范围。