System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于循环神经网络的算子推理流程领域,特别涉及一种提升gru推理速度的方法。
技术介绍
1、现有技术中,gru全称是gate recurrent unit(门循环单元),它是循环神经网络(recurrent neural network,rnn)的一种。是为了解决长期记忆和反向传播中的梯度等问题而提出来的。rnn是一种用于处理序列数据的神经网络。在北京君正集成电路股份有限公司(简称:君正)的产品中,君正magik是一个为端侧ai应用场景打造的集模型训练、优化转换、部署推理于一体的全栈式深度学习开放平台,提升平台训练量化的算子支持广度与效率,循环神经网络是必须要支持的重要一部分,循环神经网络对处理音频与文字识别具有重要位置,gru算子属于训练神经网络的一种。而提升君正magik平台gru算子的推理速度与训练速度,目前存在的问题是现有gru算子推理速度要比官方(cudnn)的推理速度慢很多。
技术实现思路
1、为了解决上述问题,本申请的目的在于:本方法为提升gru算子的推理速度提出解决方法。具体地,本专利技术提供一种提升gru推理速度的方法,其中,gru算子的获得是通过addmm函数实现矩阵的乘运算,加bi as操作;通过sigmoid函数代码实现1/1+expf(data);通过tanh函数代码实现(expf(data)-expf(-data))/(expf(data)+expf(-data));计算r_t:sigmoid(addmm(x_t,w_i r,b_i r)+add
2、s1.计算gate_i;
3、直接求gru的输入x_t与权重w_i的矩阵乘,
4、实际实现流程中w_i r w_i z w_i n在一个变量中存储表示为w_iw_i=[w_i r,w_iz,w_i n]
5、同样的,
6、b_i=[b_i r,b_iz,b_i n]
7、gate_i=addmm(x_t,w_i,b_i)
8、gate_i存储的结果可视为[gate_i r,gate_i z,gate_i n]等同于
9、[addmm(x_t,w_i r,b_i r),addmm(x_t,w_i z,b_i z),addmm(x_t,w_i n,b_in)]
10、gate_i=matmul(x_t,w_i)+b_i,
11、gate_i的维度为(seq_length,batch_size,3×hidden_size),
12、正向记作f_gate_i,反向记作b_gate_i;
13、s2.计算gate_h;
14、gate_h=addmm(h,w_h,b_h)
15、gate_h存储的结果可视为[gate_hr,gate_hz,gate_hn]等同于
16、[addmm(h,w_hr,b_hr),addmm(h,w_hz,b_hz),addmm(h,w_hn,b_hn)]gate_h=matmul(h,w_h)+b_h,
17、gate_h的维度为(batch_size,3×hidden_size);
18、s3.计算gru;
19、这里将使用cuda核函数进行加速,核函数是指在gpu端运行的代码,即是规定gpu的各个线程访问哪个数据并执行什么计算;cuda从逻辑上将gpu线程分成了三个层次——线程格grid、线程块block和线程thread;具体流程:定义gird如下
20、batch_size:为当前输入数据的batch_size维度;
21、grid_y:为判断gru是否为双向,如果是则为2,如果不是则为1;
22、block:默认设置为512,表示为block=512;
23、dim3 grid(batch_size,grid_y)
24、通过实现核函数完成了对gate_i,gate_h索引取值和计算结果;
25、使用gru_unit_forward_kerenl<<<grid,block,0,stream>>>(参数)完成cuda核函数线程分配;
26、将线程块设置成(batch_size,direction),direction值表示单向或双向gru取值范围为[0,1];
27、线程thread设置成512;
28、获取对应值:
29、gate_i的维度为(seq_length,batch_size,3×hidden_size),设seq_index循环遍历seq_length长度,令i=threadidx.x,i<hidden_size;
30、将公式中x_t×w_ir+b_ir记作gate_ir,h×w_hr+b_hr记作gate_hr,gate_ir在gate_i对应值的索引值为:
31、seq_index×batch_size×3×hidden_size+blockidx.x×3×hidden_size+i,gate_hr在gate_h对应值的索引值为:blockidx.x×3×hidden_size+i,将公式中x_t×w_iz+b_iz记作gate_iz,h×w_hz+b_hz记作gate_hz,gate_iz在gate_i对应值的索引值为:
32、seq_index×batch_size×3×hidden_size+blockidx.x×3×hidden_size+i+hidden_size,
33、gate_hz在gate_h对应值的索引值为:
34、blockidx.x×3×hidden_size+i+hidden_size,
35、将公式中x_t×w_in+b_in记作gate_in,h×w_hn+b_hn记作gate_hn,
36、gate_in在gate_i对应值的索引值为:
37、seq_index×batch_size×3×hidden_size+blockidx.x×3×hidden_size+i+2×hidden_size,
38、gate_hn在gate_h对应值的索引值为:
39、blockidx.x×3×hidden_size+i+2×hidden_size,
40、套入gru算子公式,得:
41、r_t=sigmoid(gate_ir+ga本文档来自技高网...
【技术保护点】
1.一种提升GRU推理速度的方法,其中,GRU算子的获得是通过Addmm函数实现矩阵的乘运算,加bias操作;通过Sigmoid函数代码实现1/1+expf(data);通过tanh函数代码实现(expf(data)-expf(-data))/(expf(data)+expf(-data));
2.根据权利要求1所述的一种提升GRU推理速度的方法,其特征在于,所述步骤S1,进一步包括:
3.根据权利要求1所述的一种提升GRU推理速度的方法,其特征在于,所述步骤S2,进一步包括:
4.根据权利要求1所述的一种提升GRU推理速度的方法,其特征在于,所述步骤S3中,所述得:r_t=sigmoid(gate_ir+gate_hr),z_t=sigmoid(gate_iz+gate_hz),n_t=tanh(gate_in+r_t×gate_hn),h_t=(1-z_t)×n_t+z_t×h的具体流程如下:
5.根据权利要求1所述的一种提升GRU推理速度的方法,其特征在于,所述步骤S4中的赋值,进一步包括:
6.根据权利要求5所述
...【技术特征摘要】
1.一种提升gru推理速度的方法,其中,gru算子的获得是通过addmm函数实现矩阵的乘运算,加bias操作;通过sigmoid函数代码实现1/1+expf(data);通过tanh函数代码实现(expf(data)-expf(-data))/(expf(data)+expf(-data));
2.根据权利要求1所述的一种提升gru推理速度的方法,其特征在于,所述步骤s1,进一步包括:
3.根据权利要求1所述的一种提升gru推理速度的方法,其特征在于,所述步骤s2,进一步包括:
4.根据权利...
【专利技术属性】
技术研发人员:闫少甫,
申请(专利权)人:北京君正集成电路股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。