CN111061513B - 加速计算设备建模的方法、电子设备及可读存储介质 - Google Patents
加速计算设备建模的方法、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN111061513B CN111061513B CN201911328867.9A CN201911328867A CN111061513B CN 111061513 B CN111061513 B CN 111061513B CN 201911328867 A CN201911328867 A CN 201911328867A CN 111061513 B CN111061513 B CN 111061513B
- Authority
- CN
- China
- Prior art keywords
- vector
- multiply
- add
- instruction
- instructions
- 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
- 238000000034 method Methods 0.000 title claims abstract description 180
- 239000013598 vector Substances 0.000 claims abstract description 761
- 238000012549 training Methods 0.000 claims abstract description 347
- 238000012545 processing Methods 0.000 claims abstract description 106
- 238000004364 calculation method Methods 0.000 claims description 52
- 230000006870 function Effects 0.000 claims description 45
- 238000010801 machine learning Methods 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 12
- 238000009825 accumulation Methods 0.000 claims description 9
- 238000000638 solvent extraction Methods 0.000 claims description 5
- 230000000875 corresponding effect Effects 0.000 description 46
- 238000010586 diagram Methods 0.000 description 9
- 238000012417 linear regression Methods 0.000 description 6
- 238000007477 logistic regression Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000013473 artificial intelligence Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Advance Control (AREA)
Abstract
本说明书实施例公开了一种加速计算设备建模的方法,通过在目标模型的模型训练过程中,对每个训练样本各自的特征数据以及目标模型的学习参数进行向量划分,实现对特征数据以及学习参数的向量化,然后,利用每次连续输入CPU的指令流水线中的多个向量浮点乘加指令,对所述参数向量序列以及所述特征向量序列进行乘加处理,得到训练样本的目标值;进而,完成目标模型的模型训练。例如,在个性化推荐场景下,上述特征数据可以是用户的个人信息,如用户画像信息和用户隐私数据等。
Description
技术领域
本说明书实施例涉及计算机处理技术领域,尤其涉及一种加速计算设备建模的方法、电子设备及可读存储介质。
背景技术
随着计算机技术的发展,人工智能(Artificial Intelligence,AI)的使用已经越来越广泛,能够较成熟地应用在各种场景如安防场景、金融场景、个性化推荐场景等。要构建一个AI模型,需要先经过模型训练,然后通过模型测试后,才能投入使用。其中,模型训练是决定模型性能的关键。为了保证模型的泛化性,通常都需要利用大量的样本数据,对模型进行训练,这样也就使得模型训练的计算量非常庞大。
发明内容
本说明书实施例提供了一种加速计算设备建模的方法、电子设备及可读存储介质,减少建模消耗的时间,提高建模效率。
本说明书实施例第一方面提供了一种加速计算设备建模的方法,应用于包含CPU的计算设备中,包括:
在目标模型的训练过程中,分别对每个训练样本各自的特征数据以及所述目标模型的学习参数进行向量划分,得到每个训练样本各自的特征向量序列以及所述学习参数的参数向量序列;
针对每轮迭代训练过程中的训练样本,利用每次连续输入所述CPU的指令流水线中的多个向量浮点乘加指令,对所述参数向量序列以及所述特征向量序列进行乘加处理,得到训练样本的目标值,其中,所述每次连续输入的多个向量浮点乘加指令的指令数,均不大于所述CPU在模型训练过程中执行向量浮点乘加指令的最大指令数,所述每次连续输入的多个向量浮点乘加指令对应的任意两个指令数据均具有非相关性;
基于每轮迭代训练过程中每个训练样本的目标值,得到经训练的目标模型。
本说明书实施例第二方面提供了一种加速计算设备建模的装置,包括:
向量划分单元,用于在目标模型的训练过程中,分别对每个训练样本各自的特征数据以及所述目标模型的学习参数进行向量划分,得到每个训练样本各自的特征向量序列以及所述学习参数的参数向量序列,其中,所述目标模型为线性机器学习模型;
乘加单元,用于针对每轮迭代训练过程中的训练样本,利用每次连续输入所述CPU的指令流水线中的多个向量浮点乘加指令,对所述参数向量序列以及所述特征向量序列进行乘加处理,得到训练样本的目标值,其中,所述每次连续输入的多个向量浮点乘加指令的指令数,均不大于所述CPU在模型训练过程中执行向量浮点乘加指令的最大指令数,所述每次连续输入的多个向量浮点乘加指令对应的任意两个指令数据均具有非相关性;
模型确定单元,用于基于每轮迭代训练过程中每个训练样本的目标值,得到经训练的目标模型。
本说明书实施例第三方面还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述加速计算设备建模的方法的步骤。
本说明书实施例第四方面还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时上述加速计算设备建模的方法的步骤。
本说明书实施例的有益效果如下:
基于上述技术方案,先通过将特征数据以及模型参数向量化,然后通过调用一次向量浮点乘加指令,就可以完成模型训练过程中的多个乘加计算,极大地减少了单独调用乘法指令和加法指令的次数,即极大地减少了模型训练过程所需要的计算指令数,能够有效地提高计算设备的建模速度,减少建模消耗的时间,提高建模效率,有利于在保证模型性能的同时使得模型快速投入使用,并且极大地降低了建模过程对计算设备中计算资源的占用,优化了计算设备的内部资源管理,使得计算设备能够处理更多的计算任务,从而提高处理效率。
而且,由于每次输入所述CPU的指令流水线中的向量浮点乘加指令为多个,且所述多个向量浮点乘加指令的指令数不大于所述CPU在模型训练过程中执行指令的最大指令数,以及每次连续输入的多个向量浮点乘加指令对应的任意两个指令数据均具有非相关性,如此,针对每次连续输入的多个向量浮点乘加指令,可以根据CPU具有的超标量特性和指令流水性特性,使得每个CPU时钟周期可以执行一个向量浮点乘加指令,从而能够有效提高在单位时间内CPU执行的向量浮点乘加指令的指令数量,在单位时间内执行向量浮点乘加指令的指令数量提高的基础上,能够有效提高所述目标模型的训练效率。
附图说明
图1为本说明书实施例中加速计算设备建模的方法流程图;
图2为本说明书实施例中确定出最大指令数的方法流程图;
图3为本说明书实施例中加速计算设备建模的装置的结构示意图;
图4为本说明书实施例中电子设备的结构示意图。
具体实施方式
为了更好的理解上述技术方案,下面通过附图以及具体实施例对本说明书实施例的技术方案做详细的说明,应当理解本说明书实施例以及实施例中的具体特征是对本说明书实施例技术方案的详细的说明,而不是对本说明书技术方案的限定,在不冲突的情况下,本说明书实施例以及实施例中的技术特征可以相互组合。
本说明书实施例中,向量浮点乘加指令是一种可以对向量中所有对应元素(单精度浮点数或双精度浮点数)完成一个浮点数乘法,并对乘法结果再完成一个浮点数加法的指令。举例来讲,如一种向量浮点乘加指令VFMADD(Vector Fused Multiply Add),向量长度为N,一条指令R=VFMADD(A,B,C)就可以对向量A,B,C的n个元素计算得到向量R,具体计算:ri=ai·bi+ci,其中,0≤i<M-1,ai,bi,ci,ri分别对应为向量A,B,C,R中的第i维元素。
需要说明的是,本说明书实施例对具体使用的向量浮点乘加指令不做限制,具体根据执行模型训练的电子设备支持的向量浮点乘加指令确定,如可以是采用Intel的vfmad指令或ARM的vmla指令,也可以是其他能够实现上述功能的向量浮点乘加指令。
在线性机器学习模型如线性回归或逻辑回归的训练过程中,存在两种主要耗时计算,一是假设函数(Hypothesis function)hθ(X)的求解,其中,θ表示模型参数,X表示特征向量,二是梯度下降过程中,更新的模型参数θ′的计算。本申请说明书实施例提供了一种加速建模的方法,通过在目标模型的训练过程中,分别对每个训练样本各自的特征向量以及目标模型的学习参数进行向量划分,得到每个训练样本各自的特征向量序列以及学习参数的参数向量序列,其中,目标模型为线性机器学习模型;然后,针对每轮迭代训练过程中的训练样本,利用每次连续输入CPU的指令流水线中的多个向量浮点乘加指令,对参数向量序列以及特征向量序列进行乘加处理,得到训练样本的目标值;接着,基于每轮迭代训练过程中的训练样本的目标值,得到经训练的目标模型。
如此,先通过将特征数据以及模型参数向量化,然后通过调用一次向量浮点乘加指令,就可以完成模型训练过程中的多个乘加计算,极大地减少了单独调用乘法指令和加法指令的次数,即极大地减少了模型训练过程所需要的计算指令数,能够有效地提高计算设备的建模速度,减少建模消耗的时间,提高建模效率,有利于在保证模型性能的同时使得模型快速投入使用,并且极大地降低了建模过程对计算设备中计算资源的占用,优化了计算设备的内部资源管理,使得计算设备能够处理更多的计算任务,从而提高处理效率。
而且,由于每次输入CPU的指令流水线中的向量浮点乘加指令为多个,且多个向量浮点乘加指令的指令数不大于CPU在模型训练过程中执行指令的最大指令数,每次连续输入的多个向量浮点乘加指令对应的任意两个指令数据均具有非相关性,如此,针对每次连续输入的多个向量浮点乘加指令,若多个向量浮点乘加指令的指令数大于指令流水线的流水线长,则指令流水线可以满载,在满载的指令流水线中每执行一个指令之后,可以将多个向量浮点乘加指令中的剩余指令依次输入到指令流水线中,直至多个向量浮点乘加指令执行完,此时,在执行多个向量浮点乘加指令时每个CPU时钟周期可执行一个指令;若多个向量浮点乘加指令的指令数不大于流水线长,则将多个向量浮点乘加指令都输入到指令流水线中执行,相应的,在执行多个向量浮点乘加指令时每个CPU时钟周期可执行一个指令;如此,针对每次连续输入的多个向量浮点乘加指令,使得每个CPU时钟周期可以执行一个向量浮点乘加指令,从而能够有效提高在单位时间内CPU执行的向量浮点乘加指令的指令数量,在单位时间内执行向量浮点乘加指令的指令数量提高的基础上,能够有效提高目标模型的训练效率。
第一方面,如图1所示,本说明书实施例提供一种加速计算设备建模的方法,应用于包含CPU的计算设备中,包括:
S102、在目标模型的训练过程中,分别对每个训练样本各自的特征数据以及目标模型的学习参数进行向量划分,得到每个训练样本各自的特征向量序列以及学习参数的参数向量序列;
S104、针对每轮迭代训练过程中的训练样本,利用每次连续输入CPU的指令流水线中的多个向量浮点乘加指令,对参数向量序列以及特征向量序列进行乘加处理,得到训练样本的目标值,其中,每次连续输入的多个向量浮点乘加指令的指令数,均不大于CPU在模型训练过程中执行向量浮点乘加指令的最大指令数,每次连续输入的多个向量浮点乘加指令对应的任意两个指令数据均具有非相关性;
S106、基于每轮迭代训练过程中训练样本的目标值,得到经训练的目标模型。
本说明书实施例中,计算设备可以为台式电脑、笔记本电脑、平板电脑、智能手机和一体机等设备;进一步的,中央处理器(centra l process i ng un it,简称:CPU),具体用于解释计算机CPU指令以及处理计算机软件中的数据。CPU是计算机中负责读取CPU指令,对CPU指令译码并执行CPU指令的核心部件。
本说明书实施例中,针对每次连续输入的多个向量浮点乘加指令,若多个向量浮点乘加指令的指令数大于指令流水线的流水线长,则指令流水线可以满载,在满载的指令流水线中每执行一个指令之后,可以将多个向量浮点乘加指令中的剩余指令依次输入到指令流水线中,直至多个向量浮点乘加指令执行完,此时,在执行多个向量浮点乘加指令时每个CPU时钟周期可执行一个指令;若多个向量浮点乘加指令的指令数不大于流水线长,则将多个向量浮点乘加指令都输入到指令流水线中执行。
例如,某次连续输入的5个向量浮点乘加指令,流水线长为4,此时,先将4个向量浮点乘加指令输入到指令流水线中,使得指令流水线满载;以及在指令流水线中的第一个指令执行完时,将剩余的1个向量浮点乘加指令输入到指令流水线中,然后依次执行输入到指令流水线中的4个向量浮点乘加指令,从而使得在执行该次连续输入的5个向量浮点乘加指令过程中,每个CPU时钟周期执行一个向量浮点乘加指令。以及若流水线长为6,则先将5个向量浮点乘加指令都输入到指令流水线中,然后依次执行输入到指令流水线中的5个向量浮点乘加指令,从而使得在执行该次连续输入的5个向量浮点乘加指令过程中,每个CPU时钟周期执行一个向量浮点乘加指令。
本说明书实施例中,目标模型可以是线性回归模型或逻辑回归模型等线性机器模型。然,在本说明书其他实施例中,目标模型也可以是其他适用的机器学习模型,例如,假设函数计算中包含对θTX的计算的机器学习模型。可以理解的是,线性机器学习模型即假设函数为hθ(X)~θTX的机器学习模型中,目标模型中模型参数的个数与训练样本的特征数据包括的特征个数与学习参数的个数相同。为了执行后续的向量浮点乘加指令,向量划分处理后,得到的特征向量序列中的特征向量个数与参数向量序列中包括的参数向量个数相同,且每个特征向量的维数与每个参数向量的维数均相同。
在实际应用中,训练样本以及训练样本的特征数据根据目标模型的应用场景确定。例如,若目标模型应用于预测用户的信用分数,则训练样本可以是用户,特征数据可以包括用户的个人信息,如用户画像信息和用户隐私数据,其中用户隐私数据包括支付信息以及还款信息等。目标模型应用于预测用户的支付能力,则训练样本可以是用户,特征数据可以包括用户的资产信息,如工资信息、财产信息和贷款信息等。当然,除此之外,目标模型还可以应用与其他线性机器学习模型适用的应用场景,此处不作过多举例。
下面先对步骤S102进行详细说明。
具体实施过程中,在进行向量划分之前,需要先确定划分的每个向量的向量维数,进而就可以按照该向量维数来分别对特征数据以及学习参数进行向量划分。需要说明的是,划分得到的特征向量以及参数向量的向量维数应均与预设的向量浮点乘加指令支持的向量维数一致。因此,在一种可选的实施例中,上述分别对模型参数以及每个训练样本各自的特征数据以及目标模型的学习参数进行向量划分的实施过程可以包括:获取向量浮点乘加指令支持的向量维数;基于该向量维数,分别对模型参数进行向量划分,得到m个n维参数向量,组成参数向量序列,以及对每个训练样本各自的特征数据进行向量划分,得到m个n维特征向量,组成特征向量序列,以及对目标模型的学习参数进行向量划分,得到m个n维参数向量,组成参数向量序列。其中,m为大于或等于1的整数,n为大于或等于2的整数。
具体来讲,在一种应用场景中,若特征数据包含的特征数量大于预设的向量浮点乘加指令支持的向量维数n,向量划分个数大于或等于2,即m大于或等于2。此时,上述基于向量维数n,分别对模型参数进行向量划分,得到m个n维参数向量,以及对每个训练样本各自的特征数据进行向量划分,得到m个n维特征向量的实施过程可以包括:基于上述向量浮点乘加指令支持的向量维数n以及上述特征数量,确定向量划分个数m;按照所确定的向量划分个数m以及上述向量维数n,构建m个n维第一初始向量以及m个n维第二初始向量;按照预设顺序将模型参数依次赋值给所构建的m个第一初始向量中的元素,得到m个n维参数向量,并按照上述预设顺序将上述特征数据包含的特征依次赋值给所构建的m个第二初始向量中的元素,得到m个n维特征向量。需要说明的是,模型参数和特征数据的向量划分方式相同,即按照相同的预设顺序依次进行赋值。
另外,在向量划分过程中,特征数据中的一个特征,被划分到一个特征向量中,同一特征向量中以及不同特征向量中包含的特征均不同,同理,一个模型参数被划分的一个参数向量中,同一参数向量中以及不同参数向量中包含的模型参数均不同
并且,在上述向量划分过程中,若存在特征向量和参数向量中的元素个数不满,即存在一个划分的特征向量包含的特征个数小于预设的向量浮点乘加指令支持的向量维数,以及存在一个参数向量包含的模型参数个数小于预设的向量浮点乘加指令支持的向量维数,则将该特征向量以及该参数向量中不满的元素赋值为预设值。以上述示例为例,其中一个特征向量只能包含3个特征,不满向量浮点乘加指令支持的向量维数,即不满5个时,则需要将该特征向量中其他两个元素赋值为预设值。同理,对模型参数的向量划分也是如此。其中,预设值根据具体计算的目标值设置,例如,在目标值为假设函数值时,预设值可以是0,在目标值为梯度下降过程中的模型参数值时,预设值可以是0或者是其他指定的值。
还需要说明的是,在上述向量划分过程中,划分顺序即上述预设顺序不限,具体根据实际需要设置,满足任何一个特征不被重复分到多个特征向量以及任何一个模型参数不被重复分到多个特征向量即可。
举例来讲,假设特征数据包含的特征个数为18,分别表示为x0至x17,则模型参数的个数也为18,分别表示为θ0至θ17,假设预设的向量浮点乘加指令支持的向量维数为5,则可以将特征数据包含的特征划分为4个特征向量。具体来讲,可以从x0开始按照自前向后的顺序将特征数据划分为四个特征向量,即将x0至x4划分到特征向量序列的第一个特征向量中,将x5至x9划分到特征向量序列的第二个特征向量中,将x10至x14划分到特征向量序列的第三个特征向量中,将x15至x17划分到特征向量序列的第四个特征向量中,并将第四个特征向量中不足的两个元素赋值为预设值,相应地,也按照同样的方式将模型参数划分为4个参数向量。或者,也可以反过来从x17开始按照自后向前的顺序将特征数据划分为四个特征向量,相应地,也按照同样的方式将模型参数划分为4个参数向量。又或者,还可以按照其他顺序,如将x0、x2、x4、x6、x8划分到特征向量序列的第一个特征向量中,将x10、x12、x14、x16、x1划分到特征向量序列的第二个特征向量中,将x3、x5、x7、x9、x11划分到特征向量序列的第三个特征向量中,将x13、x15、x17划分到特征向量序列的第四个特征向量中,并按照同样的顺序对模型参数进行向量划分。
另外,在一种应用场景中,若特征数据包含的特征个数小于或等于预设的向量浮点乘加指令支持的向量维数,则特征向量序列和参数向量序列中均包含一个向量。在特征数据包含的特征个数小于向量浮点乘加指令支持的向量维数时,如特征数据包含的特征个数为6,向量浮点乘加指令支持的向量维数为10时,则需要赋值不满的4个元素为预设值;而在特征数据包含的特征个数等于向量浮点乘加指令支持的向量维数时,则可以将特征数据包含的特征均划分为一个特征向量。同理,对学习参数的向量划分也是如此。
在具体实施过程中,假设训练样本的特征数据包含的特征数量为DIM,支持的向量浮点乘加指令对应的向量维数为n。可以理解的是,DIM只是一种特征数量的变量表示示例,也可以用其他常用来表示数量的变量名称代替,如M、N等。在一种实施方式中,可以通过以下公式:
m=[(DIM+n-1)/n]
确定特征向量以及参数向量的划分个数。也就是说,将特征数量DIM加上向量维度n且减1后得到的值,除以向量维度n后取整,得到向量划分个数m。举例来讲,假设n为3,DIM为10,则m=4。或者,在本说明书其他实施例中,也可以将DIM/n取整后再加1,得到特征向量以及参数向量的划分个数。
可选的,在执行步骤S102的同时或之后,还执行确定最大指令数的相关步骤:获取CPU的指令流水线数据、超标量数据和浮点寄存器数据;再根据CPU的指令流水线数据、超标量数据和浮点寄存器数据,确定出最大指令数。
具体来讲,可以首先获取CPU的配置数据;对CPU的配置数据进行分析,进而获取到CPU的指令流水线流水线长、CPU的内核包含的向量浮点乘加计算单元的浮点浮点计算单元数量和CPU的浮点寄存器数据,其中,流水线长作为指令流水线数据,CPU的浮点浮点计算单元数量作为超标量数据,浮点寄存器数量作为浮点寄存器数据。
例如,以目标模型为线性回归模型hθ(X)为例,首先获取服务器a1包含的CPU的配置数据,其中,a1用于对hθ(X)进行模型训练;然后对a1包含的CPU的配置数据进行解析,得到CPU中指令流水线的流水线长为5,CPU中每个内核包含2个向量浮点乘加计算单元,CPU中的浮点寄存器数量为24。
在具体实施过程中,如图2所示,在获取到CPU的指令流水线数据、超标量数据和浮点寄存器数据之后,确定出最大指令数的具体实现步骤包括:
步骤S202、根据目标模型的当前计算参数和浮点寄存器数据,确定出CPU通过浮点寄存器进行连续指令执行的浮点最大指令数。
具体来讲,根据当前计算参数和浮点寄存器数量,确定出浮点最大指令数。
本说明书实施例中,浮点寄存器可以包括标量寄存器和向量寄存器,CPU中的浮点寄存器有数量限制。例如Intel支持AVX2CPU指令集的CPU只有16个256比特向量寄存器(YMM寄存器)
具体地,CPU指令的源操作数和目的操作数可能限定为浮点寄存器,例如IntelCPU指令,除了MOV等少数CPU指令,大部分CPU指令的目的操作数都必须是浮点寄存器。如果,CPU指令的3操作数包括2个源操作数和1个目的操作数,此时,最多只允许1个源操作数是内存地址,另1个源操作数必须是浮点寄存器。
以及,CUP指令中的向量浮点数乘加指令一般是3操作数,1个目的操作数及至少有1个源操作数必须是浮点寄存器;由于每条CPU指令的操作数都会占用一个或多个浮点寄存器,而CPU的浮点寄存器的数量是有限的;在CPU的浮点寄存器的数量是有限的情况下,会促使内核通过指令流水线执行指令的内核最大指令数会受限于浮点寄存器数量。
具体地,对于向量浮点数乘加指令,设一个内核(如果支持超线程则是一个超线程)有K个向量寄存器,在执行一串连续的向量浮点数乘加指令过程中;若各向量浮点数乘加指令的2个源操作数都是变化的,则一条向量浮点数乘加指令需要2个向量寄存器,此时,一个内核通过K个浮点寄存器进行连续指令执行的浮点最大指令数为K/2,即一个内核通过K个浮点寄存器最多连续执行K/2个向量浮点数乘加指令,其中,K/2个向量浮点数乘加指令对应的任意两个指令数据具有非相关性,K为不小于1的整数。
此时,在CPU具有多个内核时,由于每个内核能够复用浮点寄存器,而此时CPU的浮点寄存器的数量不变,会促使每个内核能够连续执行K/2个向量浮点数乘加指令;而此时CPU具有多个内核,而每个内核在连续执行K/2个向量浮点数乘加指令过程中能够在每个CPU时钟周期执行一个指令,从而使得多个内核会在一个CPU时钟周期内执行多个指令。例如CPU有4个内核,每个内核能够连续执行6/2个向量浮点数乘加指令,此时,使得在每个内核在连续执行3个向量浮点数乘加指令过程中,4个内核在一个CPU时钟周期内可以执行4个指令。
以及,若各向量浮点数乘加指令的2个源操作数有一个是不变的,则一条向量浮点数乘加指令也需要2个向量寄存器,其中一个是公用寄存器(不变的源操作数),另外一个属于该条向量浮点数乘加指令的私有寄存器;相应地,其它每条向量浮点数乘加指令可以共用共用寄存器,还可以有一个属于自身的私有寄存器;此时,一个内核通过K个浮点寄存器进行连续指令执行的浮点最大指令数为K-1,即一个内核通过K个浮点寄存器最多连续执行K-1个向量浮点数乘加指令,其中,K-1个向量浮点数乘加指令对应的任意两个指令数据具有非相关性。
此时,在CPU具有多个内核时,由于每个内核能够复用浮点寄存器,而此时CPU的浮点寄存器的数量不变,会促使每个内核能够连续执行K-1个向量浮点数乘加指令;而此时CPU具有多个内核,而每个内核在连续执行K-1个向量浮点数乘加指令过程中能够在每个CPU时钟周期执行一个指令,而多个内核会在一个CPU时钟周期内执行多个指令。例如CPU有4个内核,每个内核能够连续执行5个向量浮点数乘加指令,此时,使得在每个内核在连续执行5个向量浮点数乘加指令过程中,4个内核在一个CPU时钟周期内可以执行4个指令。
步骤S204、根据指令流水线数据和超标量数据,确定出CPU的内核通过指令流水线连续执行CPU指令的内核最大指令数。
具体来讲,根据流水线长和内核的浮点浮点计算单元数量,确定出内核最大指令数,此时,内核最大指令数为流水线长和浮点浮点计算单元数量的乘积。
本说明书实施例中,CPU中的指令流水线是将某些CPU指令的执行分为若干阶段,每个阶段耗时一个CPU时钟周期,在一条CPU指令进入指令流水线后执行一个CPU时钟周期后,下一条CPU指令可进入指令流水线,再执行一个CPU时钟周期可再使一条CPU指令进入指令流水线。当指令流水线满载时,可每个CPU时钟周期完成一条CPU指令的执行。
本说明书实施例中,由于CPU指令是通过指令流水线执行的,特别是向量CPU指令;例如在前一条CPU指令的流水线长为P时,其中,P为不小于1的整数;此时,若其后一条CPU指令所需参数包含前一条CPU指令的运行结果,则后一条CPU指令要等前一条CPU指令执行完才能执行,此时,在P个CPU时钟周期内只能完成这一条CPU指令;且由于其后一条CPU指令所需参数包含前一条CPU指令的运行结果,使得前一条CPU指令对应的指令数据和后一条指令对应的指令数据具有相关性,即前一条CPU指令对应的指令数据和后一条指令对应的指令数据相关。
其中,若其后一条CPU指令所需参数与前一条CPU指令的运行结果无关,则在前一条CPU指令运行一个CPU时钟周期后,其后一条CPU指令就可进入指令流水线,则在每个CPU时钟周期内能完成1条CPU指令。此时,由于其后一条CPU指令所需参数与前一条CPU指令的运行结果无关,使得前一条CPU指令对应的指令数据和后一条指令对应的指令数据具有非相关性。
以及,若有一串CPU指令,任意连续P个CPU指令对应的任意两个指令数据均具有非相关性,即后一条CPU指令所需参数不依赖其之前任意一条CPU指令的运行结果,则每个CPU时钟周期都可有一条CPU指令进入指令流水线,使CPU指令吞吐量达到每个CPU时钟周期完成一条CPU指令;如此,使得CPU具有指令流水性特性,即若流水线长为P且任意P个CPU指令对应的任意两个指令数据均具有非相关性,则指令流水线在每个CPU时钟周期完成一条CPU指令。
本说明书实施例中,CPU具有超标量特性,即CPU能够在一个CPU时钟周期内可以执行一条以上的CPU指令;CPU可以具有一个或多个内核,每个内核均可以包含有多个向量浮点乘加计算单元,每个向量浮点乘加计算单元能同时接收和执行CPU指令。例如G4930、G5400和G4560型号的CPU均具有2个内核,AQD锐龙7-2700X型号的CPU具有8个内核,且每个内核中有两个向量浮点乘加计算单元。
例如,若每个内核有Q个向量浮点乘加计算单元,指令流水线的流水线长为P,有一个向量浮点乘加指令序列,若存在连续P×Q个向量浮点乘加指令,且P×Q个向量浮点乘加指令对应的任意两个指令数据具有非相关性,可使每个内核在一个CPU时钟周期内完成Q个向量浮点乘加指令,以及每个核的最大连续执行指令为P×Q个向量浮点乘加指令,即每个内核通过指令流水线的内核最大指令数为P×Q,其中,P和Q均为不小于1的整数。
步骤S206、比对浮点最大指令数和内核最大指令数,将对比出的较小数作为最大指令数。
本说明书实施例中,由于浮点最大指令数是根据当前计算参数和浮点寄存器数量确定的,使得在通过步骤S206对比出浮点最大指令数为最大指令数时,若当前计算参数发生变化,可能会促使最大指令数也会随之发生变化。
而且,由于CPU具有指令流水线特性和CPU的超标量特性,使得每个内核通过指令流水线的内核最大指令数还会受限于流水线长和每个内核包含的浮点计算单元数量;如此,使得每个内核通过指令流水线的内核最大指令数不仅受限于浮点寄存器数量,还会受限于流水线长和每个内核包含的浮点计算单元数量。
例如,若每个内核有Q个向量浮点乘加计算单元,指令流水线的流水线长为P,有一个向量浮点乘加指令序列,只要达到任意连续P×Q个CPU指令之间数据无关,可使每个内核在一个CPU时钟周期内完成Q个向量浮点乘加指令,即每个内核通过指令流水线最多连续执行P×Q个向量浮点乘加指令,即内核最大指令数为P×Q,其中,P和Q均为不小于1的整数;
相应地,获取目标模型的当前计算参数,若当前计算参数为假设函数hθ(X),由于hθ(X)对应的2个源操作数均是变化的,且CPU具有K个浮点寄存器,则可以确定每个内核通过K个浮点寄存器最多连续执行K/2个向量浮点数乘加指令,即浮点最大指令数为K/2。然后,将P×Q与K/2进行比对,若(P×Q)<K/2,则确定P×Q为最大指令数;若(P×Q)>K/2,则确定K/2为最大指令数;若(P×Q)=K-1,则可以将P×Q或k-1作为最大指令数。
此时,在K/2为最大指令数时,对K/2取整,将K/2取整后的值作为最大指令数;具体地,若K/2为整数,则判定K/2为最大指令数;若K/2不为整数,则确定(K-1)/2为最大指令数。
另外,若当前计算参数为梯度下降更新参数,由于梯度下降更新参数对应的2个源操作数中存在一个操作数是不变的,且CPU具有K个浮点寄存器,则可以确定每个内核通过K个浮点寄存器最多连续执行K-1个向量浮点数乘加指令,即浮点最大指令数为K-1。然后,将P×Q与K-1进行比对,若(P×Q)<K-1,则确定P×Q为最大指令数;若(P×Q)>k-1,则确定K/2为最大指令数;若(P×Q)=K-1,则可以将P×Q或k-1作为最大指令数。
可以理解的是,目标模型的训练过程包括多轮迭代训练,完成训练样本的特征数据以及模型参数的向量划分后,就可以执行以下步骤:
步骤A、针对每轮迭代训练过程中的训练样本,调用预设的向量浮点乘加指令,对参数向量序列以及特征向量序列进行乘加处理,得到训练样本的目标值。
可以理解的是,目标值为即为迭代训练过程中,需要基于训练样本的特征数据以及模型参数,进行乘加处理得到的值。举例来讲,目标值可以是假设函数hθ(X)的计算值,和/或更新参数θ′的计算值。可以理解的是,线性机器学习模型中假设函数hθ(X)的计算包含对θTX的计算,该计算值可以基于对参数向量序列以及特征向量序列进行乘加处理的结果得到,具体过程将在下文中进行描述。
本说明书实施例中,目标值为即为迭代训练过程中,需要基于训练样本的特征数据以及学习参数,进行乘加处理得到的值。举例来讲,目标值可以是假设函数hθ(X)的计算值,和/或梯度下降更新参数θ′的计算值。可以理解的是,线性机器学习模型中假设函数hθ(X)的计算包含对θTX的计算,该计算值可以基于对参数向量序列以及特征向量序列进行乘加处理的结果得到,具体过程将在下文中进行描述。
例如,一种示例性线性回归模型的假设函数为:hθ(X)=θTX,一种示例性逻辑回归模型的假设函数为:又例如,在一种应用场景中,可以通过:计算梯度下降更新参数θ′,其中,α为学习率,NUM为每轮迭代的样本数,Y为样本标签。
在本说明书一可选的实施例中,上述目标值可以包括假设函数值,例如目标模型为线性回归模型时的假设函数值,或者是目标模型为逻辑回归模型时的假设函数值。此时,上述步骤A中,调用预设的向量浮点乘加指令,对参数向量序列以及特征向量序列进行乘加处理,得到训练样本的目标值的实施过程可以包括:调用向量浮点乘加指令,依次分轮对参数向量序列中排在第i位的参数向量、特征向量序列中排在第i位的特征向量以及预设的初始向量进行乘加处理,得到当前结果向量,并将当前结果向量作为下一轮乘加处理的初始向量,执行下一轮乘加处理,其中,i取0至m-1之间的整数,m为参数向量序列中的参数向量数量;进而,在遍历完参数向量序列以及特征向量序列后,对当前结果向量中的元素进行累加处理,并基于累加结果,得到训练样本的假设函数值;将该假设函数值作为训练样本的目标值。
具体来讲,可以针对每轮迭代训练过程中的训练样本,将参数向量序列中的排在第一个的参数向量作为当前第一向量θ0,将特征向量序列中排在第一个的特征向量X0作为当前第二向量,将预设的初始向量作为当前第三向量R0。
进而,执行向量乘加步骤:利用向量浮点乘加指令,对当前第一向量、当前第二向量以及当前第三向量进行向量乘加处理,得到当前结果向量。例如,可以表示为R=VFMADD(θ0,X0,R0)。
然后,将参数向量序列中下一个参数向量作为当前第一向量θ1,将特征向量序列中下一个特征向量作为当前第二向量X1,将当前结果向量R作为当前第三向量R1,并重复上述向量乘加步骤,以此类推,直至遍历完参数向量序列以及特征向量序列中所有向量。此时,上述预设值为0,将最后一轮得到的当前结果向量中的各元素进行累加处理,就可以θTX的值,进而在将该值带入假设函数,则可以得到每个训练样本的假设函数值。
然后,将参数向量序列中下一个参数向量作为当前第一向量θ1,将特征向量序列中下一个特征向量作为当前第二向量X1,将当前结果向量R作为当前第三向量R1,并重复上述向量乘加步骤,以此类推,直至遍历完参数向量序列以及特征向量序列中所有向量。此时,上述预设值为0,将最后一轮得到的当前结果向量中的各元素进行累加处理,就可以θTX的值,进而在将该值带入假设函数,则可以得到训练样本的假设函数值。
也就是说,可以将上述多轮乘加处理过程表示为:
R=VFMADD(θi,Xi,R) 公式1
在公式1中,R表示当前结果向量,θi表示参数向量序列中排在第i位的参数向量,Xi表示特征向量序列中排在第i位的特征向量。且R的初始值为预设的初始向量,且初始向量的维数与特征向量、参数向量的维数均相同,初始向量中每个元素的赋值均为0。
进而,根据以下公式2将最后一轮得到的当前结果向量中各元素进行累加:
其中,n为特征向量以及参数向量的维数,ri为当前结果向量中的第i个元素。
可以理解的是,假设向量浮点乘加指令支持的向量维度为n,调用一个向量浮点乘加指令即可以完成需要n个乘法指令和n个加法指令才能完成的计算。因此,在上述计算θTX的过程中,相比于对所有模型参数以及特征数据采用乘法指令和加法指令,本说明书实施例通过先将模型参数以及特征数据进行向量划分,然后再调用向量浮点乘加指令对划分得到的向量进行乘加处理,能够将耗时计算θTX需要的计算指令数量减少到接近1/2n,极大地降低了建模过程对计算设备的计算资源的占用。
由上述可知,在获取每个训练样本的假设函数值过程中,均需通过前一向量浮点乘加指令获取的当前结果向量,会作为后一向量浮点乘加指令的初始向量;根据指令流水线特性,若其后一条CPU指令所需参数包含前一条CPU指令的运行结果,则后一条CPU指令要等前一条CPU指令执行完才能执行;此时,若指令流水线的流水线长为P,则使得每P个CPU时钟周期内只能完成一条向量浮点乘加指令。
在本说明书一可选的实施例中,上述目标值可以包括梯度下降过程中的更新参数值。此时,上述步骤A中,调用预设的向量浮点乘加指令,对参数向量序列以及特征向量序列进行乘加处理,得到训练样本的目标值的实施过程可以包括:调用向量浮点乘加指令,对预先获取的梯度系数向量、特征向量序列中排在第j位的特征向量以及下降前的参数向量序列中排在第j位的参数向量进行乘加处理,得到下降后的参数向量序列,并将下降后的参数向量序列中的模型参数作为训练样本的目标值。其中,j取0至m-1之间的整数,m为参数向量序列中的参数向量数量。需要说明的是,本说明书实施例对模型训练采用的参数更新方式不做限制,例如,可以适用于full-batch、mini-batch或SGD(Stochastic GradientDescent,随机梯度下降)中的任意一种更新方式。
当然,执行上述乘加处理过程,需要先获取梯度系数向量。具体来讲,获取梯度系数向量的实施过程可以包括:获取本轮迭代训练过程中,梯度下降过程的梯度下降系数;按照参数向量的维数,构建梯度系数向量,且将梯度系数向量的每个元素均赋值为上述梯度下降系数。
假设梯度系数向量表示为A,A的维数与参数向量的维数以及特征向量的维数均一致。下降前的参数向量序列为:{θ′0,θ′1,…,θ′m-1},当前训练样本的特征向量序列为:{X0,X1,…,Xm-1},则利用向量浮点乘加指令,即:
θ′j=VFMADD(A,Xj,θ′j) 公式3
在公式3中,等号左边的θ′j为下一刻参数向量序列中排在第j位的参数向量,等号右边的θ′j为当前时刻参数向量序列中排在第j位的参数向量,Xj表示特征向量序列中排在第j位的特征向量。这样就可以快速得到下一刻各个学习参数的值。
由上述可知,在获取每个训练样本的梯度下降更新参数值过程中,根据公式3可知,后一向量浮点乘加指令获取的当前参数向量,会需要前一向量浮点乘加指令的运行结果;根据指令流水线特性,若其后一条CPU指令所需参数包含前一条CPU指令的运行结果,则后一条CPU指令要等前一条CPU指令执行完才能执行;此时,若指令流水线的流水线长为P,则使得每P个CPU时钟周期内只能完成一条向量浮点乘加指令。
举例来讲,在一种应用场景中,下降后的模型参数可以通过以下公式得到:
需要说明的是,若在对模型参数进行向量划分时,存在参数向量包含的模型参数个数不满n个(假设向量浮点乘加指令适用的向量长度为n),则会赋值不满的元素为预设值,但是这些赋值为预设值的元素并不是真实的模型参数,在更新模型参数时,不予以考虑。
可以理解的是,假设向量浮点乘加指令支持的向量维度为n,调用一个向量浮点乘加指令即可以完成需要n个乘法指令和n个加法指令才能完成的计算。因此,在上述计算更新模型参数θ′的过程中,相比于针对所有模型参数以及特征数据采用乘法指令和加法指令,本说明书实施例通过先将模型参数以及特征数据进行向量划分,然后再调用向量浮点乘加指令计算更新模型参数θ′,能够将耗时计算θ′需要的计算指令数量减少到接近1/2n,极大地降低了建模过程对计算设备的计算资源的占用。
在具体实施过程中,可以根据实际需要,对训练样本的特征数据以及目标模型的模型参数进行向量划分,进而,在上述假设函数hθ(X)的计算过程中,和/或,在上述梯度下降过程中,更新后的模型参数θ′的计算过程中,调用预设的向量浮点乘加指令,从而大幅度降低模型训练过程中主要耗时计算的需要的计算指令数,这样就可以有效地加快建模速度,提高建模效率,且降低建模过程对计算设备的计算资源的占用,这样能够优化计算设备的内部资源管理,使得计算设备能够处理更多的计算任务,从而提高处理效率。
在通过前述方式确定出最大指令数之后,就可以执行前面提及过的步骤S104进行数据的乘加处理。具体如下:
在本说明书一可选的实施例中,上述目标值可以包括假设函数值,例如目标模型为线性回归模型时的假设函数值,或者是目标模型为逻辑回归模型时的假设函数值。此时,上述步骤S104中,针对每轮迭代训练过程,利用每次连续输入的多个向量浮点乘加指令,对多个训练样本各进行一次乘加处理,获得所述多个训练样本在本次乘加处理的当前结果向量,并将所述多个训练样本的当前结果向量作为下一次乘加处理的初始向量,其中,所述每次连续输入的多个向量浮点乘加指令与该次进行乘加处理的多个训练样本对应;
通过多次乘加处理,遍历完每个训练样本的参数向量序列以及特征向量序列后,对每个训练样本的当前结果向量中的元素进行累加处理,并基于每个训练样本的累加结果,得到每个训练样本的假设函数值;将每个训练样本的假设函数值作为该训练样本的目标值。
在具体实施过程中,针对每次连续输入的多个向量浮点乘加指令,从所述多个训练样本的参数向量序列以及特征向量序列中,获取该次连续输入的多个向量浮点乘加指令对应的多个指令数据;使用该次连续输入的多个向量浮点乘加指令,对所述多个指令数据进行乘加处理,获取所述多个训练样本在本次乘加处理的当前结果向量。
具体来讲,所述针对每次连续输入的多个向量浮点乘加指令,使用该次连续输入的多个向量浮点乘加指令,对所述多个指令数据进行乘加处理,获取所述多个训练样本在本次乘加处理的当前结果向量,包括:
针对第i次乘加处理,利用第i次连续输入所述CPU指令流水线中的多个向量浮点乘加指令,依次对所述多个训练样本中每个训练样本的参数向量序列中排在第i位的参数向量、特征向量序列中排在第i位的特征向量以及预设的初始向量进行乘加处理,获得所述多个训练样本中每个训练样本在本次乘加处理的当前结果向量,其中,i依次从0取到m-1,m为参数向量序列中的参数向量数量。
本说明书实施例中,每轮迭代训练过程中的每次连续输入的多个向量浮点乘加指令对应的多个训练样本的数量相同,以及每次连续输入的多个向量浮点乘积指令的数量可以相同或不同;例如某轮迭代训练过程中某次输入了5个指令,其对应的训练样本也为5个训练样本;以及,另一次输入了7个指令,其对应的训练样本也为7个训练样本。
具体来讲,以某轮迭代训练中的训练样本为8个为例,若CPU的最大指令数为4且目标值为假设函数值,则可以确定每次连续输入的多个向量浮点乘加指令可以为4;可以根据公式1,确定出第一次输入的4个向量浮点乘加指令对应的指令数据,依次为第1个训练样本的θ0和X0,直至第4个训练样本的θ0和X0,并执行指令对输入的每组θ0和X0,以及预设的初始向量进行乘加处理,得到上述4个训练样本中每个训练样本的当前结果向量,将此次乘加处理中每个训练样本的当前结果向量作为下一轮乘加处理的初始向量;第二次输入的4个向量浮点乘加指令对应的指令数据,依次为第1个训练样本的θ1和X1,直至第4个训练样本的θ1和X1,并执行指令对输入的每组θ1和X1,以及上一轮计算得到当前结果向量进行乘加处理,得到此次乘加处理中每个训练样本的当前结果向量,然后将此次乘加处理中每个训练样本的当前结果向量作为下一轮乘加处理的初始向量;直至第m次输入的4个向量浮点乘加指令对应的指令数据,依次为第1个训练样本的θm-1和Xm-1,直至第4个训练样本的θm-1和Xm-1,并执行指令对输入的每组θm-1和Xm-1,以及上一轮计算得到当前结果向量进行乘加处理,得到最后一轮中每个训练样本的当前结果向量;此时,可以公式2对上述m轮乘加处理得到的每个训练样本的当前结果向量进行累加,将每个训练样本的累加结果作为该训练样本的目标值。
另外,针对另外4个训练样本也执行上述步骤,从而得到该轮迭代训练过程中8个训练样本中每个训练样本的目标值。
在本说明书一可选的实施例中,上述目标值可以包括梯度下降过程中的更新参数值。此时,上述步骤S104中,可以针对每轮迭代训练过程,利用每次连续输入的多个向量浮点乘加指令,对多个训练样本各进行一次乘加处理,获得所述多个训练样本在本次乘加处理的当前梯度系数向量,并将所述多个训练样本的当前梯度系数向量作为下一次乘加处理的初始梯度系数向量,其中,所述每次连续输入的多个向量浮点乘加指令与该次进行乘加处理的多个训练样本对应;通过多次乘加处理,在遍历完每个训练样本的特征向量序列后,获取每个训练样本的最终梯度系数向量,并将每个训练样本的最终梯度系数向量作为所述训练样本的目标值。需要说明的是,本说明书实施例对模型训练采用的参数更新方式不做限制,例如,可以适用于full-batch、mini-batch或SGD(Stochastic Gradient Descent,随机梯度下降)中的任意一种更新方式。
具体来讲,针对每次连续输入的多个向量浮点乘加指令,从所述多个训练样本的参数向量序列以及特征向量序列中,获取该次连续输入的多个向量浮点乘加指令对应的多个指令数据;使用该次连续输入的多个向量浮点乘加指令,对所述多个指令数据进行乘加处理,获取所述多个训练样本在本次乘加处理的当前梯度系数向量。
具体来讲,所述利用每次连续输入的多个向量浮点乘加指令,对多个训练样本各进行一次乘加处理,获得所述多个训练样本在本次乘加处理的当前梯度系数向量,包括:
针对第j次乘加处理,利用第j次连续输入所述CPU指令流水线中的多个向量浮点乘加指令,依次对所述多个训练样本中每个训练样本的特征向量序列中排在第j位的特征向量,下降前的参数向量序列中排在第j位的参数向量以及预先获取的梯度系数向量进行乘加处理,得到所述多个训练样本中每个训练样本的当前梯度系数向量,其中,j依次从0取到m-1,m为参数向量序列中的参数向量数量。
本说明书实施例中,每轮迭代训练过程中的每次连续输入的多个向量浮点乘加指令对应的多个训练样本的数量相同,以及每次连续输入的多个向量浮点乘积指令的数量可以相同或不同;例如某轮迭代训练过程中某次输入了5个指令,其对应的训练样本也为5个训练样本;以及,另一次输入了7个指令,其对应的训练样本也为7个训练样本。
具体地,以某轮迭代训练中的训练样本为8个,若CPU的最大指令数为4且目标值为梯度下降更新参数值,则可以确定每次连续输入的多个向量浮点乘加指令可以为4,如此,可以根据公式3,确定第一次输入的4个向量浮点乘加指令对应的指令数据,依次为第1个训练样本的A和X0,直至第4个训练样本的A和X,并执行指令对输入的每组A和X0,以及预先获取的梯度系数向量进行乘加处理,得到上述4个训练样本中每个训练样本的当前梯度系数向量,将此次乘加处理中每个训练样本的当前梯度系数向量作为下一次乘加处理的初始梯度系数向量;第二次输入的4个向量浮点乘加指令对应的指令数据,依次为第1个训练样本的A和X1,直至第4个训练样本的A和X1,并执行指令对输入的每组A和X1,以及上一轮中每个训练样本的当前梯度系数向量进行乘加处理,得到上述4个训练样本中每个训练样本的当前梯度系数向量,将此次乘加处理中每个训练样本的当前梯度系数向量作为下一次乘加处理的初始梯度系数向量;直至第m次输入的4个向量浮点乘加指令对应的指令数据,依次为第1个训练样本的A和Xm-1,直至第4个训练样本的A和Xm-1,并执行指令对输入的每组A和Xm-,以及上一次乘加处理中每个训练样本的当前梯度系数向量进行乘加处理,得到上述4个训练样本中每个训练样本的当前梯度系数向量,将此次乘加处理中每个训练样本的当前梯度系数向量作为每个训练样本的目标值,并将此次乘加处理获取的每个当前梯度系数向量写入下降后的参数向量序列中。
然后,针对另外4个训练样本也执行上述步骤,从而得到该轮迭代训练过程中8个训练样本中每个训练样本的目标值。
具体来讲,可以获取每次连续输入指令流水线中的多个向量浮点乘加指令,然后将每次获取的多个向量浮点乘加指令连续输入到指令流水线中执行,由于每次连续输入的多个向量浮点乘加指令的指令数,均不大于CPU在模型训练过程中执行向量浮点乘加指令的最大指令数,且每次连续输入的多个向量浮点乘加指令对应的任意两个指令数据均具有非相关性,进而促使CPU的硬件配置能够连续执行每次连续输入的多个向量浮点乘加指令。
以及在CPU执行每次连续输入的多个向量浮点乘加指令过程中,能够每个CPU时钟周期执行一个向量浮点乘加指令;与每P个CPU时钟周期内只能完成一条向量浮点乘加指令相比,能够有效提高在单位时间内CPU执行的向量浮点乘加指令的指令数量,在单位时间内执行向量浮点乘加指令的指令数量提高的基础上,能够有效提高目标模型的训练效率。
本说明书实施例中,每次连续输入的多个向量浮点乘加指令的指令数可以相同或不同,优选地,每次连续输入的多个向量浮点乘加指令的指令数可以为最大指令数,此时,会使得单位时间内执行向量浮点乘加指令的指令数量最多,进而使得目标模型的训练效率也是最大训练效率。
例如,以Intel Haswell CPU包括4个内核为例,CPU支持向量浮点数乘加指令,即融合乘加指令vfmad,流水线长5;每个内核有2个向量浮点数乘加计算单元;每个超线程(支持超线程,每个超线程有一组寄存器)有16个YMM寄存器,即:P=5,Q=2,K=16。
其中,若目标模型的当前计算参数为假设函数hθ(X),如此,可以根据公式1得到每个训练样本的所有R值;再根据公式2对每个训练样本各自的所有R值进行累加,得到每个训练样本的假设函数值;
此时,由于hθ(X)对应的操作数为θi和Xi均是变化的,每组θi和Xi均需输入到YMM寄存器中,如此,使得每个内核通过16个YMM寄存器最多连续执行16/2个向量浮点数乘加指令,即浮点最大指令数为16/2=8;相应地,每个内核通过指令流水线最多连续执行5×2个向量浮点乘加指令,即内核最大指令数为10,由于8<10,则确定最大指令数为8,即每个内核最多连续执行8个向量浮点乘加指令。
以及,若确定每次连续输入的多个向量浮点乘加指令的指令数为8,则每个内核每次连续输入8个向量浮点乘加指令到指令流水线中,每次连续输入8个向量浮点乘加指令对应的任意两个指令数据均具有非相关性;此时,在执行每次连续输入8个向量浮点乘加指令过程中,由于每个内核有2个向量浮点数乘加计算单元,使得每个内核在每个CPU时钟周期内能执行2个向量浮点乘加指令;而不是每个内核在5个CPU时钟周期内只能执行一个向量浮点乘加指令,此时,内核数量为4,使得4个内核在一个CPU时钟周期内能够执行8个向量浮点乘加指令,如此,在内核的数量越多的情况下,使得指令执行速度越快,进而能够使得指令的执行效率也会进一步提高。
例如,可以第一次输入的8个向量浮点乘加指令对应的指令数据,依次为第1个训练样本的θ0和X0,直至第8个训练样本的θ0和X0;第二次输入的8个向量浮点乘加指令对应的指令数据,依次为第1个训练样本的θ1和X1,直至第8个训练样本的θ1和X1;直至第m次输入的8个向量浮点乘加指令对应的指令数据,依次为第1个训练样本的θm-1和Xm-1,直至第8个训练样本的θm-1和Xm-1;针对每个训练样本执行上述步骤,进而每个训练样本的所有R值;再根据公式2对每个训练样本各自的所有R值进行累加,得到每个训练样本的假设函数值。
又例如,以一个内核中某次连续输入的8个向量浮点指令依次为:
“vfmadd231ps(%%r9),%%ymm8,%%ymm0\n\t”
“vfmadd231ps32(%%r9),%%ymm9,%%ymm1\n\t”
“vfmadd231ps64(%%r9),%%ymm10,%%ymm2\n\t”
“vfmadd231ps96(%%r9),%%ymm11,%%ymm3\n\t”
“vfmadd231ps128(%%r9),%%ymm12,%%ymm4\n\t”
“vfmadd231ps160(%%r9),%%ymm13,%%ymm5\n\t”
“vfmadd231ps192(%%r9),%%ymm14,%%ymm6\n\t”
“vfmadd231ps224(%%r9),%%ymm15,%%ymm7\n\t”;
其中,以vfmadd231ps(%%r9),%%ymm8,%%ymm0为例,其中,%%ymm8和%%ymm0是256比特向量寄存器;以及(%%r9)是一个64位标量寄存器,表示从以r9中的值作为地址从内存中读取256比特的向量;vfmadd231ps用于将%%ymm8和%%ymm0中存储的两个向量中的8个32位浮点数对应相乘,相乘结果加到%%r9中的8个浮点数上。
此时,由于流水线长5,该内核会先将上述8个向量浮点指令中的前5个指令输入到指令流水线中,然后执行指令,以及在每执行完一个指令时将后面的3个指令依次输入到指令流水线中,此时,在该内核执行上述8个指令时,由于该内核有2个向量浮点数乘加计算单元,使得该内核每个CPU时钟周期能够执行2个指令,进而使得上述8个指令仅需4个CPU时钟周期即可执行完成;如此,针对其它次连续输入的8个向量浮点指令也执行上述操作。
本说明书一可选实施例中,若当前计算参数为梯度下降更新参数θ′,如此,可以根据公式3得到每个训练样本的梯度下降更新参数值。
此时,根据公式3,可知θ′对应的操作数为A和Xj,其中,A是不变的,Xj是变化的,使得所有组A和Xj中的A均需要一个YMM寄存器,而每组A和Xj中的Xj均需要一个YMM寄存器,如此,使得每个内核通过16个YMM寄存器最多连续执行15(=16-1)个向量浮点数乘加指令,即浮点最大指令数为16-1=15;相应地,每个内核通过指令流水线最多连续执行5×2个向量浮点乘加指令,即内核最大指令数为10,由于10<15,则确定最大指令数为10,即每个内核最多连续执行10个向量浮点乘加指令。
以及,若确定每次连续输入的多个向量浮点乘加指令的指令数为10,则每个内核每次连续输入10个向量浮点乘加指令到指令流水线中,每次连续输入10个向量浮点乘加指令对应的任意两个指令数据均具有非相关性;此时,在执行每次连续输入10个向量浮点乘加指令过程中,每个内核在每个CPU时钟周期内能执行一个向量浮点乘加指令;而不是每个内核在5个CPU时钟周期内只能执行一个向量浮点乘加指令,如此,在内核的数量越多的情况下,促使指令执行速度越快,进而能够使得指令的执行效率也会进一步提高。
例如,可以第一次输入的10个向量浮点乘加指令对应的指令数据,依次为第1个训练样本的A和X0,直至第10个训练样本的A和X0;第二次输入的10个向量浮点乘加指令对应的指令数据,依次为第1个训练样本的A和X1,直至第10个训练样本的A和X1;直至第m次输入的10个向量浮点乘加指令对应的指令数据,依次为第1个训练样本的A和Xm-1,直至第10个训练样本的A和Xm-1;针对每个训练样本执行上述步骤,进而每个训练样本的梯度下降更新参数值。
又例如,以一个内核中某次连续输入的10个向量浮点指令依次为:
“vfmadd231ps(%%r9),%%ymm15,%%ymm0\n\t”
“vfmadd231ps32(%%r9),%%ymm15,%%ymm1\n\t”
“vfmadd231ps64(%%r9),%%ymm15,%%ymm2\n\t”
“vfmadd231ps96(%%r9),%%ymm15,%%ymm3\n\t”
“vfmadd231ps128(%%r9),%%ymm15,%%ymm4\n\t”
“vfmadd231ps160(%%r9),%%ymm15,%%ymm5\n\t”
“vfmadd231ps192(%%r9),%%ymm15,%%ymm6\n\t”
“vfmadd231ps224(%%r9),%%ymm15,%%ymm7\n\t”
“vfmadd231ps256(%%r9),%%ymm15,%%ymm8\n\t”
“vfmadd231ps288(%%r9),%%ymm15,%%ymm9\n\t”;
其中,以vfmadd231ps(%%r9),%%ymm15,%%ymm0为例,其中,%%ymm15和%%ymm0是256比特向量寄存器;以及(%%r9)是一个64位标量寄存器,表示从以r9中的值作为地址从内存中读取256比特的向量;vfmadd231ps用于将%%ymm15和%%ymm0中存储的两个向量中的8个32位浮点数对应相乘,相乘结果加到%%r9中的8个浮点数上;
此时,由于流水线长5,该内核会先将上述10个向量浮点指令中的前5个指令输入到指令流水线中,然后执行指令,以及在每执行完一个指令时将后面的5个指令依次输入到指令流水线中,此时,在该内核执行上述10个指令时,由于该内核有2个向量浮点数乘加计算单元,使得该内核每个CPU时钟周期能够执行2个指令,进而使得上述10个指令仅需5个CPU时钟周期即可执行完成;如此,针对其它次连续输入的10个向量浮点指令也执行上述操作。
在基于每轮迭代训练过程中训练样本的目标值之后,执行步骤S106,基于每轮迭代训练过程中训练样本的目标值,得到经训练的目标模型。
具体来讲,在通过上述步骤S104计算得到目标值后,就可以将目标值用于训练过程的后续计算中,例如,损失函数值的计算等,直至完成训练,得到经训练的目标模型。
本说明书实施例中,目标值包括梯度下降更新参数值和假设函数值。
本说明书实施例提供的加速建模的方法,通过对特征数据以及学习参数进行向量划分,将特征数据以及学习参数向量化,然后通过向量浮点乘加指令完成模型训练过程中的涉及特征数据以及学习参数的乘加计算,极大地减少了线性机器学习模型训练过程所需要的计算指令数,能够有效地加速建模,减少建模消耗的时间,有利于在保证模型性能的同时使得模型快速投入使用,提高用户体验,且极大地降低了建模过程对计算机计算资源的占用。
而且,由于每次输入CPU的指令流水线中的向量浮点乘加指令为多个,且多个向量浮点乘加指令的指令数不大于CPU在模型训练过程中执行指令的最大指令数,在每次连续输入的多个向量浮点乘加指令时,CPU可以连续执行该次输入的多个向量浮点乘加指令,从而能够有效提高在单位时间内CPU执行的向量浮点乘加指令的指令数量,在单位时间内执行向量浮点乘加指令的指令数量提高的基础上,能够有效提高目标模型的训练效率。
第二方面,基于相同的技术构思,本说明书实施例提供一种加速计算设备建模的装置,装置包括CPU,如图3所示,包括:
向量划分单元301,用于在目标模型的训练过程中,分别对每个训练样本各自的特征数据以及目标模型的学习参数进行向量划分,得到每个训练样本各自的特征向量序列以及学习参数的参数向量序列;
乘加指令执行单元302,用于针对每轮迭代训练过程中的训练样本,利用每次连续输入CPU的指令流水线中的多个向量浮点乘加指令,对参数向量序列以及特征向量序列进行乘加处理,得到训练样本的目标值,其中,每次连续输入的多个向量浮点乘加指令的指令数,均不大于CPU在模型训练过程中执行向量浮点乘加指令的最大指令数,每次连续输入的多个向量浮点乘加指令对应的任意两个指令数据均具有非相关性;
模型确定单元303,用于基于每轮迭代训练过程中每个训练样本的目标值,得到经训练的目标模型。
在一种可选的实施方式中,装置还包括:
CPU配置数据获取单元,用于在对目标模型进行训练之前,获取CPU的指令流水线数据、超标量数据和浮点寄存器数据;
指令数确定单元,用于根据CPU的指令流水线数据、超标量数据和浮点寄存器数据,确定出最大指令数。
在一种可选的实施方式中,指令数确定单元,用于根据目标模型的当前计算参数和浮点寄存器数据,确定出CPU通过浮点寄存器进行连续指令执行的浮点最大指令数;根据指令流水线数据和超标量数据,确定出CPU的内核通过指令流水线连续执行CPU指令的内核最大指令数;比对浮点最大指令数和内核最大指令数,将对比出的较小数作为最大指令数。
在一种可选的实施方式中,乘加指令执行单元302,用于针对每轮迭代训练过程,利用每次连续输入的多个向量浮点乘加指令,对多个训练样本各进行一次乘加处理,获得所述多个训练样本在本次乘加处理的当前结果向量,并将所述多个训练样本的当前结果向量作为下一次乘加处理的初始向量,其中,所述每次连续输入的多个向量浮点乘加指令与该次进行乘加处理的多个训练样本对应;通过多次乘加处理,遍历完每个训练样本的参数向量序列以及特征向量序列后,对每个训练样本的当前结果向量中的元素进行累加处理,并基于每个训练样本的累加结果,得到每个训练样本的假设函数值;将每个训练样本的假设函数值作为该训练样本的目标值。
在一种可选的实施方式中,乘加指令执行单元302,用于针对每次连续输入的多个向量浮点乘加指令,从所述多个训练样本的参数向量序列以及特征向量序列中,获取该次连续输入的多个向量浮点乘加指令对应的多个指令数据;使用该次连续输入的多个向量浮点乘加指令,对所述多个指令数据进行乘加处理,获取所述多个训练样本在本次乘加处理的当前结果向量。
在一种可选的实施方式中,乘加指令执行单元302,用于针对第i次乘加处理,利用第i次连续输入所述CPU指令流水线中的多个向量浮点乘加指令,依次对所述多个训练样本中每个训练样本的参数向量序列中排在第i位的参数向量、特征向量序列中排在第i位的特征向量以及预设的初始向量进行乘加处理,获得所述多个训练样本中每个训练样本在本次乘加处理的当前结果向量,其中,i依次从0取到m-1,m为参数向量序列中的参数向量数量。
在一种可选的实施方式中,乘加指令执行单元302,用于针对每轮迭代训练过程,利用每次连续输入的多个向量浮点乘加指令,对多个训练样本各进行一次乘加处理,获得所述多个训练样本在本次乘加处理的当前梯度系数向量,并将所述多个训练样本的当前梯度系数向量作为下一次乘加处理的初始梯度系数向量,其中,所述每次连续输入的多个向量浮点乘加指令与该次进行乘加处理的多个训练样本对应;通过多次乘加处理,在遍历完每个训练样本的特征向量序列后,获取每个训练样本的最终梯度系数向量,并将每个训练样本的最终梯度系数向量作为所述训练样本的目标值。
在一种可选的实施方式中,乘加指令执行单元302,用于针对每次连续输入的多个向量浮点乘加指令,从所述多个训练样本的参数向量序列以及特征向量序列中,获取该次连续输入的多个向量浮点乘加指令对应的多个指令数据;使用该次连续输入的多个向量浮点乘加指令,对所述多个指令数据进行乘加处理,获取所述多个训练样本在本次乘加处理的当前梯度系数向量。
在一种可选的实施方式中,乘加指令执行单元302,用于针对第j次乘加处理,利用第j次连续输入所述CPU指令流水线中的多个向量浮点乘加指令,依次对所述多个训练样本中每个训练样本的特征向量序列中排在第j位的特征向量,下降前的参数向量序列中排在第j位的参数向量以及预先获取的梯度系数向量进行乘加处理,得到所述多个训练样本中每个训练样本的当前梯度系数向量,其中,j依次从0取到m-1,m为参数向量序列中的参数向量数量。
在一种可选的实施方式中,向量划分单元301,用于获取向量浮点乘加指令支持的向量维数;基于向量维数,分别对模型参数进行向量划分,得到m个n维参数向量,组成参数向量序列,以及对每个训练样本各自的特征数据进行向量划分,得到m个n维特征向量,组成特征向量序列,其中,m为大于或等于1的整数,n为大于或等于2的整数。
在一种可选的实施方式中,特征向量序列中包括的特征向量个数与参数向量序列中包括的参数向量个数相同,且每个特征向量的维数与每个参数向量的维数均相同。
在一种可选的实施方式中,特征数据中的一个特征被划分到一个特征向量中,且一个学习参数被划分的一个参数向量中。
在一种可选的实施方式中,目标模型为线性机器学习模型。
第三方面,基于与前述实施例中加速计算设备建模的方法同样的发明构思,本说明书实施例还提供一种电子设备,如图4所示,包括存储器404、处理器402及存储在存储器404上并可在处理器402上运行的计算机程序,处理器402执行程序时实现前文加速计算设备建模的方法的任一方法的步骤。
其中,在图4中,总线架构(用总线400来代表),总线400可以包括任意数量的互联的总线和桥,总线400将包括由处理器402代表的一个或多个处理器和存储器404代表的存储器的各种电路链接在一起。总线400还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口405在总线400和接收器401和发送器403之间提供接口。接收器401和发送器403可以是同一个元件,即收发机,提供用于在传输介质上与各种其他装置通信的单元。处理器402负责管理总线400和通常的处理,而存储器404可以被用于存储处理器402在执行操作时所使用的数据。
第四方面,基于与前述实施例中加速计算设备建模的方法的发明构思,本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前文加速计算设备建模的方法的任一方法的步骤。
本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序CPU指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序CPU指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的CPU指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的设备。
这些计算机程序CPU指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的CPU指令产生包括CPU指令设备的制造品,该CPU指令设备实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序CPU指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的CPU指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本说明书的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本说明书范围的所有变更和修改。
显然,本领域的技术人员可以对本说明书进行各种改动和变型而不脱离本说明书的精神和范围。这样,倘若本说明书的这些修改和变型属于本说明书权利要求及其等同技术的范围之内,则本说明书也意图包含这些改动和变型在内。
Claims (24)
1.一种加速计算设备建模的方法,应用于包含CPU的计算设备中,包括:
在目标模型的训练过程中,分别对每个训练样本各自的特征数据以及所述目标模型的学习参数进行向量划分,得到每个训练样本各自的特征向量序列以及所述学习参数的参数向量序列;
针对每轮迭代训练过程中的训练样本,利用每次连续输入所述CPU的指令流水线中的多个向量浮点乘加指令,对所述参数向量序列以及所述特征向量序列进行乘加处理,得到训练样本的目标值;其中,所述每次连续输入的多个向量浮点乘加指令的指令数,均不大于所述CPU在模型训练过程中执行向量浮点乘加指令的最大指令数,所述每次连续输入的多个向量浮点乘加指令对应的任意两个指令数据均具有非相关性;
基于每轮迭代训练过程中每个训练样本的目标值,得到经训练的目标模型。
2.如权利要求1所述的方法,还包括:
在对所述目标模型进行训练之前,获取所述CPU的指令流水线数据、超标量数据和浮点寄存器数据;
根据所述CPU的指令流水线数据、超标量数据和浮点寄存器数据,确定出所述最大指令数。
3.如权利要求2所述的方法,所述根据所述CPU的指令流水线数据、超标量数据和浮点寄存器数据,确定出所述最大指令数,包括:
根据所述目标模型的当前计算参数和所述浮点寄存器数据,确定出所述CPU通过浮点寄存器进行连续指令执行的浮点最大指令数;
根据所述指令流水线数据和所述超标量数据,确定出所述CPU的内核通过指令流水线连续执行CPU指令的内核最大指令数;
比对所述浮点最大指令数和所述内核最大指令数,将对比出的较小数作为所述最大指令数。
4.如权利要求1所述的方法,所述利用每次连续输入所述CPU的指令流水线中的多个向量浮点乘加指令,对所述参数向量序列以及所述特征向量序列进行乘加处理,得到训练样本的目标值,包括:
针对每轮迭代训练过程,利用每次连续输入的多个向量浮点乘加指令,对多个训练样本各进行一次乘加处理,获得所述多个训练样本在本次乘加处理的当前结果向量,并将所述多个训练样本的当前结果向量作为下一次乘加处理的初始向量,其中,所述每次连续输入的多个向量浮点乘加指令与该次进行乘加处理的多个训练样本对应;
通过多次乘加处理,遍历完每个训练样本的参数向量序列以及特征向量序列后,对每个训练样本的当前结果向量中的元素进行累加处理,并基于每个训练样本的累加结果,得到每个训练样本的假设函数值;将每个训练样本的假设函数值作为该训练样本的目标值。
5.如权利要求4所述的方法,所述利用每次连续输入的多个向量浮点乘加指令,对多个训练样本各进行一次乘加处理,获得所述多个训练样本在本次乘加处理的当前结果向量,包括:
针对每次连续输入的多个向量浮点乘加指令,从所述多个训练样本的参数向量序列以及特征向量序列中,获取该次连续输入的多个向量浮点乘加指令对应的多个指令数据;使用该次连续输入的多个向量浮点乘加指令,对所述多个指令数据进行乘加处理,获取所述多个训练样本在本次乘加处理的当前结果向量。
6.如权利要求5所述的方法,所述针对每次连续输入的多个向量浮点乘加指令,使用该次连续输入的多个向量浮点乘加指令,对所述多个指令数据进行乘加处理,获取所述多个训练样本在本次乘加处理的当前结果向量,包括:
针对第i次乘加处理,利用第i次连续输入所述CPU指令流水线中的多个向量浮点乘加指令,依次对所述多个训练样本中每个训练样本的参数向量序列中排在第i位的参数向量、特征向量序列中排在第i位的特征向量以及预设的初始向量进行乘加处理,获得所述多个训练样本中每个训练样本在本次乘加处理的当前结果向量,其中,i依次从0取到m-1,m为参数向量序列中的参数向量数量。
7.如权利要求1所述的方法,所述利用每次连续输入所述CPU的指令流水线中的多个向量浮点乘加指令,对所述参数向量序列以及所述特征向量序列进行乘加处理,得到训练样本的目标值,包括:
针对每轮迭代训练过程,利用每次连续输入的多个向量浮点乘加指令,对多个训练样本各进行一次乘加处理,获得所述多个训练样本在本次乘加处理的当前梯度系数向量,并将所述多个训练样本的当前梯度系数向量作为下一次乘加处理的初始梯度系数向量,其中,所述每次连续输入的多个向量浮点乘加指令与该次进行乘加处理的多个训练样本对应;
通过多次乘加处理,在遍历完每个训练样本的特征向量序列后,获取每个训练样本的最终梯度系数向量,并将每个训练样本的最终梯度系数向量作为所述训练样本的目标值。
8.如权利要求7所述的方法,所述针对每次连续输入的多个向量浮点乘加指令,利用每次连续输入的多个向量浮点乘加指令,对多个训练样本各进行一次乘加处理,获得所述多个训练样本在本次乘加处理的当前结果向量,包括:
针对每次连续输入的多个向量浮点乘加指令,从所述多个训练样本的参数向量序列以及特征向量序列中,获取该次连续输入的多个向量浮点乘加指令对应的多个指令数据;使用该次连续输入的多个向量浮点乘加指令,对所述多个指令数据进行乘加处理,获取所述多个训练样本在本次乘加处理的当前梯度系数向量。
9.如权利要求7所述的方法,所述利用每次连续输入的多个向量浮点乘加指令,对多个训练样本各进行一次乘加处理,获得所述多个训练样本在本次乘加处理的当前梯度系数向量,包括:
针对第j次乘加处理,利用第j次连续输入所述CPU指令流水线中的多个向量浮点乘加指令,依次对所述多个训练样本中每个训练样本的特征向量序列中排在第j位的特征向量,下降前的参数向量序列中排在第j位的参数向量以及预先获取的梯度系数向量进行乘加处理,得到所述多个训练样本中每个训练样本的当前梯度系数向量,其中,j依次从0取到m-1,m为参数向量序列中的参数向量数量。
10.如权利要求1所述的方法,所述分别对每个训练样本各自的特征数据以及所述目标模型的学习参数进行向量划分,包括:
获取所述向量浮点乘加指令支持的向量维数;
基于所述向量维数,分别对模型参数进行向量划分,得到m个n维参数向量,组成所述参数向量序列,以及对每个训练样本各自的特征数据进行向量划分,得到m个n维特征向量,组成所述特征向量序列,其中,m为大于或等于1的整数,n为大于或等于2的整数。
11.如权利要求1-10任一项所述的方法,所述目标模型为线性机器学习模型。
12.一种加速计算设备建模的装置,所述装置包括CPU,包括:
向量划分单元,用于在目标模型的训练过程中,分别对每个训练样本各自的特征数据以及所述目标模型的学习参数进行向量划分,得到每个训练样本各自的特征向量序列以及所述学习参数的参数向量序列,其中,所述目标模型为线性机器学习模型;
乘加指令执行单元,用于针对每轮迭代训练过程中的训练样本,利用每次连续输入所述CPU的指令流水线中的多个向量浮点乘加指令,对所述参数向量序列以及所述特征向量序列进行乘加处理,得到训练样本的目标值;其中,所述每次连续输入的多个向量浮点乘加指令的指令数,均不大于所述CPU在模型训练过程中执行向量浮点乘加指令的最大指令数,所述每次连续输入的多个向量浮点乘加指令对应的任意两个指令数据均具有非相关性;
模型确定单元,用于基于每轮迭代训练过程中每个训练样本的目标值,得到经训练的目标模型。
13.如权利要求12所述的装置,还包括:
CPU配置数据获取单元,用于在对所述目标模型进行训练之前,获取所述CPU的指令流水线数据、超标量数据和浮点寄存器数据;
指令数确定单元,用于根据所述CPU的指令流水线数据、超标量数据和浮点寄存器数据,确定出所述最大指令数。
14.如权利要求13所述的装置,所述指令数确定单元,用于根据所述目标模型的当前计算参数和所述浮点寄存器数据,确定出所述CPU通过浮点寄存器进行连续指令执行的浮点最大指令数;根据所述指令流水线数据和所述超标量数据,确定出所述CPU的内核通过指令流水线连续执行CPU指令的内核最大指令数;比对所述浮点最大指令数和所述内核最大指令数,将对比出的较小数作为所述最大指令数。
15.如权利要求12所述的装置,所述乘加指令执行单元,用于针对每轮迭代训练过程,利用每次连续输入的多个向量浮点乘加指令,对多个训练样本各进行一次乘加处理,获得所述多个训练样本在本次乘加处理的当前结果向量,并将所述多个训练样本的当前结果向量作为下一次乘加处理的初始向量,其中,所述每次连续输入的多个向量浮点乘加指令与该次进行乘加处理的多个训练样本对应;通过多次乘加处理,遍历完每个训练样本的参数向量序列以及特征向量序列后,对每个训练样本的当前结果向量中的元素进行累加处理,并基于每个训练样本的累加结果,得到每个训练样本的假设函数值;将每个训练样本的假设函数值作为该训练样本的目标值。
16.如权利要求15所述的装置,所述乘加指令执行单元,用于针对每次连续输入的多个向量浮点乘加指令,从所述多个训练样本的参数向量序列以及特征向量序列中,获取该次连续输入的多个向量浮点乘加指令对应的多个指令数据;使用该次连续输入的多个向量浮点乘加指令,对所述多个指令数据进行乘加处理,获取所述多个训练样本在本次乘加处理的当前结果向量。
17.如权利要求16所述的装置,所述乘加指令执行单元,用于针对第i次乘加处理,利用第i次连续输入所述CPU指令流水线中的多个向量浮点乘加指令,依次对所述多个训练样本中每个训练样本的参数向量序列中排在第i位的参数向量、特征向量序列中排在第i位的特征向量以及预设的初始向量进行乘加处理,获得所述多个训练样本中每个训练样本在本次乘加处理的当前结果向量,其中,i依次从0取到m-1,m为参数向量序列中的参数向量数量。
18.如权利要求12所述的装置,所述乘加指令执行单元,用于针对每轮迭代训练过程,利用每次连续输入的多个向量浮点乘加指令,对多个训练样本各进行一次乘加处理,获得所述多个训练样本在本次乘加处理的当前梯度系数向量,并将所述多个训练样本的当前梯度系数向量作为下一次乘加处理的初始梯度系数向量,其中,所述每次连续输入的多个向量浮点乘加指令与该次进行乘加处理的多个训练样本对应;通过多次乘加处理,在遍历完每个训练样本的特征向量序列后,获取每个训练样本的最终梯度系数向量,并将每个训练样本的最终梯度系数向量作为所述训练样本的目标值。
19.如权利要求18所述的装置,所述乘加指令执行单元,用于针对每次连续输入的多个向量浮点乘加指令,从所述多个训练样本的参数向量序列以及特征向量序列中,获取该次连续输入的多个向量浮点乘加指令对应的多个指令数据;使用该次连续输入的多个向量浮点乘加指令,对所述多个指令数据进行乘加处理,获取所述多个训练样本在本次乘加处理的当前梯度系数向量。
20.如权利要求19所述的装置,所述乘加指令执行单元,用于针对第j次乘加处理,利用第j次连续输入所述CPU指令流水线中的多个向量浮点乘加指令,依次对所述多个训练样本中每个训练样本的特征向量序列中排在第j位的特征向量,下降前的参数向量序列中排在第j位的参数向量以及预先获取的梯度系数向量进行乘加处理,得到所述多个训练样本中每个训练样本的当前梯度系数向量,其中,j依次从0取到m-1,m为参数向量序列中的参数向量数量。
21.如权利要求12所述的装置,所述向量划分单元,用于获取所述向量浮点乘加指令支持的向量维数;基于所述向量维数,分别对模型参数进行向量划分,得到m个n维参数向量,组成所述参数向量序列,以及对每个训练样本各自的特征数据进行向量划分,得到m个n维特征向量,组成所述特征向量序列,其中,m为大于或等于1的整数,n为大于或等于2的整数。
22.如权利要求12-21任一项所述的装置,所述目标模型为线性机器学习模型。
23.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现权利要求1-11任一项所述方法的步骤。
24.一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现权利要求1-11任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911328867.9A CN111061513B (zh) | 2019-12-20 | 2019-12-20 | 加速计算设备建模的方法、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911328867.9A CN111061513B (zh) | 2019-12-20 | 2019-12-20 | 加速计算设备建模的方法、电子设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111061513A CN111061513A (zh) | 2020-04-24 |
CN111061513B true CN111061513B (zh) | 2022-02-01 |
Family
ID=70301240
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911328867.9A Active CN111061513B (zh) | 2019-12-20 | 2019-12-20 | 加速计算设备建模的方法、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111061513B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101986264A (zh) * | 2010-11-25 | 2011-03-16 | 中国人民解放军国防科学技术大学 | 用于simd向量微处理器的多功能浮点乘加运算装置 |
CN106228238A (zh) * | 2016-07-27 | 2016-12-14 | 中国科学技术大学苏州研究院 | 现场可编程门阵列平台上加速深度学习算法的方法和系统 |
CN108376285A (zh) * | 2018-03-23 | 2018-08-07 | 中国科学院计算技术研究所 | 一种面向多变异体lstm神经网络加速器及数据处理方法 |
CN109032781A (zh) * | 2018-07-13 | 2018-12-18 | 重庆邮电大学 | 一种卷积神经网络算法的fpga并行系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10929746B2 (en) * | 2017-11-27 | 2021-02-23 | Samsung Electronics Co., Ltd. | Low-power hardware acceleration method and system for convolution neural network computation |
-
2019
- 2019-12-20 CN CN201911328867.9A patent/CN111061513B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101986264A (zh) * | 2010-11-25 | 2011-03-16 | 中国人民解放军国防科学技术大学 | 用于simd向量微处理器的多功能浮点乘加运算装置 |
CN106228238A (zh) * | 2016-07-27 | 2016-12-14 | 中国科学技术大学苏州研究院 | 现场可编程门阵列平台上加速深度学习算法的方法和系统 |
CN108376285A (zh) * | 2018-03-23 | 2018-08-07 | 中国科学院计算技术研究所 | 一种面向多变异体lstm神经网络加速器及数据处理方法 |
CN109032781A (zh) * | 2018-07-13 | 2018-12-18 | 重庆邮电大学 | 一种卷积神经网络算法的fpga并行系统 |
Non-Patent Citations (2)
Title |
---|
Matrix Multiply-Add in Min-plus Algebra on a Short-Vector SIMD Processor of Cell/B.E.;Kazuya Matsumoto等;《 2010 First International Conference on Networking and Computing》;20110120;第272-274页 * |
一种基于可编程逻辑器件的卷积神经网络协处理器设计;杨一晨等;《西安交通大学学报》;20180710;第52卷(第7期);第154-159页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111061513A (zh) | 2020-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11308398B2 (en) | Computation method | |
US10970628B2 (en) | Training neural networks represented as computational graphs | |
CN109086074B (zh) | 机器学习处理器及使用处理器执行向量复制指令的方法 | |
US11106976B2 (en) | Neural network output layer for machine learning | |
US20180260710A1 (en) | Calculating device and method for a sparsely connected artificial neural network | |
US20190370659A1 (en) | Optimizing neural network architectures | |
US11023807B2 (en) | Neural network processor | |
CN108292241A (zh) | 处理计算图 | |
WO2018212922A1 (en) | Asynchronous neural network training | |
CN112236784A (zh) | 修改机器学习模型以改善局部性 | |
CN112052958A (zh) | 模型训练的方法、装置、设备及计算机可读存储介质 | |
US20220004858A1 (en) | Method for processing artificial neural network, and electronic device therefor | |
US11275561B2 (en) | Mixed precision floating-point multiply-add operation | |
CN111026544A (zh) | 图网络模型的节点分类方法、装置及终端设备 | |
US20200380524A1 (en) | Transaction feature generation | |
CN111045728B (zh) | 一种计算装置及相关产品 | |
Corus et al. | On easiest functions for mutation operators in bio-inspired optimisation | |
CN110689045A (zh) | 一种深度学习模型的分布式训练方法及装置 | |
CN111061513B (zh) | 加速计算设备建模的方法、电子设备及可读存储介质 | |
US11604973B1 (en) | Replication of neural network layers | |
CN111445016B (zh) | 加速非线性数学计算的系统及方法 | |
Peres et al. | Faster convolutional neural networks in low density fpgas using block pruning | |
Pajuelo-Holguera et al. | Recommender system implementations for embedded collaborative filtering applications | |
CN115859016A (zh) | 基于处理器的运算方法、装置、计算机设备及存储介质 | |
CN116187422A (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 |