昇腾社区首页
中文
注册

aclnnNsaCompress

产品支持情况

产品 是否支持
[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object] ×
[object Object]Atlas A2 训练系列产品[object Object]
[object Object]Atlas 800I A2 推理产品[object Object] ×
A200I A2 Box 异构组件 ×
[object Object]Atlas 200I/500 A2 推理产品[object Object] ×
[object Object]Atlas 推理系列产品[object Object] ×
[object Object]Atlas 训练系列产品[object Object] ×

功能说明

  • 算子功能:训练场景下,使用NSA Compress算法减轻long-context的注意力计算,实现在KV序列维度进行压缩。

  • 计算公式:

    Nsa Compress正向计算公式如下:

K~tcmp=fKcmp(k:t)={φ(kid+1:id+l)0itld}\tilde{K}_t^{\text{cmp}} = f_K^{\text{cmp}}(k_{:t}) = \left\{ \varphi(k_{id+1:id+l}) \bigg| 0 \leq i \leq \left\lfloor \frac{t-l}{d} \right\rfloor \right\}

函数原型

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

  • aclnnStatus aclnnNsaCompressGetWorkspaceSize(const aclTensor *input, const aclTensor *weight, const aclIntArray *actSeqLenOptional, char *layoutOptional, int64_t compressBlockSize, int64_t compressStride, int64_t actSeqLenType, aclTensor *output, uint64_t *workspaceSize aclOpExecutor **executor)
  • aclnnStatus aclnnNsaCompress(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)

aclnnNsaCompressGetWorkspaceSize

  • 参数说明:

    • input(aclTensor *,计算输入):Device侧的aclTensor,表示待压缩张量。shape支持[T, N, D], 数据类型支持FLOAT16、BFLOAT16,数据类型与weight数据类型一致,undefined支持ND;支持undefined, 不支持空Tensor。综合约束请见undefined

      说明: input数据排布格式支持从多种维度解读,其中B(Batch)表示输入样本批量大小、S(Seq-Length)表示输入样本序列长度、H(Head-Size)表示隐藏层的大小、N(Head-Num)表示多头数、D(Head-Dim)表示隐藏层最小的单元尺寸,且满足D=H/N; 其中T是B和S合轴紧密排列的数据(每个batch的actSeqLen)、B(Batch)表示输入样本批量大小、S(Seq-Length)表示输入样本序列长度、H(Head-Size)表示隐藏层的大小、N(Head-Num)表示多头数、D(Head-Dim)表示隐藏层最小的单元尺寸,且满足D=H/N。

    • weight(aclTensor *,计算输入):Device侧的aclTensor,表示压缩权重。shape支持[compressBlockSize, N],weight与input的shape满足broadcast关系, 数据类型与input数据类型保持一致,undefined支持ND, 支持undefined, 不支持空Tensor。综合约束请见undefined

    • actSeqLenOptional(aclIntArray *,计算输入):Host侧的aclIntArray,可选参数,数据类型支持INT64,undefined支持ND, 描述了每个Batch对应的S大小,当前不能为空;综合约束请见undefined

    • layoutOptional(char *,计算输入):Host侧的string,可选参数,代表输入input的数据排布格式,支持BSH、SBH、BSND、BNSD、TND。当前仅支持TND。

    • compressBlockSize(int64_t,计算输入):Host侧的int64_t,压缩滑窗大小。

    • compressStride(int64_t,计算输入):Host侧的int64_t,两次压缩滑窗间隔大小。

    • actSeqLenType(int64_t,计算输入):Host侧的int64_t,可取值0或1,0代表actSeqLenOptional中数值为前继batch的系列大小的cumsum结果(累积和),1代表actSeqLenOptional中数值为每个batch中序列大小,当前仅支持0。

    • output(aclTensor*,计算输出): Device侧的aclTensor,压缩后的结果。shape支持[T, N, D],数据类型与input保持一致,数据格式支持ND。支持undefined,不支持空Tensor。

    • workspaceSize(uint64_t*,出参):返回需要在Device侧申请的workspace大小。

    • executor(aclOpExecutor**,出参):返回op执行器,包含了算子计算流程。

  • 返回值:

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

    [object Object]

aclnnNsaCompress

  • 参数说明:

    • workspace(void*,入参):在Device侧申请的workspace内存地址。
    • workspaceSize(uint64_t,入参):在Device侧申请的workspace大小,由第一段接口aclnnNsaCompressGetWorkspaceSize获取。
    • executor(aclOpExecutor*,入参):op执行器,包含了算子计算流程。
    • stream(aclrtStream,入参):指定执行任务的Stream。
  • 返回值:

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

约束说明

  • 该接口与PyTorch配合使用时,需要保证CANN相关包与PyTorch相关包的版本匹配。
  • input和weight需要满足broadcast关系,input.shape[1]=weight.shape[1],不支持input、weight为空输入。
  • actSeqLenType目前仅支持取值0,即actSeqLenOptional需要是前缀和模式。
  • actSeqLenOptional目前不支持为空。
  • layoutOptional目前仅支持TND,此时input.shape[0]必须等于actSeqLenOptional[-1]。
  • input.shape[1]=weight.shape[1],需要小于等于128。
  • input.shape[2]必须是16的倍数,上限256。
  • weight.shape[0]=compressBlockSize,必须是16的倍数,上限128。
  • compressStride必须是16的整数倍,并且compressBlockSize>=compressStride。

调用示例

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

[object Object]