Skip to main content

aclnn返回码

aclnnFlashAttentionScoreGrad

接口原型

每个算子有两段接口,必须先调用“aclnnFlashAttentionScoreGradGetWorkspaceSize”接口获取入参并根据计算流程计算所需workspace大小,再调用“aclnnFlashAttentionScoreGrad”接口执行计算。两段式接口如下:

  • **第一段接口:**aclnnStatus aclnnFlashAttentionScoreGradGetWorkspaceSize(const aclTensor *query, const aclTensor *key, const aclTensor *value, const aclTensor *dy, const aclTensor *pseShift, const aclTensor *dropMask, const aclTensor *paddingMask, const aclTensor *attenMask, const aclTensor *softmaxMax, const aclTensor *softmaxSum, const aclTensor *softmaxIn, const aclTensor *attentionIn, const aclTensor *dq, const aclTensor *dk, const aclTensor *dv, const aclTensor *dpse, double scaleValue, double keepProb, int64_t precTockens, int64_t nextTockens, int64_t headNum, string *inputLayout, int32_t innerPrecise, uint64_t *workspaceSize, aclOpExecutor **executor)
  • **第二段接口:**aclnnStatus aclnnFlashAttentionScoreGrad(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)

功能描述

  • 算子功能:训练场景下计算注意力的反向输出,即aclnnFlashAttentionScore的反向计算。

  • 计算公式:

    已知注意力的正向计算公式为

    为方便表达,以变量S和P表示计算公式:

    那么注意力的反向计算公式为

aclnnFlashAttentionGradGetWorkspaceSize

  • 接口定义:

    aclnnStatus aclnnFlashAttentionScoreGradGetWorkspaceSize(const aclTensor *query, const aclTensor *key, const aclTensor *value, const aclTensor *dy, const aclTensor *pseShift, const aclTensor *dropMask, const aclTensor *paddingMask, const aclTensor *attenMask, const aclTensor *softmaxMax, const aclTensor *softmaxSum, const aclTensor *softmaxIn, const aclTensor *attentionIn, const aclTensor *dq, const aclTensor *dk, const aclTensor *dv, const aclTensor *dpse,double scaleValue, double keepProb, int64_t preTockens, int64_t nextTockens, int64_t headNum, string *inputLayout, int32_t innerPrecise, uint64_t *workspaceSize, aclOpExecutor **executor)

  • 参数说明:

    • query:Device侧的aclTensor,公式中的输入Q,数据类型支持FLOAT、FLOAT16、BFLOAT16,数据格式支持ND。

    • key:Device侧的aclTensor,公式中的输入K,数据类型支持FLOAT、FLOAT16、BFLOAT16,数据格式支持ND。

    • value:Device侧的aclTensor,公式中的输入V,数据类型支持FLOAT、FLOAT16、BFLOAT16,数据格式支持ND。

    • dy:Device侧的aclTensor,公式中的输入dY,数据类型支持FLOAT、FLOAT16、BFLOAT16,数据格式支持ND。

    • pseShift:Device侧的aclTensor,公式中的输入pse,可选参数,表示位置编码。数据类型支持FLOAT、FLOAT16,数据格式支持ND。

    • dropMask:Device侧的aclTensor,可选属性,数据类型支持FLOAT、FLOAT16,数据格式支持ND。

    • paddingMask:Device侧的aclTensor,可选属性,数据类型支持FLOAT、FLOAT16,数据格式支持ND。

    • attenMask:Device侧的aclTensor,可选属性,代表下三角全为0上三角全为负无穷的倒三角mask矩阵,数据类型支持BOOL,数据格式支持ND。

    • softmaxMax:Device侧的aclTensor,注意力正向计算的中间输出,数据类型支持FLOAT、FLOAT16,数据格式支持ND。

    • softmaxSum:Device侧的aclTensor,注意力正向计算的中间输出,数据类型支持FLOAT、FLOAT16,数据格式支持ND。

    • softmaxIn:Device侧的aclTensor,注意力正向计算的中间输出,数据类型支持FLOAT、FLOAT16,数据格式支持ND。

    • attentionIn:Device侧的aclTensor,注意力正向计算的最终输出attentionOut,数据类型支持FLOAT、FLOAT16、BFLOAT16,数据格式支持ND。

    • dq:Device侧的aclTensor,公式中的dQ,表示query的梯度,计算输出,数据类型支持FLOAT、FLOAT16、BFLOAT16,数据格式支持ND。

    • dk:Device侧的aclTensor,公式中的dK,表示key的梯度,计算输出,数据类型支持FLOAT、FLOAT16、BFLOAT16,数据格式支持ND。

    • dv:Device侧的aclTensor,公式中的dV,表示value的梯度,计算输出,数据类型支持FLOAT、FLOAT16、BFLOAT16,数据格式支持ND。

    • dpse:Device侧的aclTensor,公式中的d(pse),表示pse的梯度,计算输出,数据类型支持FLOAT、FLOAT16、BFLOAT16,数据格式支持ND。

    • scaleValue:Host侧的double,公式中d开根号的倒数,代表缩放系数,作为计算流中Muls的scalar值,数据类型支持DOUBLE。

    • keepProb:Host侧的double,可选参数,代表dropMask中1的比例,数据类型支持FLOAT32。

    • preTockens:Host侧的int64_t,用于稀疏计算的参数,可选参数,数据类型支持INT64。

    • nextTockens:Host侧的int64_t,用于稀疏计算的参数,可选参数,数据类型支持INT64。

    • headNum:Host侧的int64_t,代表head个数,数据类型支持INT64。

    • inputLayout:Host侧的string,代表输入query、key、value的数据排布格式,支持BSH、SBH、BSND、BNSD。

      :::note 说明 query、key、value数据排布格式支持从多种维度解读,其中B(Batch)表示输入样本批量大小、S(Seq-Length)表示输入样本序列长度、H(Head-Size)表示隐藏层的大小、N(Head-Num)表示多头数、D(Head-Dim)表示隐藏层最小的单元尺寸,且满足D=H/N。 :::

    • innerPrecise:Host侧的int32_t,数据类型支持INT32,内部计算精度模式,其中0表示为高精度,1表示为高性能。

    • workspaceSize:返回用户需要在Device侧申请的workspace大小。

    • executor:返回op执行器,包含了算子计算流程。

  • 返回值:

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

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

    • 返回161001(ACLNN_ERR_PARAM_NULLPTR):传入的query、key、value、dy、dq、dk、dv是空指针。
    • 返回161002(ACLNN_ERR_PARAM_INVALID):query、key、value、dy、pseShift、dropMask、paddingMask、attenMask、softmaxMax、softmaxSum、softmaxIn、attentionIn、dq、dk、dv的数据类型和数据格式不在支持的范围内。 :::

