开发者
下载
[object Object][object Object][object Object]undefined

产品形态详细说明请参见

[object Object]
  • 算子功能:完成融合SwiGLU门控MLP计算。该算子将第一个矩阵乘、SwiGLU激活以及第二个矩阵乘融合为一个两段式aclnn接口。
  • 计算公式:gate_up=xgate_up_weightgate\_up = x * gate\_up\_weight hidden=swiglu(gate_up)hidden = swiglu(gate\_up) y=hiddendown_weighty = hidden * down\_weight 其中,[object Object]会在最后一维均分为两部分,SwiGLU激活计算为:swiglu(gate_up)=silu(gate)upswiglu(gate\_up)=silu(gate) * up [object Object]表示[object Object]前半部分,[object Object]表示[object Object]后半部分。
[object Object]

SwigluGatedMlp主要由两个MatMul和一个SwiGLU激活组成,计算过程分为3步:

  1. [object Object],执行第一个矩阵乘。若[object Object]的shape为[object Object],则内部按二维矩阵[object Object]参与计算,其中[object Object][object Object]除最后一维外所有维度的乘积。
  2. [object Object],将[object Object]最后一维按2等分,计算[object Object],输出中间结果[object Object]
  3. [object Object],执行第二个矩阵乘,并将结果reshape为用户输出[object Object]的shape。

如下代码示例给出小算子和SwigluGatedMlp融合算子的对应关系:

[object Object]
[object Object]

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

  • [object Object]
  • [object Object]

说明

  • 算子执行接口对外屏蔽了算子内部实现逻辑以及不同代际NPU的差异,且开发者无需编译算子,实现了算子的精简调用。
  • 若开发者不使用算子执行接口调用算子,也可以定义基于Ascend IR的算子描述文件,通过ATC工具编译获得算子om文件,然后加载模型文件执行算子,详细调用方法可参见《应用开发指南》的章节。
[object Object]
  • 参数说明:

    • x(aclTensor*,计算输入):必选参数,Device侧的aclTensor,公式中的输入[object Object]。数据类型支持FLOAT16、FLOAT、BFLOAT16,支持ND,shape为[object Object],维度个数需大于等于2。
    • gateUpWeight(aclTensor*,计算输入):必选参数,Device侧的aclTensor,第一个MatMul的权重,公式中的[object Object]。数据类型需与[object Object]一致,支持FLOAT16、FLOAT、BFLOAT16,支持ND,shape为[object Object]
    • downWeight(aclTensor*,计算输入):必选参数,Device侧的aclTensor,第二个MatMul的权重,公式中的[object Object]。数据类型需与[object Object]一致,支持FLOAT16、FLOAT、BFLOAT16,支持ND,shape为[object Object]
    • cubeMathType(int64_t,计算输入):Host侧属性值,表示MatMul计算模式。当前支持取值0和1,默认值为1。
    • y(aclTensor*,计算输出):必选参数,Device侧的aclTensor,公式中的输出[object Object]。数据类型需与[object Object]一致,支持FLOAT16、FLOAT、BFLOAT16,支持ND,shape为[object Object]
    • workspaceSize(uint64_t*,出参):返回用户需要在Device侧申请的workspace大小。
    • executor(aclOpExecutor**,出参):返回op执行器,包含了算子计算流程。
    [object Object]
  • 返回值:

    返回aclnnStatus状态码,具体参见

    第一段接口完成入参校验,若出现以下错误码,则对应原因为:

    • 返回161001(ACLNN_ERR_PARAM_NULLPTR):如果传入参数是必选输入、输出或者出参,且是空指针,则返回161001。
    • 返回161002(ACLNN_ERR_PARAM_INVALID):输入或输出的数据类型、shape关系、[object Object]取值不在支持范围内。
[object Object]
  • 参数说明:

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

    返回aclnnStatus状态码,具体参见

[object Object]
  • 确定性计算:
    • aclnnSwigluGatedMlp默认为确定性实现,确定性计算配置不会影响该算子执行结果。
  • [object Object][object Object][object Object][object Object]均不支持空指针。
  • [object Object][object Object][object Object][object Object]的数据类型必须一致,当前支持FLOAT16、FLOAT、BFLOAT16。
  • [object Object]维度个数需大于等于2,[object Object][object Object]必须为2维。
  • [object Object]第0维必须等于[object Object]最后一维。
  • [object Object]第1维必须为正数且能被2整除。
  • [object Object]第0维必须等于[object Object]第1维的一半。
  • [object Object]维度个数必须与[object Object]一致;[object Object]除最后一维外的各维度必须与[object Object]一致;[object Object]最后一维必须等于[object Object]第1维。
  • [object Object]当前仅支持取值0和1。
[object Object]
[object Object]

参数解释请参见算子执行接口

[object Object]

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

[object Object]