发布信息

具有减少的存储器需求的双动量梯度优化的制作方法 专利技术说明

作者:admin      2022-11-26 14:47:31     879



计算;推算;计数设备的制造及其应用技术具有减少的存储器需求的双动量梯度优化背景技术:1.经训练的模型,包括神经网络模型,用于执行复杂的任务,诸如阅读理解、语言翻译、图像识别或语音识别。已经部署了机器学习服务来执行这样的复杂任务,机器学习服务诸如是基于自然语言处理(nlp)、递归神经网络(rnn)、卷积神经网络(cnn)、长短期记忆(lstm)神经网络或门控递归单元(gru)的机器学习服务。虽然这些类型的模型已经使用各种架构和方法被训练,但需要继续改进底层架构和方法来执行训练。技术实现要素:2.在一个示例中,本公开涉及一种系统中的方法,该系统包括梯度优化器和存储器,该存储器被配置为存储与包括l层的神经网络模型相关联的动量值,其中l是大于一的整数。该方法可以包括:从存储器取回第一组动量值,该第一组动量值对应于神经网络模型的层,该第一组动量值具有所选择的存储格式,以及从存储器取回第二组动量值,该第二组动量值对应于神经网络模型的层,该第二组动量值具有所选择的存储格式。该方法还可以包括:将具有所选择的存储格式的第一组动量值转换为具有与梯度优化器相关联的训练格式的第三组动量值,以及将具有所选择的存储格式的第二组动量值转换为具有与梯度优化器相关联的训练格式的第四组动量值。该方法还可以包括:使用梯度优化器,使用第三组动量值和第四组动量值来执行梯度优化。3.在另一示例中,本公开涉及一种包括梯度优化器的系统。该系统可以包括存储器,该存储器被配置为存储与包括l层的神经网络模型相关联的动量值,其中l是大于一的整数。该系统可以被配置为:(1)从存储器取回第一组动量值,该第一组动量值对应于神经网络模型的层,该第一组动量值具有所选择的存储格式,以及从存储器取回第二组动量值,该第二组动量值对应于神经网络模型的层,该第二组动量值具有所选择的存储格式,(2)将具有所选择的存储格式的第一组动量值转换为具有与梯度优化器相关联的训练格式的第三组动量值,以及将具有所选择的存储格式的第二组动量值转换为具有与梯度优化器相关联的训练格式的第四组动量值,以及(3)使用梯度优化器,使用第三组动量值和第四组动量值来执行梯度优化。4.在又一示例中,本公开涉及一种系统中的方法,该系统包括梯度优化器和存储器,该存储器被配置为存储与包括l层的神经网络模型相关联的权重和动量值,其中l是大于一的整数。该方法还可以包括:从存储器取回第一组动量值,该第一组动量值对应于神经网络模型的层,该第一组动量值具有所选择的存储格式,以及从存储器取回第二组动量值,该第二组动量值对应于神经网络模型的层,该第二组动量值具有所选择的存储格式。该方法还可以包括:将具有所选择的存储格式的第一组动量值转换为具有与梯度优化器相关联的训练格式的第三组动量值,以及将具有所选择的存储格式的第二组动量值转换为具有与梯度优化器相关联的训练格式的第四组动量值。该方法还可以包括:使用梯度优化器,使用第三组动量值和第四组动量值来执行梯度优化。该方法还可以包括:生成用于梯度优化的下一次迭代的第五组动量值和第六组动量值。该方法还可包括:通过仅存储符号位并截断与第五组动量值的尾数相关联的预定数目的位,将第五组动量值转换为具有存储格式的第七组动量值。该方法还可以包括:通过仅存储符号位并截断与第六组动量值的尾数相关联的预定数目的位,将第六组动量值转换为具有存储格式的第八组动量值。5.提供本概述来以简化形式介绍概念的选集,这些概念将在下面的具体实施方式中进一步描述。本发明内容并非旨在表示所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。附图说明6.本公开以示例的方式被图示并且不受附图限制,其中相似的附图标记指示相似的元素。附图中的元素是为了简单和清楚而被图示的,并且不一定按比例绘制。7.图1示出了根据一个示例的包括双动量梯度优化器(dmgo)的人工智能训练系统(aits);8.图2示出了根据一个示例的双动量梯度优化器(dmgo);9.图3示出了包括针对权重更新误差的误差界限曲线(eb(m))的曲线图,其中压缩动量值从截断一个尾数位扫描到截断二十三个尾数位;10.图4示出了具有模拟收敛曲线的曲线图400,其图示降低精度的动量值对训练准确性的影响;11.图5示出了根据一个示例的包括硬件辅助梯度优化器(hago)的训练系统;12.图6示出了根据一个示例的包括双动量梯度优化器(dmgo)的硬件辅助梯度优化器(hago)的框图;13.图7示出了根据一个示例的与图6的hago相关联的时序图;14.图8示出了根据另一示例的梯度优化系统;15.图9示出了根据一个示例的用于双动量梯度优化器(dmgo)的方法的流程图;以及16.图10示出了根据一个示例的用于双动量梯度优化器(dmgo)的另一方法的流程图。具体实施方式17.本公开中公开的示例涉及具有减少的存储器需求的双动量梯度优化。某些示例涉及模型的分布式训练,模型包括需要较少存储器的神经网络模型。在某些示例训练系统中,每个工作器(例如,gpu、dsp或asic加速器)获取训练数据的子集(例如,小批量)并计算梯度,该梯度被进一步平均/归约以更新模型的参数(例如,权重)。在计算梯度的反向传播步骤之后应用权重更新。例如,计算损失函数相对于网络(或网络的一部分)中的权重的梯度。然后将梯度馈送到优化方法,该优化方法使用梯度来更新权重以最小化损失函数。反向传播的目标是更新网络中的每个权重(或至少一些权重),以使这些权重使实际输出更接近目标输出,从而将针对每个输出神经元和整个网络的误差最小化。18.在某些示例中,经训练的模型可以被部署在云计算环境中。云计算可以指用于实现对可配置计算资源的共享池的按需网络访问的模型。例如,可以在市场中使用云计算来提供对可配置计算资源的共享池的无处不在且方便的按需访问。可配置计算资源的共享池可以通过虚拟化被快速配置,并以低的管理工作量或服务提供商交互被释放,并且然后被相应地缩放。云计算模型可以由各种特征构成,例如按需自助服务、广泛的网络访问、资源池、快速弹性、定制服务等。云计算模型可以用于暴露各种服务模型,诸如硬件即服务(“haas”)、软件即服务(“saas”)、平台即服务(“paas”),以及基础设施即服务(“iaas”)。云计算模型也可以使用诸如私有云、社区云、公共云、混合云等的不同的部署模型被部署。19.可以使用本公开中描述的示例来实现各种机器学习服务,诸如基于递归神经网络(rnn)、卷积神经网络(cnn)、长短期记忆(lstm)神经网络或门控递归单元(gru)的机器学习服务。在一个示例中,服务相关内容或其他信息,诸如单词、句子、图像、视频或其他此类内容/信息,可以被转换为矢量表示。矢量表示可以对应于诸如rnn、cnn、lstm或gru等的技术。在一个示例中,神经网络模型可以包括许多层,并且每个层可以被编码为权重矩阵或权重向量,权重矩阵或权重向量通过已经经由神经网络的离线训练获得的系数或常数的形式表示。20.以lstm为例,lstm网络可以包括一系列重复的rnn层或其他类型的层。lstm网络的每一层可以在给定的时间步消耗一个输入,例如,来自前一个时间步的层的状态,并且可以产生一组新的输出或状态。在使用lstm的情况下,可以将单个内容块编码为单个向量或多个向量。例如,一个单词或单词的组合(例如,短语、句子或段落)可以被编码为单个向量。每个块可以被编码到lstm网络的单个层(例如,特定时间步)中。可以使用一组式子来描述lstm层,诸如以下式子:it=σ(wxixt+whiht-1+wcict-1+bift=σ(wxfxt+whfht-1+wcfct-1+bf)ct=ftct-1ittanh(wxcxt+whcht-1+bc)ot=σ(wxoxt+whoht-1+wcoct+bo)ht=ottanh(ct)21.在该示例中,在每个lstm层内,输入和隐藏状态可以使用向量运算(例如,点积、内积或向量加法)和非线性函数(例如,sigmoids、双曲线和切线)被处理。在某些情况下,计算量最大的操作可能来自点积,点积可以使用稠密矩阵向量和矩阵-矩阵乘法例程来实现。在一个示例中,向量运算和非线性函数的处理可以并行执行。22.梯度优化器是用于人工智能的训练系统中的关键部件之一。梯度优化器旨在将梯度应用于模型参数(权重)以更新模型,以使得下一次迭代的预测可以更接近真值。本公开的某些示例涉及支持双动量梯度优化器的ai训练框架,其中两个单精度(fp32)动量与模型参数一起被缓存。每个更新步骤计算新的动量值,然后将该新的动量值用于生成新的权重。新的动量值和新的权重都被存储以用于下一次迭代。例如,双动量自适应矩估计(adam)算法可以由以下式子表示:vt:=β1·vt+(1-β1)·dwst:=β2·st+(1-β2)·dw2其中vt,st是两个动量,w是模型权重,dw是梯度,α是初始学习率,并且∈是用于提高数值稳定性的很小的值。23.有利地,双动量优化器的使用可以使神经网络模型比诸如sgd(随机梯度下降)的零动量/单动量优化器更快地收敛。但是,使用双动量优化器可能需要至少两倍于零动量/单动量优化器所需的存储器,以用于缓存模型权重以外的动量。尤其是对于包含数百万或数十亿参数的大型模型,这种趋势可能会变得严重。如果优化器在存储器有限的gpu/asic上运行,则优化器占用的存储器空间会不利地减小最大的批量大小。另一方面,将优化器重新定位到主机cpu可以解决存储器大小瓶颈。但是,存储器带宽瓶颈可能会减慢优化器的速度,因为处理器需要为每个权重/梯度对从存储器中获取额外的两个fp32动量并将它们存储回去。24.此外,考虑到诸如基于变换器的双向编码器表示(bert)-大型模型之类的模型每个工作器生成1.36吉字节(gb)的梯度,缓存整个模型的梯度需要非常大量的存储器。在该模型的上下文中,需要5.44gb的存储器来缓存四工作器训练集群中的梯度。对存储器的需求随着工作器数目的增加而线性增加。此外,当与诸如自适应矩估计(adam)等的需要每个梯度缓存两个浮点32位(fp32)动量项的算法一起使用时,每个工作器的存储器需求可能是bert所需存储器的三倍。25.图1示出了根据一个示例的包括双动量梯度优化器(dmgo)150的人工智能训练系统(aits)100。aits 100可以包括存储器110(例如,dram或其他类型的存储器)、存储器接口120(例如,ddr接口或其他类型的接口)、动量格式转换器(mfc)130、另一种动量格式转换器(mfc)140和dmgo 150。存储器110可以经由总线112耦合到存储器接口120。备选地,存储器110可以经由片上芯片封装、系统级芯片封装、3d存储器系统、堆叠裸片系统与存储器接口120集成。存储器接口120可以经由总线122耦合到dmgo 150,使得模型权重(w)可以经由存储器总线122从存储器110传输到dmgo 150。存储器接口120可以经由总线132和134耦合到mfc 130。总线132可以用于从存储器110向mfc 130传输与第一动量相关联的存储格式动量值(例如,vt_fp8格式)。总线134可以用于从存储器110向mfc 130传输与第二动量相关联的存储格式动量值(例如,st_fp8格式)。在一个示例中,存储格式可以对应于动量值的8位降低精度格式。mfc 130可以被配置为处理第一动量值和第二动量值,以将它们的格式从存储格式改变为与dmgo 150相关联的训练格式。在一个示例中,训练格式可以对应于全32位单精度格式。mfc 130还可以被配置为分别经由总线136和总线138向dgo 150传输第一动量值和第二动量值。在该示例中,mfc 140可以经由总线142和144耦合到dmgo 150。mfc 140可以进一步经由总线146和148耦合到存储器接口110。mfc 140可以将动量值从训练格式转换为存储格式。26.仍然参考图1,aits 100可以允许实施一种新方法来为adam使用降低精度动量,而不会引入任何性能下降。例如,双动量adam算法可以由以下式子表示:vt:=β1·vt+(1-β1)·dwst:=β2·st+(1-β2)·dw2其中vt,st是两个动量,w是模型权重,dw是梯度,α是初始学习率,并且∈是用于提高数值稳定性的很小的值。在一个示例中,动量值中的一个动量值(vt)可以对应于梯度值的期望,并且动量值中的另一个动量值(st)可以对应于梯度值方差的期望值。在这该示例中,代替使用全32位单精度动量,只使用了8位:1位用于符号,并且7位用于动量的动态范围{vt,st}。在该示例中,因为vt,st由于与(1-β)相乘而均小于1.0,其中β是接近1.0的值,vt,st的8位指数的最高有效位(msb)为常数零,并且可以在存储之前安全地被丢弃。在该示例中,虽然动量值的存储格式是8位,但计算格式仍然是更高的精度,以达到更高的准确性。尽管图1示出了包括以特定方式布置的一定数目的部件的aits 100,但是aits 100可以包括以不同方式布置的附加的或更少的部件。作为示例,mfc 130和mfc 140可以经由片上芯片封装、系统级芯片封装、3d存储器系统、堆叠裸片系统与dmgo 150集成。备选地,mfc 130和mfc 140可以与dmgo 150集成在同一芯片上(例如,作为片上系统(soc)。在另一示例中,存储器110、存储器接口120、mfc 130、mfc 140、dmgo 150中的每一个可以经由片上芯片封装、系统级芯片封装、3d存储器系统、堆叠裸片系统集成。27.图2示出了根据一个示例的双动量梯度优化器(dmgo)200。dmgo 200可以包括动量解压缩器202和另一个动量解压缩器204。dmgo 200还可以包括动量压缩器262和另一个动量压缩器264。dmgo 200还可以包括被配置为执行与实现双动量自适应矩估计(adam)算法相关联的各种操作的逻辑。在该示例中,动量解压缩器202和动量解压缩器204可以用于提供与先前关于图1的mfc 130描述的相似功能。类似地,动量压缩器262和动量压缩器264可以用于实现与先前关于图1的mfc 140描述的相似功能。与第一动量相关联的动量值(例如,vt_fp8)可以从存储器被获取,并且被提供给动量解压缩器202。与第二动量相关联的动量值(例如,st_fp8)可以从存储器被获取,并且被提供给动量解压缩器204。在一个示例中,动量值可以具有存储格式(例如,8位降低精度格式)。动量解压缩器202可以被配置为处理第一动量值以将它们的格式从存储格式改变为与dmgo 200相关联的训练格式。动量解压缩器204可以被配置为处理第二动量值以将它们的格式从存储格式改变为与dmgo 200相关的训练格式。28.继续参考图2,作为dmgo 200的一部分被包括的逻辑可以包括被配置为执行诸如加法、乘法和融合乘法-加法操作等的操作的逻辑。该逻辑可以被配置为实现双动量优化算法(例如,双动量自适应矩估计(adam)算法)。例如,关于新动量值(vt_new,st_new)的计算,与双动量adam算法相对应的计算可以由以下式子表示:vt_new:=β1·vt_fp32+(1-β1)·dwst_new:=β2·st_fp32+(1-β2)·dw2其中vt_new,st_new是新动量值,w是模型权重,dw是梯度,α是初始学习率,并且∈是用于提高数值稳定性的很小的值。因此,在该示例中,动量解压缩器202和204将相应的动量值(vt_fp8,st_fp8)的存储格式(例如,8位压缩格式)转换为与dmgo 200相关联的训练格式(例如,32位全精度格式)。例如,在执行梯度优化之前,动量解压缩器(例如,动量解压缩器202或204)通过如下方式将经压缩的8位动量值转换回32位单精度:在符号位与指数的最高有效位(msb)之间插入一个“0”位,并且在指数的最低有效位(lsb)之后填充二十三个“0”位。所填充的位不必是“0”位。在一个示例中,至少少量的位可以是非零位。例如,两个或三个lsb可以是非零位。29.仍然参考图2,包括乘法器210和214以及加法器212的与dmgo 200相关联的逻辑可以执行与生成新动量值中的一个新动量值(vt_new)相关联的计算。类似地,包括乘法器216、218和218以及加法器222的与dmgo 200相关联的逻辑可以执行与生成其他新动量值(st_new)相关联的计算。此外,在该示例中,在将新动量值(vt_new,st_new)存储回存储器之前,动量压缩器262和264将新动量值的格式从训练格式转换为存储格式。新动量值(vtc_new,stc_new)在图2中被示出为8位存储格式值。在该示例中,动量压缩器262和264中的每个动量压缩器可以被配置为去除与动量值相关联的指数的最高有效位(msb)并且截断所有23个尾数位,以将32位全精度动量值(vt_new,st_new)转换为8位压缩动量值(vtc_new,stc_new)。该8位压缩动量值将被存储在存储器中。备选地,可以截断少于23个尾数位。有利地,动量值的压缩可以将存储动量值所需的缓存器大小减小四倍。此外,使用最低有效位(lsb)截断可以通过引入相同的舍入误差方向来降低精度而不损失训练性能,以使得误差可以相互抵消。30.继续参考图2,dmgo 200还可以包括被配置为生成新权重值(例如,w_new)的逻辑。在该示例中,该逻辑可以包括乘法器232和234、加法器242、倒数平方根(rsqrt)246、以及融合乘法-加法(fma)250。尽管图2示出了包括以特定方式布置的一定数目的部件的dmgo 200,但是dmgo 200可以包括以不同方式布置的附加的或更少的部件。31.当动量被动量压缩器压缩时,动量的精度位被截断以引入相对于新动量值(例如分别为vtc_new和stc_new)的相对误差δ1和δ2。鉴于此,梯度优化式子可重写为:对于32位单精度数,|δ1|≤2m-24,|δ2|≤2m-24,其中m是被截断的精度位数。在该示例中,如果m不太大,可以安全地近似1-δ1=1-δ2≈1-δ。只有当所有截断的m位都是“1”时,才能达到误差界限,并且这种情况在实际应用中很少发生。即便如此,如果发生这种极端情况,瞬时峰值误差可能不会对整体性能产生负面影响。截断两个动量后的更新权重的相对误差可以表示为:对于任何δ∈[0,1),对于小的δ值,降比1-δ更接近1。这表明降低两个动量的精度并不会线性地降低更新参数的精度。这种“误差平方根”效应补偿了由于截断而导致的一些“精度损失”。[0032]图3示出了权重更新误差的误差界限曲线(eb(m))的曲线图300,其中压缩动量值从截断一个尾数位扫描到截断二十三个尾数位。如曲线图300所示,在该示例中,当截断尾数位的数目低于十六时,与全单精度(fp32)动量值相比,误差界限值接近于零。在该示例中,当截断尾数位的数目超过十七时,误差界限迅速增加,当所有尾数位都已被截断时,最大误差界限为0.13。[0033]图4示出了具有模拟收敛曲线410、420和420的曲线图400,其图示降低精度的动量值对训练准确性的影响。作为示例,模拟收敛曲线410对应于动量值的1位尾数,模拟收敛曲线420对应于动量值的4位尾数,并且模拟收敛曲线430对应于动量值的24位尾数。从模拟收敛曲线可以明显看出,截断动量值的尾数位不会降低训练准确性方面的性能。然而,由于降低精度的动量值至少节省了50%的存储器占用,因此可以只需要用于读取存储器的周期的一半。[0034]作为本公开的一部分描述的技术可以使用硬件和/或软件的组合来实现。在某些示例中,图2的dgmo 200可以被部署为训练系统500的一部分,如图5所示。在该示例中,根据一个示例,dgmo 200可以作为硬件辅助梯度优化器(双动量)550(称为hago)的一部分被包括,以用于训练模型。梯度优化系统500可以包括经由高速总线桥520耦合到hago 550的多个工作器(例如,工作器_1 502、工作器_2 504和工作器_n 506)。每个工作器(例如,工作器_1 502、工作器_2 504和工作器_n 506)可以使用任意数目的图形处理单元(gpu)、计算机处理单元(cpu)、存储器(例如sram或其他类型的存储器)、现场可编程门阵列(fpga)、专用集成电路(asic)、可擦除和/或复杂可编程逻辑器件(pld)、可编程阵列逻辑(pal)器件、或通用阵列逻辑(gal)器件来实现。每个工作器可以承载正在使用梯度优化系统500训练的神经网络模型的完整副本。虽然每个工作器可以承载神经网络模型的完整副本,但每个工作器可以仅操作训练数据的与模型相关联的子集(例如,用于分类的图像或其他数据样本)。每个工作器可以对数据执行前向传递以计算误差,然后执行反向传递以计算每个参数(例如,每个权重)的梯度。梯度优化系统500还可以包括经由总线528耦合到高速总线桥520的主机560。[0035]继续参考图5,在一个示例中,高速总线桥520可以被实现为外围部件互连快速(pcie)桥。工作器_1 502可以经由pcie链路510连接到高速总线桥520。工作器_2 504可以经由pcie链路512连接到高速总线桥520。工作器_n 506可以经由pcie链路514连接到高速总线桥520。hago 550可以经由总线链路522和524耦合到高速总线桥520。也可以使用其他类型的总线桥和总线链路。此外,也可以使用交换结构来代替总线桥。每个工作器可以计算训练数据的子集(例如,小批量)上的梯度,并经由高速总线桥520向hago 550提供更新的梯度。hago 550可以对从每个工作器(例如,工作器_1 502、工作器_2 504和工作器_n 506)收集的梯度执行归约和优化。hago 550可以对数据突发进行操作,并且在一个示例中,每个突发可以由恒定数目的传入梯度构成。当前梯度突发可以被缓存,而先前的梯度突发连同其相应的权重一起被优化。虽然图5示出了包括以特定方式布置的一定数目的部件的梯度优化系统500,但是梯度优化系统500可以包括以不同方式布置的附加的或更少的部件。[0036]图6示出了根据一个示例的包括双动量梯度优化器的hago600的框图。在一个示例中,图5的hago 550可以被实现为图6的hago 600。hago 600可以经由高速总线接收来自工作器的更新梯度。图6中的示例假设有四个工作器耦合到hago 600。可以经由先进先出块(例如,gfifo_1 602)接收来自工作器中的一个工作器的更新梯度(dw1)。可以经由另一个先进先出块(例如,gfifo_2 604)接收来自另一个工作器的更新梯度(dw2)。可以经由另一个先进先出块(例如,gfifo_3 606)接收来自另一个工作器的更新梯度(dw3)。可以经由另一个先进先出块(例如,gfifo_4 608)接收来自另一个工作器的更新梯度(dw4)。fifo可以被实现为单个多入口fifo或多个单入口fifo。[0037]继续参考图6,hago 600还可以包括浮点平均块(例如,fp-avg块620)。fp-avg块620可以从先进先出块接收被缓存的更新梯度。作为示例,fp-avg块620可以从gfifo_1 602接收被缓存的更新梯度(bdw1)。fp-avg块620还可以从gfifo_2 604接收被缓存的更新梯度(bdw2)。fp-avg块620还可以从gfifo_3 606接收被缓存的更新梯度(bdw3)。fp-avg块620还可以从gfifo_4 608接收被缓存的更新梯度(bdw4)。fp-avg块620可以对所接收的更新梯度执行归约。在该示例中,归约操作可以包括对所接收的梯度进行平均并生成dw_avg作为输出。归约操作不限于平均。可以使用诸如求和或缩放求和等的其他操作来执行归约。来自fp-avg块620的输出可以被提供给梯度优化器数据路径(godp)块650,该godp块650执行浮点算术以实现梯度优化算法,诸如先前关于图1和图2描述的梯度优化算法。在一个示例中,fp-avg块620和godp块650可以被实现为fpga的一部分。[0038]仍然参考图6,权重(w)和可选的动量(m)的主副本可以存储在存储器660中。在一个示例中,存储器660可以使用双倍数据速率(ddr)动态随机存取存储器(dram)来实现。存储器660可以经由存储器接口662耦合到先进先出块(例如,pfifo块670)。存储器接口662可以是ddr接口。如图6所示,模型的权重(w)可以在控制有限状态机(fsm)(例如,控制fsm 640)的控制下被加载到pfifo 670中。此外,存储器660可以经由存储器接口662耦合到动量格式转换器(mfc)684。mfc 684可以提供与先前关于图1的mfc 130描述的类似功能。mfc 684的输出可以耦合到pfifo 670(或另一个fifo)。[0039]在一个示例中,同时,控制fsm 640:(1)使每个工作器能够将相应的本地计算的梯度(例如,dw1、dw2、dw3和dw4)传输到相应的gfifo(例如,gfifo_1 602、gfifo_2 604、gfifo_3 606和gfifo_4 608),并且(2)使存储器接口662能够从存储器660获取相同数目的参数(例如,权重(w))以及可选的动量到pfifo 670。因此,在该示例中,控制fsm 640控制存储器接口662将与在单个突发周期期间注入gfifo的梯度数目相同数目的权重获取到pfifo 670中。随着这些fifo中的每个fifo达到突发大小,这些fifo的相应读取端口由控制fsm 640激活,以以单周期延迟输出相应fifo的内容。在该示例中,控制fsm 640能够从pfifo 670和gfifo中读出权重,使得来自这些缓存器的数据以相同的延迟被清除。因此,数据的读出是完全对齐的。[0040]继续参考图6,该实现确保来自各个fifo的四个梯度输出(例如,bdw1、bdw2、bdw3和bdw4)具有相同的定位索引。fp-avg块620然后计算这些梯度(例如,bdw1、bdw2、bdw3和bdw4)的平均值,以生成归约梯度(例如,dw_avg),然后该归约梯度与被缓存的权重和动量一起由godp块650处理。在该示例中,godp块650的输出可以包含两部分:新权重(nw)和新动量(nm),它们都经由存储器接口662写回存储器660。新动量值可以被提供给mfc 682,该mfc 682可以实现与先前关于图1的mfc 140描述的类似功能。因此,以此方式,经压缩的动量值可以以需要较少存储空间的存储格式被存储。[0041]此外,同时将新权重(nw)注入到发送fifo(txfifo)中,该发送fifo将新权重发送回工作器。在该示例中,控制fsm640可以控制权重经由图5的高速总线桥520流向工作器。作为示例,控制/状态寄存器630可以用于指定与各种操作相关联的时序。此外,控制/状态寄存器630还可以用于配置梯度优化器的超参数(例如,学习率)。[0042]在从相应的gfifo读出和权重更新期间,下一个梯度突发被写入相应的gfifo。类似地,在从pfifo 670读出和权重更新期间,也将下一组权重和动量从存储器660获取到pfifo 670中(例如,经由mfc 684)。由于在该示例中存储器660仅支持由读取操作和写入操作共享的单个数据端口,因此pfifo 670的数据宽度被配置为每个gfifo的数据宽度的两倍。这样,在该示例中,除了第一个数据突发和最后一个数据突发之外的所有数据突发在梯度的接收和新权重的传输之间都将有重叠。[0043]仍然参考图6,hago 600的操作的某些方面可以使用控制/状态寄存器以及控制fsm 640来控制。下面的表1示出了控制/状态寄存器630的示例内容。表1[0044]如表1所示,ctrl_opt_mode寄存器允许指定优化算法类型,优化算法类型可以是任何双动量优化算法。ctrl_burst_size寄存器允许选择与每个突发周期相关联的突发大小。在该示例中,突发大小(例如,在梯度的数目方面被指定)可以是256个梯度、512个梯度、1024个梯度、2048个梯度或4096个梯度。ctrl_param_num寄存器允许指定模型参数的大小。ctrl_init_lr寄存器允许指定模型的初始学习率。在一个示例中,初始学习率可以与模型的步长大小有关。如前所述,在一个示例中,优化算法可以是双动量adam算法,其可以由以下式子表示:vt:=β1·vt+(1-β1)·dwst:=β2·st+(1-β2)·dw2其中vt,st是两个动量,w是模型权重,dw是梯度,α是初始学习率,并且∈是用于提高数值稳定性的很小的值。ctrl_betal寄存器允许指定动量系数,该动量系数可以控制与权重更新速率相关联的加速度。ctrl_beta2寄存器允许指定第二动量系数,该第二动量系数可以进一步控制与权重更新速率相关联的加速度。如果输入梯度的格式为fp16格式,则ctrl_is_fp16寄存器被置位。尽管表1示出了作为控制/状态寄存器630的一部分被包括的特定寄存器组,但附加的或更少的寄存器可以与hago 600一起使用。此外,控制/状态寄存器630中包括的至少一些控制信息或所有控制信息可以经由与使用hago 600进行梯度优化相关的指令相关联的字段或操作数来指定。虽然图6示出了包括以特定方式布置的一定数目的部件的hago 600,但是hago 600可以包括以不同方式布置的附加的或更少的部件。例如,多于四个的工作器可以被耦合到hago 600。[0045]图7示出了根据一个示例的与图6的hago 600相关联的时序图700。时序图700在突发方面解释了hago 600的操作。时序图700示出了k+1个突发周期,其中k是正整数。第一个突发周期(突发_1)和最后一个突发周期(突发_k+1)包括比其他突发周期(突发_2至突发_k周期)少的重叠。突发_1周期包括开始从工作器传输梯度(例如,dw1)直到将梯度注入fifo(例如,图6的gfifo_1602)达到fifo的突发大小所涉及的时序(gw)。多个工作器(例如,图5的工作器_1 502、工作器_2 504和工作器_n 506)可以在突发_1周期期间将梯度注入fifo达到fifo的突发大小。突发_1周期还包括开始传递存储在存储器(例如,图6的存储器660)中的参数(例如,模型权重)直到将权重注入到图6的pfifo 670中所涉及的时序(pw)。如图7所示,权重的传递受到存储器(例如,图6的存储器660)的读取延迟(lddr)的影响。因此,在突发_1周期中,hago 600重叠了两个操作:将梯度注入fifo和从存储器获取权重。[0046]继续参考图7,突发_2周期包括开始从工作器传输下一组梯度(例如,dw1)直到将梯度注入fifo(例如,图6的gfifo_1602)达到fifo的突发大小所涉及的时序(gw)。多个工作器(例如,图5的工作器_1 502、工作器_2 504和工作器_n 506)可以在突发2周期期间将梯度注入fifo达到fifo的突发大小。当下一组梯度被注入fifo时,突发_2周期还包括计算周期,计算周期包括由fp-avg块620计算梯度的平均值以及由godp块650处理归约梯度以及被缓存的动量和被缓存的权重(bm,bw)。作为该操作的一部分所涉及的时序在图7中被标记为gpr。将从godp块650输出的新动量和新权重(nm,nw)写回存储器660所涉及的时序被标记为np。突发_2周期还包括经由txfifo 680向工作器传输新权重所涉及的时序的重叠。如图7的时序图700所示,该操作受到godp块650的处理延迟(ldp)的影响。突发_2周期还包括开始传递存储在存储器(例如,图6的存储器660)中的参数(例如,模型权重)直到将权重注入到图6的pfifo 670中所涉及的时序(pw)。如图7所示,权重的传递受到存储器(例如,图6的存储器660)的读取延迟(lddr)的影响。因此,在突发_2周期中,hago 600至少部分地重叠了作为梯度优化的一部分的四个操作:(1)将梯度注入fifo(例如,注入任何gfifo),(2)从(多个)gfifo和pfifo读出梯度和权重,(3)将新权重和新动量写回存储器,以及(4)将权重传输给工作器。[0047]仍然参考图7,控制fsm 640继续以流方式操作hago 600,使得连续的突发周期导致梯度流过hago 600。因此,突发_3周期包括梯度的附加流和多个操作的重叠,包括作为梯度优化一部分的四个操作的至少部分重叠:(1)将梯度注入fifo(例如,注入任何gfifo),(2)从(多个)gfifo和pfifo读出梯度和权重,(3)将新权重和新动量写回存储器,以及(4)将新权重传输给工作器。类似地,突发_k周期包括作为梯度优化一部分的四个操作的至少部分重叠:(1)将梯度注入fifo(例如,注入任何gfifo),(2)从(多个)gfifo和pfifo读出梯度和权重,(3)将新权重和新动量写回存储器,以及(4)将新权重传输给工作器。突发_k+1周期对应于最后一个突发周期。因此,突发_k+1周期包括比其他突发周期(突发_2至突发_k周期)少的重叠。作为突发_k+1周期的一部分,三个操作重叠,包括:(1)从(多个)gfifo和pfifo读出梯度和权重,(2)将新权重和新动量写回存储器,以及(3)将新权重传输给工作器。[0048]继续参考图7,在每个单个突发周期期间,hago 700可以对梯度突发进行操作,并且每个梯度突发可以包括固定数目的梯度。在单个突发周期期间被操作的梯度的数目对应于突发大小,该突发大小可以经由控制/状态寄存器630来配置,如先前关于图6所解释的。[0049]图8示出了根据另一示例的梯度优化系统800,该梯度优化系统800包括双动量梯度优化器(dmgo)的软件版本。在该示例中,当由处理器执行时,对应于dmgo(例如,图2的dmgo 200)的逻辑的实现可以使用存储在存储器中的指令来实现。梯度优化系统800可以包括(多个)处理器802、(多个)i/o部件804、存储器806、(多个)呈现部件808、传感器810、(多个)数据库812、网络接口814、以及(多个)i/o端口816,以上项可以经由总线820互连。(多个)处理器802可以执行存储在存储器806中的指令。(多个)i/o部件804可以包括诸如键盘、鼠标、语音识别处理器、或触摸屏的部件。存储器806可以是非易失性存储或易失性存储(例如,闪存、dram、sram或其他类型的存储器)的任何组合。对应于与dmgo相关联的方法的指令可以存储在存储器806或另一存储器中。当由(多个)处理器802或其他处理器(例如,其他cpu或gpu)执行时,这些指令可以提供与这些方法相关联的功能。作为示例,包括右移/左移指令和打包/解包指令的指令可以用于压缩或解压缩动量值。下面的表2示出了示例指令集,该指令集在由(多个)处理器802执行时可以执行对应于dmgo(例如,图2的dmgo 200)的功能。表2[0050]仍然参考图8,(多个)呈现部件808可以包括显示器、全息设备或其他呈现设备。显示器可以是任何类型的显示器,诸如lcd、led或其他类型的显示器。(多个)数据库812可以用于存储数据,如执行本文所描述的方法所需要的。(多个)数据库812可以被实现为分布式数据库的集合或单个数据库。(多个)网络接口814可以包括通信接口,诸如以太网、蜂窝无线电、蓝牙无线电、uwb无线电或其他类型的无线或有线通信接口。(多个)i/o端口816可以包括以太网端口、光纤端口、无线端口或其他通信端口。虽然图8将梯度优化系统800示出为包括以特定方式布置和耦合的一定数目的部件,但是梯度优化系统800可以包括以不同方式布置和耦合的更少的或附加的部件。此外,与系统800相关联的功能可以根据需要被分布。[0051]图9示出了根据一个示例的用于梯度优化的方法的流程图900。该方法可以使用图1的aits 100、图2的dmgo 200或图8的梯度优化系统800来执行。因此,作为示例,当dmgo 200被实现为hago 600的部分时,基于从控制fsm 640接收的控制信号,可以执行对应于该方法的步骤。此外,虽然在图6中未示出,但是时钟信号可以用于同步与作为该方法的部分执行的操作相关联的时序。备选地,存储在存储器806中的指令在由(多个)处理器802执行时可以用于执行与该方法相关联的步骤。此外,还可以使用dmgo 200和梯度优化系统800的经修改的组合。因此,作为示例,虽然可以使用存储在存储器中的指令来执行动量压缩和解压缩步骤,但是可以使用与dmgo 200相关联的硬件逻辑来执行梯度优化。步骤910可以包括:从存储器取回第一组动量值,该第一组动量值对应于神经网络模型的层,该第一组动量值具有所选择的存储格式,以及从存储器取回第二组动量值,该第二组动量值对应于神经网络模型的层,该第二组动量值具有所选择的存储格式。如前所述,存储格式可以对应于降低精度格式。[0052]步骤920可以包括:将具有所选择的存储格式的第一组动量值转换为具有与梯度优化器相关联的训练格式的第三组动量值,以及将具有所选择的存储格式的第二组动量值转换为具有与梯度优化器相关联的训练格式的第四组动量值。如前所述,该步骤可以包括通过向存储格式中的动量值填充额外的零位来解压缩动量值。所添加的额外的零位可以取决于作为压缩动量值的部分而被截断的位数。[0053]步骤930可以包括:使用梯度优化器,使用第三组动量值和第四组动量值来执行梯度优化。在与梯度优化相关联的计算之后,动量值可以转换为存储格式。如前所述,该步骤可以包括仅存储单精度格式动量值的符号位和七个最高有效位(msb)。虽然图9描述了以特定顺序执行的一定数目的步骤,但是可以以不同顺序执行附加的或更少的步骤。[0054]图10示出了根据一个示例的用于梯度优化的方法的流程图1000。该方法可以使用图1的aits 100、图2的dmgo 200或图8的梯度优化系统800来执行。因此,作为示例,当dmgo 200被实现为hago 600的部分时,基于从控制fsm 640接收的控制信号,可以执行对应于该方法的步骤。此外,虽然在图6中未示出,但是时钟信号可以用于同步与作为该方法的部分执行的操作相关联的时序。备选地,存储在存储器806中的指令在由(多个)处理器802执行时可以用于执行与该方法相关联的步骤。此外,还可以使用dmgo 200和梯度优化系统800的经修改的组合。因此,作为示例,虽然可以使用存储在存储器中的指令来执行动量压缩和解压缩步骤,但是可以使用与dmgo 200相关联的硬件逻辑来执行梯度优化。步骤1010可以包括:从存储器取回第一组动量值,该第一组动量值对应于神经网络模型的层,该第一组动量值具有所选择的存储格式,以及从存储器取回第二组动量值,该第二组动量值对应于神经网络模型的层,该第二组动量值具有所选择的存储格式。如前所述,存储格式可以对应于降低精度格式。[0055]步骤1020可以包括:将具有所选择的存储格式的第一组动量值转换为具有与梯度优化器相关联的训练格式的第三组动量值,以及将具有所选择的存储格式的第二组动量值转换为具有与梯度优化器相关联的训练格式的第四组动量值。如前所述,该步骤可以包括通过向存储格式中的动量值填充额外的零位来解压缩动量值。所添加的额外的零位可以取决于作为压缩动量值的部分而被截断的位数。如前所述,当由处理器(例如,图8的(多个)处理器802)执行时,可以使用存储在(例如,图8的存储器806)中的指令来执行该步骤。备选地,可以使用与图2的dmgo 200相关联的逻辑来执行该步骤。[0056]步骤1030可以包括:使用梯度优化器,使用第三组动量值和第四组动量值来执行梯度优化。如前所述,当由处理器(例如,图8的(多个)处理器802)执行时,可以使用存储在(例如,图8的存储器806)中的指令来执行该步骤。备选地,可以使用与图2的dmgo 200相关联的逻辑来执行该步骤。[0057]步骤1040可以包括生成用于梯度优化的下一次迭代的第五组动量值和第六组动量值。如前所述,当由处理器(例如,图8的(多个)处理器802)执行时,可以使用存储在(例如,图8的存储器806)中的指令来执行该步骤。备选地,可以使用与图2的dmgo 200相关联的逻辑来执行该步骤。[0058]步骤1050可以包括:通过仅存储符号位并截断与第五组动量值的尾数相关联的预定数目的位,将第五组动量值转换为具有存储格式的第七组动量值。如前所述,该步骤可以包括仅存储单精度格式动量值的符号位和七个最高有效位(msb)。如前所述,当由处理器(例如,图8的(多个)处理器802)执行时,可以使用存储在(例如,图8的存储器806)中的指令来执行该步骤。备选地,可以使用与图2的dmgo 200相关联的逻辑来执行该步骤。[0059]步骤1060可以包括:通过仅存储符号位并截断与第六组动量值的尾数相关联的预定数目的位,将第六组动量值转换为具有存储格式的第八组动量值。如前所述,该步骤可以包括仅存储单精度格式动量值的符号位和七个最高有效位(msb)。如前所述,当由处理器(例如,图8的(多个)处理器802)执行时,可以使用存储在(例如,图8的存储器806)中的指令来执行该步骤。备选地,可以使用与图2的dmgo 200相关联的逻辑来执行该步骤。虽然图10描述了以特定顺序执行的一定数目的步骤,但是可以以不同顺序执行附加的或更少的步骤。[0060]总之,本公开涉及一种系统中的方法,该系统包括梯度优化器和存储器,该存储器被配置为存储与包括l层的神经网络模型相关联的动量值,其中l是大于一的整数。该方法可以包括:从存储器取回第一组动量值,该第一组动量值对应于神经网络模型的层,该第一组动量值具有所选择的存储格式,以及从存储器取回第二组动量值,该第二组动量值对应于神经网络模型的层,该第二组动量值具有所选择的存储格式。该方法还可以包括:将具有所选择的存储格式的第一组动量值转换为具有与梯度优化器相关联的训练格式的第三组动量值,以及将具有所选择的存储格式的第二组动量值转换为具有与梯度优化器相关联的训练格式的第四组动量值。该方法还可以包括:使用梯度优化器,使用第三组动量值和第四组动量值来执行梯度优化。[0061]所选择的存储格式可以包括简化的单精度格式。训练格式可以包括单精度格式或双精度格式。[0062]将具有所选择的存储格式的第一组动量值转换为具有训练格式的第三组动量值包括填充额外的零位以形成单精度格式动量值。该方法可以进一步包括:生成用于梯度优化的下一次迭代的第五组动量值和第六组动量值,以及在存储第五组动量值和第六组动量值中的每一组动量值之前,通过仅存储与相应动量值中的每个动量值相关联的符号位和七个最高有效位,将第五组动量值和第六组动量值中的每一组动量值转换为存储格式。[0063]执行梯度优化的步骤包括实施自适应矩估计算法。梯度优化器可以是使用现场可编程门阵列(fpga)实现的,并且梯度优化器可以被配置为以突发模式操作,使得连续的突发周期导致梯度流过梯度优化器。[0064]在另一示例中,本公开涉及一种包括梯度优化器的系统。该系统可以包括存储器,该存储器被配置为存储与包括l层的神经网络模型相关联的动量值,其中l是大于一的整数。该系统可以被配置为:(1)从存储器取回第一组动量值,该第一组动量值对应于神经网络模型的层,该第一组动量值具有所选择的存储格式,以及从存储器取回第二组动量值,该第二组动量值对应于神经网络模型的层,该第二组动量值具有所选择的存储格式,(2)将具有所选择的存储格式的第一组动量值转换为具有与梯度优化器相关联的训练格式的第三组动量值,以及将具有所选择的存储格式的第二组动量值转换为具有与梯度优化器相关联的训练格式的第四组动量值,以及(3)使用梯度优化器,使用第三组动量值和第四组动量值来执行梯度优化。[0065]所选择的存储格式可以包括简化的单精度格式。训练格式可以包括单精度格式或双精度格式。[0066]该系统还可以被配置为填充额外的零位以形成单精度格式动量值或双精度格式动量值。该系统还可以被配置为:生成用于梯度优化的下一次迭代的第五组动量值和第六组动量值,以及在存储第五组动量值和第六组动量值中的每一组动量值之前,通过仅存储与相应动量值中的每个动量值相关联的符号位和七个最高有效位,将第五组动量值和第六组动量值中的每一组动量值转换为存储格式。[0067]该系统可以被配置为实施自适应矩估计算法。梯度优化器可以是使用现场可编程门阵列(fpga)实现的,并且梯度优化器可以被配置为以突发模式操作,使得连续的突发周期导致梯度流过梯度优化器。[0068]在又一示例中,本公开涉及一种系统中的方法,该系统包括梯度优化器和存储器,该存储器被配置为存储与包括l层的神经网络模型相关联的权重和动量值,其中l是大于一的整数。该方法还可以包括:从存储器取回第一组动量值,该第一组动量值对应于神经网络模型的层,该第一组动量值具有所选择的存储格式,以及从存储器取回第二组动量值,该第二组动量值对应于神经网络模型的层,该第二组动量值具有所选择的存储格式。该方法还可以包括:将具有所选择的存储格式的第一组动量值转换为具有与梯度优化器相关联的训练格式的第三组动量值,以及将具有所选择的存储格式的第二组动量值转换为具有与梯度优化器相关联的训练格式的第四组动量值。该方法还可以包括:使用梯度优化器,使用第三组动量值和第四组动量值来执行梯度优化。该方法还可以包括:生成用于梯度优化的下一次迭代的第五组动量值和第六组动量值。该方法还可包括:通过仅存储符号位并截断与第五组动量值的尾数相关联的预定数目的位,将第五组动量值转换为具有存储格式的第七组动量值。该方法还可以包括:通过仅存储符号位并截断与第六组动量值的尾数相关联的预定数目的位,将第六组动量值转换为具有存储格式的第八组动量值。[0069]所选择的存储格式可以包括简化的单精度格式。训练格式可以包括单精度格式或双精度格式。在该方法中,执行梯度优化的步骤可以包括实施自适应矩估计算法。[0070]训练格式可以包括32位浮点格式,并且存储格式可以包括8位浮点格式。梯度优化器可以是使用现场可编程门阵列(fpga)实现的,并且梯度优化器可以被配置为以突发模式操作,使得连续的突发周期导致梯度流过梯度优化器。[0071]应当理解,本文中描述的方法、模块和部件仅仅是示例性的。备选地或附加地,本文中描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,但不限于,可以使用的硬件逻辑部件的说明性类型包括现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、片上系统系统(soc)、复杂可编程逻辑器件(cpld)等。在抽象但仍然明确的意义上,实现相同功能的任何部件布置都有效地“关联”,从而实现所需的功能。因此,本文中被组合以实现特定功能的任何两个部件可以被视为彼此“关联”,从而实现期望的功能,而与架构或中间部件无关。同样,如此关联的任何两个部件也可以被视为彼此“可操作地连接”或“耦合”以实现期望的功能。[0072]与本公开中描述的一些示例相关联的功能还可以包括存储在非暂态介质中的指令。如本文所用,术语“非暂态介质”是指存储使机器以特定方式操作的数据和/或指令的任何介质。示例性非暂态介质包括非易失性介质和/或易失性介质。非易失性介质包括例如硬盘、固态驱动器、磁盘或磁带、光盘或光学磁带、闪存、eprom、nvram、pram或其他这样的介质、或这样的介质的网络版本。易失性介质包括例如动态存储器,诸如dram、sram、高速缓存或其他这样的介质。非暂态介质不同于传输介质,但可以与传输介质结合使用。传输介质用于将数据和/或指令传递到机器或从机器传递数据和/或指令。示例性传输介质包括同轴电缆、光纤电缆、铜线和无线介质,诸如无线电波。[0073]此外,本领域技术人员将认识到上述操作的功能之间的界限仅仅是说明性的。多个操作的功能可以组合成单个操作,和/或单个操作的功能可以分布在附加操作中。此外,备选实施例可以包括特定操作的多个实例,并且可以在各种其他实施例中改变操作的顺序。[0074]尽管本公开提供了具体示例,但是可以做出各种修改和改变而不背离如以下权利要求中阐述的本公开的范围。因此,说明书和附图应当以说明性而非限制性意义看待,并且所有这样的修改旨在被包括在本公开的范围内。本文针对特定示例描述的任何益处、优点或问题的解决方案不旨在被解释为任何或所有权利要求的关键的、必需的或基本的特征或元素。[0075]此外,如本文所用的术语“一”或“一个”被定义为一个或一个以上。此外,在权利要求中使用诸如“至少一个”和“一个或多个”这样的介绍性短语不应解释为暗示通过不定冠词“一”或“一个”引入另一个权利要求元素会限制任何特定的包含这样被引入的权利要求元素的权利要求适用于仅包含一个这样的元素的发明,即使同一权利要求包括介绍性短语“一个或多个”或“至少一个”和诸如“一”或“一个”的不定冠词。定冠词的使用也是如此。[0076]除非另有说明,否则使用诸如“第一”和“第二”等的术语来任意区分这些术语所描述的元素。因此,这些术语不一定旨在指示这些元素的时间优先级或其他优先级。









图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!




内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,发布内容不收取任何费用也不接任何广告!




免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

相关内容 查看全部