FusedCausalConv1d【免费下载链接】ops-transformer本项目是CANN提供的transformer类大模型算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-transformer产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品×Atlas A2 训练系列产品/Atlas A2 推理系列产品×Atlas 200I/500 A2 推理产品×Atlas 推理系列产品×Atlas 训练系列产品×功能说明算子功能对序列执行因果一维卷积沿序列维度使用缓存数据长度为卷积核宽减1对各序列头部进行padding确保输出依赖当前及历史输入卷积完成后将当前序列尾部的数据长度为卷积核宽减1更新到缓存在因果一维卷积输出的基础上将原始输入加到输出上以实现残差连接。本算子支持以下场景场景一prefill场景x: [cu_seq_len, dim] weight: [K, dim]其中K3 conv_states: [-1, K-1, dim] query_start_loc: [batch1] cache_indices: [batch] initial_state_mode: [batch] bias: [dim]无作用 num_accepted_tokens: [batch]无作用 y: [cu_seq_len, dim] run_mode: 0其中cu_seq_len为batch内所有变长序列拼接后的总长度。场景二decode场景 - 变长序列x: [cu_seq_len, dim] weight: [K, dim]其中K3 conv_states: [-1, state_len, dim] query_start_loc: [batch1] cache_indices: [batch] initial_state_mode: [batch] bias: [dim]无作用 num_accepted_tokens: [batch]用于投机解码 y: [cu_seq_len, dim] run_mode: 1其中state_len必须大于所有batch中最大的token个数加1。场景三decode场景 - 固定batchx: [batch, m1, dim] weight: [K, dim]其中K3 conv_states: [-1, K-1m, dim] query_start_loc: [batch1]无作用 cache_indices: [batch] initial_state_mode: [batch] bias: [dim]无作用 num_accepted_tokens: [batch]用于投机解码m为投机token个数 y: [batch, m1, dim] run_mode: 1计算公式K是卷积核宽度固定为3L是原始序列长度dim是特征维度。缓存拼接$$ x[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维卷积$$ y[i, dim] \sum_{k0}^{K-1} w[k, dim] \cdot x[i k, dim] $$缓存更新$$ cacheState[i, dim] x[L i, dim], \quad i 0, 1, \dots, K-2 $$残差连接可选$$ y[i, dim] x[i, dim] $$参数说明参数名输入/输出/属性描述数据类型数据格式x输入输入序列对应公式中x。FLOAT16、BFLOAT16NDweight输入因果1维卷积核K固定为3对应公式中w。数据类型与x一致NDconv_states输入/输出缓存状态张量存储各序列的历史token数据各序列计算完成后原地更新对应公式中cacheState。数据类型与x一致NDquery_start_loc可选输入序列起始位置索引记录各序列在拼接张量x中的起始位置。query_start_loc[i]表示第i个序列的起始偏移。INT32NDcache_indices可选输入缓存索引指定每个序列对应的缓存状态在conv_states中的索引。INT32NDinitial_state_mode可选输入初始状态标志表示各序列是否使用缓存数据0零填充1使用缓存2使用缓存但前K-1个输出置0。INT32NDbias可选输入卷积的偏置。数据类型与x一致NDnum_accepted_tokens可选输入decode场景下的投机token个数。INT32NDactivation_mode属性激活函数类型取值为0、1、2。0None1silu2swish。INT-pad_slot_id属性用于跳过不需要参与计算的batch-1表示不跳过。当cache_indices[i]pad_slot_id时跳过该batch。INT-run_mode属性用于判断是prefill场景或decode场景取值为0、1。0prefill场景1decode场景。INT-residual_connection属性是否做残差连接取值为0、1。0不做残差连接1输出y和输入x相加后输出。INT-y输出输出序列shape与x一致对应公式中y。数据类型与x一致ND约束说明输入shape限制prefill场景x支持2维[cu_seq_len, dim]。weight必须是2维[K, dim]其中K固定为3。conv_states必须是3维[..., K-1, dim]第0维大小不固定且大于等于batch。cu_seq_len范围[batch, 65536]dim范围[128, 16384]且是128的倍数batch范围[1, 256]。decode场景固定batchx支持3维[batch, m1, dim]。weight必须是2维[K, dim]其中K固定为3。conv_states必须是3维[..., K-1m, 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。conv_states必须是3维[..., state_len, dim]第0维大小不固定且大于等于batchstate_len必须大于所有batch中最大的token个数加K-1。cu_seq_len范围[batch, batch*6]每个batch的token个数范围为[1, 6]。dim范围[128, 16384]且是128的倍数batch范围[1, 256]。输入值域限制query_start_loc是累计偏移量取值范围[0, cu_seq_len]长度为batch1query_start_loc[i]表示第i个序列的起始偏移query_start_loc[batch1]表示最后一个序列的结束位置。cache_indices长度为batch指定每个序列对应的缓存槽索引。num_accepted_tokens分为None和非None非None情况下长度为batch每个元素取值不超过当前batch的token个数且大于0。调用说明调用方式样例代码说明aclnn接口test_aclnn_fused_causal_conv1d通过aclnnFusedCausalConv1d调用FusedCausalConv1d算子【免费下载链接】ops-transformer本项目是CANN提供的transformer类大模型算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-transformer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考