开发者
资源
[object Object]

[object Object][object Object]undefined
[object Object]
  • 接口功能:对序列执行因果一维卷积,沿序列维度使用缓存数据(长度为卷积核宽减1)对各序列头部进行padding,确保输出依赖当前及历史输入;卷积完成后,将当前序列尾部的数据(长度为卷积核宽减1)更新到缓存;在因果一维卷积输出的基础上,将原始输入加到输出上以实现残差连接。[object Object]

  • 支持以下场景:

    • 场景一(prefill场景):

      [object Object]

      其中cu_seq_len为batch内所有变长序列拼接后的总长度。

    • 场景二(decode场景 - 变长序列):

      [object Object]

      其中state_len必须大于所有batch中最大的token个数加1。

    • 场景三(decode场景 - 固定batch):

      [object Object]
  • 计算公式:

    K是卷积核宽度(固定为3),L是原始序列长度,dim是特征维度。

    1. 缓存拼接:
    x[i,dim]={cacheState[i,dim],0i<K1x[i(K1),dim],K1i<L+K1x'[i, dim] = \begin{cases} cacheState[i, dim], & 0 \leq i < K-1 \\ x[i - (K-1), dim], & K-1 \leq i < L + K - 1 \end{cases}
    1. 因果1维卷积:
    y[i,dim]=k=0K1w[k,dim]x[i+k,dim]y[i, dim] = \sum_{k=0}^{K-1} w[k, dim] \cdot x'[i + k, dim]
    1. 缓存更新:
    cacheState[i,dim]=x[L+i,dim],i=0,1,,K2cacheState[i, dim] = x'[L + i, dim], \quad i = 0, 1, \dots, K-2
    1. 残差连接(可选):
    y[i,dim]+=x[i,dim]y[i, dim] += x[i, dim]
[object Object]

每个算子分为,必须先调用 [object Object]接口获取入参并计算所需workspace大小以及包含了算子计算流程的执行器,再调用[object Object]接口执行计算。

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

    [object Object]
  • 返回值

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

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

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

    [object Object]
  • 返回值:

    返回aclnnStatus状态码,具体参见

[object Object]
  • 确定性计算:

    • aclnnFusedCausalConv1d默认确定性实现。
  • 输入shape限制:

    • prefill场景:
      • x支持2维[cu_seq_len, dim]。
      • weight必须是2维[K, dim],其中K固定为3。
      • convStates必须是3维[..., K-1, dim],第0维大小不固定且大于等于batch。
      • cu_seq_len范围[batch, 65536],dim范围[128, 16384]且是128的倍数,batch范围[1, 256]。
    • decode场景(固定batch):
      • x支持3维[batch, m+1, dim]。
      • weight必须是2维[K, dim],其中K固定为3。
      • convStates必须是3维[..., K-1+m, dim],第0维大小不固定且大于等于batch。
      • m范围[0, 5],dim范围[128, 16384]且是128的倍数,batch范围[1, 256]。
    • decode场景(变长序列):
      • x支持2维[cu_seq_len, dim]。
      • weight必须是2维[K, dim],其中K固定为3。
      • convStates必须是3维[..., state_len, dim],第0维大小不固定且大于等于batch,state_len必须大于所有batch中最大的token个数加1。
      • cu_seq_len范围[batch, batch*6],每个batch的token个数范围为[1, 6]。dim范围[128, 16384]且是128的倍数,batch范围[1, 256]。
  • 输入值域限制:

    • queryStartLoc是累计偏移量,取值范围[0, cu_seq_len],长度为batch+1,queryStartLoc[i]表示第i个序列的起始偏移,queryStartLoc[batch+1]表示最后一个序列的结束位置。
    • cacheIndices长度为batch,指定每个序列对应的缓存槽索引。
    • numAcceptedTokens分为None和非None,非None情况下长度为batch,每个元素取值不超过当前batch的token个数且大于0。
[object Object]

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

[object Object]