开发者
下载
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:完成chunk版的Gated Delta Rule计算。

  • 计算公式:

    Gated Delta Rule(门控Delta规则,GDR)是一种应用于循环神经网络的算子,也被应用于一种线性注意力机制中。在每个时间步 tt,GDR根据当前的输入 qtq_tktk_tvtv_t、上一个隐藏状态 St1S_{t-1}、衰减系数 αt\alpha_t 以及更新强度 βt\beta_t,计算当前的注意力输出 oto_t 和新的隐藏状态 StS_t,其计算公式如下:

    St:=St1(αt(IβtktktT))+βtvtktT=αtSt1+βt(vtαtSt1kt)ktTS_t := S_{t-1}(\alpha_t(I - \beta_t k_t k_t^T)) + \beta_t v_t k_t^T = \alpha_t S_{t-1} + \beta_t (v_t - \alpha_t S_{t-1}k_t)k_t^T ot:=St(qtscale)o_t := S_t (q_t \cdot scale)

    其中,St1,StRDv×DkS_{t-1},S_t \in \mathbb{R}^{D_v \times D_k}qt,ktRDkq_t, k_t \in \mathbb{R}^{D_k}vtRDvv_t \in \mathbb{R}^{D_v}αtR\alpha_t \in \mathbb{R}βtR\beta_t \in \mathbb{R}otRDvo_t \in \mathbb{R}^{D_v}

    Chunked Gated Delta Rule是GDR的chunk版实现(),它通过将输入序列切块,实现了一定的并行效果,在长上下文场景其计算效率相对Recurrent Gated Delta Rule更高,适用于prefill阶段。输入一个长度为L的序列,该算子可以计算出每一步的输出 ot,t{1,..,L}o_t, t \in \{1, .., L\} 以及最终的状态矩阵 SLS_L

[object Object]

每个算子分为,必须先调用“aclnnChunkGatedDeltaRuleGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnChunkGatedDeltaRule”接口执行计算。

[object Object]
[object Object]
[object Object]
  • 参数说明

    [object Object]

    其中 BB 表示batch size,令 LiL_i 表示第i个序列的长度,则 T=iBLiT=\sum_i^B L_i 表示累积序列长度。NkN_k 表示key的头数,NvN_v 表示value的头数,DkD_k 表示key的隐藏层维度,DvD_v 表示value的隐藏层维度。

  • 返回值

    aclnnStatus:返回状态码,具体参见

    第一段接口完成入参校验,出现以下场景时报错:

    [object Object]
[object Object]
  • 参数说明

    [object Object]
  • 返回值 aclnnStatus:返回状态码,具体参见

[object Object]
  • 确定性计算:
    • aclnnChunkGatedDeltaRule默认确定性实现。
  • 维度约束:
    • 0<Nv640<Nk640 \lt Nv \le 64,0 \lt Nk \le 64,且 NvmodNk=0Nv \bmod Nk = 0
    • 0<Dv1280 \lt Dv \le 128, 0<Dk1280 \lt Dk \le 128
    • B>0B \gt 0, T>0T \gt 0
  • 由于算法特性,用户需保障以下数值约束,否则计算结果可能出现溢出:
    • 0<query<10 < query < 1
    • 0<key<10 < key < 1
    • g<0g < 0
    • 0<beta<10 < beta < 1
[object Object]

示例代码如下,仅供参考,具体编译和执行过程请参考

[object Object]