aclnnFlashAttentionScoreGrad

  • 接口定义:

    aclnnStatus aclnnFlashAttentionScoreGrad(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)

  • 参数说明:

    • workspace:在Device侧申请的workspace内存起址。
    • workspaceSize:在Device侧申请的workspace大小,由第一段接口aclnnFlashAttentionScoreGradGetWorkspaceSize获取。
    • executor:op执行器,包含了算子计算流程。
    • stream:指定执行任务的AscendCL stream流。
  • 返回值:

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

约束与限制

关于数据shape的约束,以inputLayout的BSND、BNSD为例(BSH、SBH下H=N*D),其中

  • B:取值范围为1~256。
  • N:取值范围为1~256。
  • S:取值范围为1~32K,且为16的倍数。
  • D:取值为64、96、128、256。

父主题: 融合类算子接口

aclnnMoeFFN

接口原型

每个算子有两段接口,必须先调用“aclnnMoeFFNGetWorkspaceSize”接口获取入参并根据计算流程计算所需workspace大小,再调用“aclnnMoeFFN”接口执行计算。两段式接口如下:

  • 第一段接口:aclnnStatus aclnnMoeFFNGetWorkspaceSize(const aclTensor *x, const aclIntArray *expertTokens, const aclTensor *weight1, const aclTensor *bias1, const aclTensor *weight2, const aclTensor *bias2, const aclTensor *scale, const aclTensor *offset, const aclTensor *deqScale1, const aclTensor *deqScale2, char *activation, const aclTensor *y, uint64_t *workspaceSize, aclOpExecutor **executor)
  • **第二段接口:****aclnnStatus aclnnMoeFFN(**void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)

功能描述

  • 算子功能:MoE(Mixture-of-Experts, 混合专家系统)是一种用于训练万亿参数量级模型的技术。MoE将预测建模任务分解为若干子任务,在每个子任务上训练一个专家模型(Expert Model),开发一个门控模型(Gating Model),该模型根据要预测的输入来学习信任哪个专家,最终综合多个专家计算结果作为预测结果。

  • 计算公式:

    假设输入样本为x,专家数为N,G(x)代表门控模型函数,FFEi(x)代表第i个专家的输出,所有专家的加权输出为

