【2024CANN训练营第二季】算子及Ascend C概述

举报
JeffDing 发表于 2024/10/17 14:11:36 2024/10/17
【摘要】 什么是算子 算子在神经网络中的定义算子对应网络中层或者节点的计算逻辑 算子的数学含义算子在数学中的定义:一个函数空间到函数空间上的映射O:X->X;广义:对任何函数进行某一项操作都可以认为是一个算子。比如微分算子,不定积分算子等。常见算子举例:tanh、ReLU、sigmoid等。 算子的基本概念 算子名称算子的名称:用于标志网络中的某个算子,同一个网络中算子的名称需要保持唯一。 算子类型...

什么是算子

算子在神经网络中的定义

算子对应网络中层或者节点的计算逻辑
image.png

算子的数学含义

算子在数学中的定义:
一个函数空间到函数空间上的映射O:X->X;
广义:
对任何函数进行某一项操作都可以认为是一个算子。比如微分算子,不定积分算子等。
常见算子举例:tanh、ReLU、sigmoid等。
image.png

算子的基本概念

算子名称

算子的名称:用于标志网络中的某个算子,同一个网络中算子的名称需要保持唯一。

算子类型

网络中每一个算子根据算子类型进行算子实现的匹配,相同类型的算子的实现逻辑相同。在一个网络中同一类型的算子可能存在多个。

数据容器(Tensor)

算子在网络执行时,还需要一个重要的输入:数据,算子执行完后,也会有对应的数据输出,这种承载算子数据的容器定义为:张量(Tensor)

张量 Tensor

张量(Tensor)是存储算子输入数据与输出数据的容器,而张量描述符(TensorDesc)是对输入数据与输出数据的描述,张亮描述符的数据结构包括以下属性:

  • 名称:用于对Tensor进行索引,不同Tensor的name需要保持唯一
  • 形状:Tensor的形状,比如(10,)或者(1024,1024)或者(2,3,4)等。形式(i1,i2,…in),其中i1到in均为正整数。
  • 数据类型:指定Tensor对象的数据类型。例如:float16,float32.int8,int16,int32,unint8,unit16,bool等。不同计算操作支持的数据类型也不同。
  • 数据排布格式:数据的物理排布格式,定义了解数据的维度

什么是AscendC算子

基本概念

Ascend C算子是CANN针对算子开发场景推出的编程语言,通过多层接口抽象、自动并行计算、孪生调试等关键技术,极大提高算子开发效率,助力AI开发者低成本完成算子开发和模型调优部署。使用Ascend C编程语言开发的算子称之为Ascend C算子。

Ascend C自定义算子的优势

  • C/C++原始编程,最大化匹配用户的开发习惯
  • 编程模型屏蔽硬件差异,编程范式提高开发效率
  • 多层级API封装,从简单到灵活,兼顾易用与高效
  • 孪生调试,CPU侧模拟NPU侧的行为,可优化在CPU侧调试

什么场景需要开发自定义算子

一般情况下,无需自己开发算子,需要自己开发自定义算子的场景有以下:

  • 推理场景下,将第三方框架模型使用ATC工具转换为适配Ascend平台的离线模型时遇到不支持的算子。
  • 推理场景下,应用程序中的某些逻辑涉及到数学运算,开发者可以将这些操作通过自定义算子的方式进行实现,然后在APP中对算子进行调用,从而利用Ascend进行加速
  • 训练场景下,将第三方框架的网络训练脚本迁移到Ascend平台遇到了不支持算子
  • 网络调优时,发现某算子性能较低,想重新开发一个高性能算子替换性能较低的算子。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。