MindSpore中的算子使用

2025-10-06 00:48:21

1、MindSpore支持多种类型的算子,用户可根据算子支持列表查询。如果已有的算子不满足实际需求,用户也可以开发自定义算子。

在提供深度学习主要网络的算子的同时,MindSpore自带的张量引擎(Tensor Engine)支持用户使用Python DSL(Domain Specific Language)自定义算子,并且提供算子级的自动微分接口。通过使用 Python DSL,用户可以在Python中像写数学式子那样自定义算子。同时,如同数学中的微分符号一样简洁直观,张量引擎的算子自动微分接口也可以直接对DSL定义的算子进行微分。

2、正如下面的代码片所示,前项算子是用户用DSL自定义的算子。张量引擎(Tensor Engine)提供反向接口去推导出反向算子。对于多输入的算子,反向算子接口可以指定一个或者多个前项算子的输入,从而对输入进行自动微分计算。

MindSpore中的算子使用

3、MindSpore中三种算子:

正向算子

反向算子

自定义算子

接下来我们介绍一下自定义算子:

4、MindSpore支持如下自定义算子:

自定义Ascend(昇腾)算子

AI Core算子

AI CPU算子

自定义GPU算子

自定义CPU算子

AI Core算子是昇腾 AI 处理器计算核心的主要构成,负责执行向量和张量相关的计算密集型算子。AI CPU算子是AI CPU负责执行昇腾处理器中海思 SoC 的CPU类算子(包括控制算子、标量和向量等通用计算)。

MindSpore中同一个算子可能会同时拥有 AI Core 算子和AI CPU算子,框架会优先选择 AI Core 算子,没有 AI Core 算子或者不满足选择的场景下,会调用AI CPU算子。

5、自定义算子用于自动微分实例

      def sigmoid(x)

      #前项算子的DSL实现

      from te.lang.cce import vrec,vadds,vexp,vmuls

      res=vrec(vadds(vexp(vmuls(x,-1.0),1.0))

      return res

      def sigmoid _ad(dout,x)

      import te

      #前项算子引用

      out= sigmoid(x)

      #前项算子自动微分后生成的反向算子

      [dx]=te.differentiate(out,[x],dout)

      return dx

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