aclnnMoeFFNGetWorkspaceSize

  • 接口定义:

    aclnnStatus aclnnMoeFFNGetWorkspaceSize(const aclTensor *x, const aclIntArray *expertTokens, const aclTensor *weight1, const aclTensor *bias1, const aclTensor *weight2, const aclTensor *bias2, const aclTensor *scale, const aclTensor *offset, const aclTensor *deqScale1, const aclTensor *deqScale2, char *activation, const aclTensor *y, uint64_t *workspaceSize, aclOpExecutor **executor)

  • 参数说明:

    • x:Device侧的aclTensor,公式中的输入样本x,数据类型支持FLOAT16、INT8,数据格式支持ND,只支持输入为2维。
    • expertTokens:Host侧的aclIntArray类型,代表各专家的评估权重,数据类型支持INT64,数据格式支持ND,支持的最大长度为256个。
    • weight1:Device侧的aclTensor,专家的评估数据,数据类型支持FLOAT16、INT8,数据格式支持ND,输入为3维。
    • bias1:Device侧的aclTensor,专家的评估数据修正值,可选参数,数据类型支持FLOAT16、INT8,数据格式支持ND。
    • weight2:Device侧的aclTensor,专家的评估数据,数据类型支持FLOAT16、INT8,数据格式支持ND。
    • bias2:Device侧的aclTensor,专家的评估数据修正值,可选参数,数据类型支持FLOAT16、INT8,数据格式支持ND。
    • scale:Device侧的aclTensor,量化参数,可选,数据类型支持FLOAT,数据格式支持ND,一维向量,元素个数与expertTokens长度一致。
    • offset:Device侧的aclTensor,量化参数,可选,数据类型支持FLOAT,数据格式支持ND,一维向量,元素个数与expertTokens长度一致。
    • deqScale1:Device侧的aclTensor,第一个分组matmul的反量化参数,可选,数据类型支持UINT64,数据格式支持ND,输入2维,第一维等于expertTokens长度,第二维等于weight1第三维度。
    • deqScale2:Device侧的aclTensor,第二个分组matmul的反量化参数,可选,数据类型支持UINT64,数据格式支持ND,输入2维,第一维等于expertTokens长度,第二维等于weight2第三维度。
    • activation:Host侧的属性值,代表使用的激活函数,当前仅支持fastgelu。
    • y:Device侧的aclTensor,公式中的输出y,数据类型支持FLOAT、FLOAT16,数据格式支持ND。
    • workspaceSize:返回用户需要在Device侧申请的workspace大小。
    • executor:返回op执行器,包含了算子计算流程。
  • 返回值:

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

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

    • 返回161001(ACLNN_ERR_PARAM_NULLPTR):传入的x、expertTokens、weight1、y或executor是空指针。
    • 返回161002(ACLNN_ERR_PARAM_INVALID):x、expertTokens、weight1、bias1、weight2、bias2、y的数据类型和数据格式不在支持的范围内。 :::

aclnnMoeFFN

  • 接口定义:

    aclnnStatus aclnnMoeFFN(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)

  • 参数说明:

    • workspace:在Device侧申请的workspace内存起址。
    • workspaceSize:在Device侧申请的workspace大小,由第一段接口aclnnMoeFFNGetWorkspaceSize获取。
    • executor:op执行器,包含了算子计算流程。
    • stream:指定执行任务的AscendCL stream流。
  • 返回值:

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

约束与限制

  • 专家数据的总数需要与BS(其中B表示输入样本批量大小、S表示输入样本序列长度)长度保持一致;
  • 专家个数不超过256个;
  • 当前MoeFFN实现过程中默认使用fastGelu激活函数,不支持gelu激活函数。

父主题: 融合类算子接口

aclnn返回码

调用算子接口时,常见的接口返回码如表1所示。

表1 返回状态码

状态码名称状态码值状态码说明
ACLNN_SUCCESS0成功。
ACLNN_ERR_PARAM_NULLPTR161001参数校验错误,参数中存在非法的nullptr。
ACLNN_ERR_PARAM_INVALID161002参数校验错误,如输入的两个数据类型不满足输入类型推导关系。 详细的错误消息,可以通过aclGetRecentErrMsg接口获取(该接口在acl.h中)。
ACLNN_ERR_RUNTIME_ERROR361001API内存调用npu runtime的接口异常。
ACLNN_ERR_INNER_XXX561xxxAPI发生内部异常,详细的错误消息,可以通过aclGetRecentErrMsg接口获取。请根据报错排查问题,或者联系技术支持。(您可以获取日志后单击Link联系技术支持。)

更多关于ACLNN_ERR_INNER_XXX类状态码的说明如表2所示。

表2 异常状态码

