一种实现大语言模型SiLU函数计算的FPGA电路和实现方法与流程

摘要: 本发明属于计算机及人工智能,涉及一种实现大语言模型silu函数计算的fpga电路和实现方法。背景技术:1、在llama等大语言模型中,silu的主要作用包括:让...
一种实现大语言模型SiLU函数计算的FPGA电路和实现方法与流程

本发明属于计算机及人工智能,涉及一种实现大语言模型silu函数计算的fpga电路和实现方法。

背景技术:

1、在llama等大语言模型中,silu的主要作用包括:让梯度更顺畅地传播,提高训练稳定性;保留负数信息,增强模型的表达能力;提供较优的计算效率和收敛速度,相较于relu或gelu更适合transformer架构。

2、但是由于大语言模型的参数量巨大,现有技术中往往都是在高性能的cpu加gpu的硬件系统(例如x86 cpu配合英伟达的a100加速卡)中部署。而如果要在fpga上的部署,受限于fpga中查找表和内存等硬件资源,目前业界很少有把silu函数计算直接部署到fpga上的案例。

技术实现思路

1、为了解决现有技术存在的不足,本发明的目的是提供一种实现大语言模型silu函数计算的fpga电路和实现方法,避免了计算silu算子前后与cpu侧传输数据的时间和带宽的开销,提高了性能。该方法使用较少的查找表及bram资源,只是用移位和乘法等简单运算单元,占用fpga的资源较少,运行性能较高,更易于在fpga上部署,因此可以用较少资源,又可以不依赖于特定的fpga ip库,从而能适配各个厂商的fpga平台,实现silu函数的轻量化计算。

2、本发明提供了一种fpga电路,所述电路用于实现silu函数计算,包括:输入模块、secexp模块、倒数模块、乘法模块、输出模块;所述输入模块、所述secexp模块、所述倒数模块、所述乘法模块、所述输出模块之间电连接;

3、本发明中的fpga电路中,首先输入模块获得输入值,这一般来自于隐藏层的缓冲数据,然后用本发明中的secexp方法对输入值求secexp(-v)的值ev,接着倒数模块对1+ev值求倒数值inv,再后将输入值v与inv做乘法运算得到结果v,最后将v输出就完成了silu算子的运算。

4、在一个具体实施方式中,所述输入模块、所述secexp模块、所述倒数模块、所述乘法模块、所述输出模块之间可以通过寄存器和/或片上总线进行连接;

5、所述输入模块配置用于接收大语言模型的隐藏层数据,并作为输入值,并赋值给v;

6、所述secexp模块配置用于对输入值进行secexp指数计算获得指数值,并赋值给ev;

7、所述倒数模块配置用于获取和值1+ev的倒数,获得逆运算值,并赋值给inv;

8、所述乘法模块配置用于将所述倒数和原始隐藏层数据输入值v相乘,将乘积结果重新赋值给v;

9、所述输出模块配置用于接收重新赋值后的v并输出。

10、所述secexp模块进一步可以包括:cordic迭代单元、查找表单元、缩放控制单元;

11、所述cordic迭代单元用于通过移位和加减运算,在查表控制下逐步逼近指数函数值;

12、所述查找表单元用于存储预设的双曲函数参数tanhlut查找表;

13、所述缩放控制单元用于将超出范围的输入值进行缩放以适配cordic计算,并在结果输出前进行还原处理。

14、所述secexp模块通过一个或多个逻辑判断电路,基于输入值v的不同数值范围选择不同的cordic路径或返回近似常数值;

15、本发明还提供了一种大语言模型silu算子的fpga实现方法,所述实现方法利用上述的fpga电路,包括:

16、步骤一、将大语言模型中的隐藏层数据作为输入值赋给v;

17、步骤二、采用secexp方法求出secexp(-v)的值,赋给ev;

18、步骤三、在倒数模块中求出(1+ev)的倒数,然后赋给inv;

