接口功能:对序列执行因果一维卷积,沿序列维度使用缓存数据(长度为卷积核宽减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维卷积:
- 缓存更新:
- 残差连接(可选):
每个算子分为,必须先调用 [object Object]接口获取入参并计算所需workspace大小以及包含了算子计算流程的执行器,再调用[object Object]接口执行计算。
[object Object]
[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]。
- prefill场景:
输入值域限制:
- 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]