状态码名称状态码值状态码说明
ACLNN_ERR_INNER561000内部异常:API发生内部异常。
ACLNN_ERR_INNER_INFERSHAPE_ERROR561001内部异常:API内部进行输出shape推导发生错误。
ACLNN_ERR_INNER_TILING_ERROR561002内部异常:API内部做npu kernel的tiling时发生异常。
ACLNN_ERR_INNER_FIND_KERNEL_ERROR561003内部异常:API内部做查找npu kernel异常(可能因为opp kernel的包未安装)。
ACLNN_ERR_INNER_CREATE_EXECUTOR561101内部异常:API内部创建aclOpExecutor失败(可能因为操作系统异常)。
ACLNN_ERR_INNER_NOT_TRANS_EXECUTOR561102内部异常:API内部未调用uniqueExecutor ReleaseTo。
ACLNN_ERR_INNER_NULLPTR561103内部异常:aclnn API内部发生异常,出现了nullptr的异常。
ACLNN_ERR_INNER_WRONG_ATTR_INFO_SIZE561104内部异常:aclnn API内部发生异常,算子的属性个数异常。
ACLNN_ERR_INNER_KEY_CONFILICT561105内部异常:aclnn API内部发生异常,算子的kernel匹配的hash key发生冲突。
ACLNN_ERR_INNER_INVALID_IMPL_MODE561106内部异常:aclnn API内部发生异常,算子的实现模式参数错误。
ACLNN_ERR_INNER_OPP_PATH_NOT_FOUND561107内部异常:aclnn API内部发生异常,没有检测到需要配置的环境变量ASCEND_OPP_PATH。
ACLNN_ERR_INNER_LOAD_JSON_FAILED561108内部异常:aclnn API内部发生异常,加载算子kernel库中算子信息json文件失败。
ACLNN_ERR_INNER_JSON_VALUE_NOT_FOUND561109内部异常:aclnn API内部发生异常,加载算子kernel库中算子信息json文件的某个字段失败。
ACLNN_ERR_INNER_JSON_FORMAT_INVALID561110内部异常:aclnn API内部发生异常,算子kernel库中算子信息json文件的format填写为非法值。
ACLNN_ERR_INNER_JSON_DTYPE_INVALID561111内部异常:aclnn API内部发生异常,算子kernel库中算子信息json文件的dtype填写为非法值。
ACLNN_ERR_INNER_OPP_KERNEL_PKG_NOT_FOUND561112内部异常:aclnn API内部发生异常,没有加载到算子的二进制kernel库。
ACLNN_ERR_INNER_OP_FILE_INVALID561113内部异常:aclnn API内部发生异常,加载算子json文件字段时,发生异常。
ACLNN_ERR_INNER_ATTR_NUM_OUT_OF_BOUND561114内部异常:aclnn API内部发生异常,算子的属性个数与算子信息json中不一致,超过了json中指定的attr个数。
ACLNN_ERR_INNER_ATTR_LEN_NOT_ENOUGH561115内部异常:aclnn API内部发生异常,算子的属性个数与算子信息json中不一致,少于json中指定的attr个数。
ACLNN_ERR_INNER_INPUT_NUM_IN_JSON_TOO_LARGE561116内部异常:aclnn API内部发生异常,算子的输入个数超出32的限制。
ACLNN_ERR_INNER_INPUT_JSON_IS_NULL561117内部异常:aclnn API内部发生异常,算子信息json文件中,不存在对输出的信息描述。
ACLNN_ERR_INNER_STATIC_WORKSPACE_INVALID561118内部异常:aclnn API内部发生异常,解析静态二进制json文件中的workspace信息时,发生异常。
ACLNN_ERR_INNER_STATIC_BLOCK_DIM_INVALID561119内部异常:aclnn API内部发生异常,解析静态二进制json文件中的核数使用信息时,发生异常。

父主题: 融合类算子接口

aclopRegisterCompileFunc

函数功能

动态Shape场景下,注册算子选择器,用于在算子执行时,能针对不同shape,选择相应的Tiling策略。

约束说明

如果某算子已注册算子选择器,则不允许重新注册,如果需要变更算子选择器,必须先调用aclopUnregisterCompileFunc接口取消注册,然后再调用aclopRegisterCompileFunc接口重新注册。

函数原型

aclError aclopRegisterCompileFunc(const char *opType, aclopCompileFunc func)

参数说明

参数名输入/输出说明
opType输入算子类型的指针。
func输入算子选择器回调函数,函数定义:
text<br>typedef aclError (*aclopCompileFunc)(int numInputs, const aclTensorDesc *const inputDesc[], int numOutputs, const aclTensorDesc *const outputDesc[], const aclopAttr *opAttr, aclopKernelDesc *aclopKernelDesc);<br>

返回值说明

返回0表示成功,返回其它值表示失败。

父主题: 算子编译

aclopUnregisterCompileFunc

函数功能

动态Shape场景下,取消注册算子选择器。

函数原型

aclError aclopUnregisterCompileFunc(const char *opType)

参数说明

参数名输入/输出说明
opType输入算子类型的指针。

返回值说明

返回0表示成功,返回其它值表示失败。

父主题: 算子编译

在线提单