19、步骤四、在乘法模块中计算出步骤一中v和步骤三中inv的乘积,并重新赋值给v;

20、步骤五、返回经重新赋值后的输出值v。

21、步骤二中,所述secexp方法包括如下步骤:

22、步骤2.1.对返回值和临时变量赋初始值;在一个具体实施方式中,所述返回值和所述临时变量的初值均为0;

23、步骤2.2.根据不同的输入弧度值ang进行范围判断,直接用cordic方法计算或输出常数值,或将输入弧度值进行缩放后进行cordic方法计算再恢复原始尺度;

24、步骤2.3.分别返回经不同计算方法计算获得的输出值。

25、在步骤2.2对输入弧度值ang进行大小判断时,需要进行一次或多次判断并最终输出;

26、在一个具体实施方式中,secexp方法的步骤包括:

27、步骤2.2.1.判断输入弧度值是否属于(-1.05,-0.02]范围内,当属于该范围内时,通过cordic方法计算cordicexp(ang);当不属于上述范围时,直接进入下一次判断;

28、步骤2.2.2.判断输入弧度值是否属于(-0.02,0.0]范围内,当属于该范围时,返回常数值1.0;当不属于上述范围时,将输入弧度值除以16再计算cordicexp(ang),计算结果赋值给返回值和临时变量,然后对临时变量的值进行16次乘法运算,迭代后返回;

29、步骤2.2.3.输出步骤2.2.1或步骤2.2.2中计算获得的返回值ret。

30、本发明还提供了上述fpga电路,或上述实现方法将大语言模型中的silu函数实现于fpga的应用。

31、本发明还提供了一种硬件系统,所述硬件系统包括:存储器和处理器;所述存储器上存储有计算机程序,当所述计算机程序被所述处理器执行时,实现上述方法。

32、本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现上述方法。

33、本发明的有益效果包括:本发明突破了在fpga上部署大语言模型的资源限制问题,用较少的lut和bram资源实现silu算子的运算逻辑。通过对传统cordic exp算法的优化和改进,扩展了输入值域,提高了精度,使得在fpga平台上实现大语言模型的方案成为可能。在一个具体实施方式中,与传统查表方式相比,bram资源占用由128kb下降为128b,即约缩小1000倍;在某些输入值域范围内,比如:0到1,误差平均减少了1000倍;当资源占用、误差等均与现有技术有较大优化的情况下,lut占用量与传统的相当。

1.一种实现大语言模型silu函数计算的fpga电路,其特征在于,所述fpga电路包括依次电连接的输入模块、secexp模块、倒数模块、乘法模块、输出模块;

2.如权利要求1所述fpga电路,其特征在于,所述输入模块、所述secexp模块、所述倒数模块、所述乘法模块、所述输出模块之间通过寄存器和/或片上总线进行连接;

3.如权利要求1所述的fpga电路,其特征在于,所述secexp模块中进一步包括:cordic迭代单元、查找表单元、缩放控制单元;

4.如权利要求1所述的fpga电路,其特征在于,所述secexp模块通过一个或多个逻辑判断电路,基于输入值v的不同数值范围选择不同的cordic路径或返回近似常数值。

5.一种大语言模型silu函数计算的fpga实现方法,其特征在于,所述实现方法利用如权利要求1-4之任一项所述的fpga电路,包括如下步骤:

6.如权利要求5所述的实现方法,其特征在于,步骤二进一步包括:

7.如权利要求6所述的实现方法,其特征在于,步骤2.2中,通过对输入弧度值进行一次或多次大小判断后,输出经cordic计算获得的输出;

8.如权利要求1-4之任一项所述的fpga电路,或如权利要求5-7之任一项所述的实现方法将大语言模型中的silu函数实现于fpga的应用。

9.一种硬件系统,其特征在于,所述硬件系统包括:存储器和处理器;所述存储器上存储有计算机程序,当所述计算机程序被所述处理器执行时,实现如权利要求5-7任一项所述的方法。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如权利要求5-7任一项所述的方法。