【AI系统】CANN 算子类型

CANN 算子类型

算子是编程和数学中的重要概念,它们是用于执行特定操作的符号或函数,以便处理输入值并生成输出值。本文将会介绍 CANN 算子类型及其在 AI 编程和神经网络中的应用,以及华为 CANN 算子在 AI CPU 的详细架构和开发要求。

算子基本介绍

一元算子通过对单个操作数进行操作,如取反或递增,而二元算子对两个操作数执行操作,例如加法或赋值。关系算子用于比较值之间的关系,逻辑算子用于在逻辑表达式中组合条件。位运算符操作二进制位,而赋值算子将值分配给变量。

算子在编程语言中定义了基本操作,而在数学中,它们描述了对数学对象的操作,如微积分中的导数和积分算子。算子的理解对于正确理解和编写代码以及解决数学问题至关重要。

在神经网络中,算子通常代表计算图中的张量处理节点,如卷积算子,全连接算子,激活算子等,这些算子无一例外地接受张量(及配置信息)作为输入,输出对张量的处理结果。

要注意,并非所有算子都具备完整的数学含义或数学表达,如调整数据排布格式的算子、数据类型转换的算子、广播与归纳类算子等等,属于纯编程操作,并无十分具体的数学含义。

在面向神经网络做优化的工作中,算子的开发与优化是一项较为重要的任务,许多新发明的神经网络或算法通常包含着新的算子的设计;另外,为了使这些算子达到最大的性能指标,算子的实现通常还要与具体的硬件平台相结合,同样一项算子操作(如卷积),在 CPU、GPU、NPU、TPU 上的实现存在着千差万别。

同一张神经网络中,不同算子适合运行的硬件平台也不尽相同,如在经典的 Host-Device 结构中,大部分涉及大量矩阵/向量计算的算子均适合放在专用计算内核上实施计算,但也不排除某些算子有过多分支、上下文切换等操作,适合放在 CPU 性质的设备上进行计算,下面将重点讨论这个话题。

CANN 算子体系

CANN 是华为针对 AI 场景推出的异构计算架构,对上支持多种 AI 框架,对下服务 AI 处理器与编程,发挥承上启下的关键作用,是提升昇腾 AI 处理器计算效率的关键平台。而 CANN 算子又包括两类,分别是 AI Core 算子和 AI CPU 算子。与算子名称相符,两种算子分别执行在昇腾 AI 处理器的 AI Core 和 AI CPU 上,昇腾 AI 处理器中 AI Core 与 AI CPU 的相互关联如下图所示:

在这里插入图片描述

其中,AI Core 是昇腾 AI 处理器的计算核心,负责执行矩阵、向量、标量计算密集的算子任务;AI CPU 负责执行不适合在 AI Core 上运行的算子任务,即非矩阵类复杂计算。

大多数场景下的算子开发均为针对 AI Core 的算子开发任务,然而昇腾框架并非只能进行 AI Core 算子开发,也可以进行 AI CPU 算子开发。AI CPU 负责执行昇腾 AI 处理器的 CPU 类算子(包括控制算子、标量和向量等通用计算)。

AI CPU 算子涉及组件

AI CPU 算子编译执行所涉及组件如下:

  • GE(Graph Engine):Graph Engine 是基于昇腾 AI 软件栈对不同的机器学习框架提供统一的 IR 接口,对接上层网络模型框架,例如 Tensorflow、PyTorch 等,GE 的主要功能包括图准备、图拆分、图优化、图编译、图加载、图执行和图管理等(此处图指网络模型拓扑图)。

  • AI CPU Engine:AI CPU 子图编译引擎,负责对接 GE,提供 AI CPU 算子信息库,进行算子注册、算子内存需求计算、子图优化和 Task 生成的能力。

  • AI CPU Schedule:AI CPU 的模型调度器,与 Task Schedule 配合完成 NN 模型的调度和执行。

  • AI CPU Processor:AI CPU 的 Task 执行器,完成算子运算。AI CPU Processor 包含算子实现库,算子实现库完成 AI CPU 算子的执行实现。

  • Data Processor:训练场景下,用于进行训练样本的数据预处理。

AI CPU 适用场景

在以下三种场景下,可以使用 AI CPU 的方式实现自定义算子:

  • 场景一:不适合跑在 AI Core 上的算子,例如非矩阵类的复杂计算,逻辑比较复杂的分支密集型算子等;例如离散数据类的计算,资源管理类的计算,依赖随机数生成类的计算。

  • 场景二:AI Core 不支持的算子,例如算子需要某些数据类型,但 AI Core 不支持;例如 Complex32、Complex64。

  • 场景三:某些场景下,为了快速打通模型执行流程,在 AI Core 算子实现较为困难的情况下,可通过自定义 AI CPU 算子进行功能调测,提升调测效率;功能调通之后,后续性能调测过程中再将 AI CPU 自定义算子转换为 AI Core 算子实现。

AI CPU 开发要求

针对 AI CPU 算子,CANN 未提供封装的计算接口,完全是由 C++语言进行计算逻辑的实现。但 AI CPU 算子的实现有如下三步的基本要求。

  • 第一步,自定义算子的类需要为 CpuKernel 类的派生类,并且需要在命名空间“aicpu”中进行类的声明和实现。AI CPU 提供了算子的基类“CpuKernel”,“CpuKernel” 提供了算子计算函数的定义。

  • 第二步,实现算子类“xxxCpuKernel”中的 Compute 函数,即实现算子的计算逻辑。

  • 第三步,算子计算逻辑实现结束后,用“REGISTER_CPU_KERNEL(算子类型,算子类名) ”进行算子的注册。

在这里插入图片描述

如果您想了解更多AI知识,与AI专业人士交流,请立即访问昇腾社区官方网站https://www.hiascend.com/或者深入研读《AI系统:原理与架构》一书,这里汇聚了海量的AI学习资源和实践课程,为您的AI技术成长提供强劲动力。不仅如此,您还有机会投身于全国昇腾AI创新大赛和昇腾AI开发者创享日等盛事,发现AI世界的无限奥秘~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/483430.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp使用扩展组件uni-data-select出现的问题汇总

前言 不知道大家有没有学习过我的这门课程那,《uniCloud云开发Vue3版本官方推荐用法》,这么课程已经得到了官方推荐,想要快速上手unicloud的小伙伴们,可以学习一下这么课程哦,不要忘了给一键三连呀。 在录制这门课程…

TypeScript和JavaScript区别详解

文章目录 TypeScript和JavaScript区别详解一、引言二、类型系统1、静态类型检查TypeScript 示例JavaScript 示例 2、类型推断TypeScript 示例JavaScript 示例 三、面向对象编程TypeScript 示例JavaScript 示例 四、使用示例1. 环境搭建2. 创建TypeScript项目3. 安装TypeScript插…

前端开发 之 15个页面加载特效上【附完整源码】

文章目录 一:彩球环绕加载特效1.效果展示2.HTML完整代码 二:跷跷板加载特效1.效果展示2.HTML完整代码 三:两个圆形加载特效1.效果展示2.HTML完整代码 四:半环加载特效1.效果展示2.HTML完整代码 五:音乐波动加载特效1.效…

基于C#+SQLite开发数据库应用的示例

SQLite数据库,小巧但功能强大;并且是基于文件型的数据库,驱动库就是一个dll文件,有些开发工具 甚至不需要带这个dll,比如用Delphi开发,用一些三方组件;数据库也是一个文件,虽然是个文…

生态环境一体化智慧监管平台

在数字化和智能化的浪潮中,生态环境保护与治理正迎来革命性的变化。生态环境一体化智慧监管平台的建设,不仅响应了这一趋势,而且为中国式现代化的生态治理提供了新的解决方案。本文将深度分析该平台的建设内容,探讨其在推动生态文…

3.4 朴素贝叶斯算法

3.4 朴素贝叶斯算法 朴素? 假设:特征与特征之间是相互独立的 应用:文本分类,单词作为特征 3.4.1 什么是朴素贝叶斯算法 朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理的简单概率分类器,它假…

使用Mybatis-Plus时遇到的报错问题及解决方案

创建Maven项目后&#xff0c;一个个手动添加spring-boot和mybatis-plus依赖冲突问题 解决方案&#xff1a;找一个现成的pom.xml文件替换后重新加载&#xff08;以下提供java8&#xff0c;对应的spring-boot,mybatis-plus依赖&#xff09; <?xml version"1.0" en…

VSCode如何关闭Vite项目本地自启动

某些情况下VSCode打开Vite项目不需要自动启动&#xff0c;那么如何关闭该功能 文件>首选项>设置 搜索vite 将Vite:Auto Start 勾选取消即可

物联网——WatchDog(监听器)

看门狗简介 独立看门狗框图 看门狗原理&#xff1a;定时器溢出&#xff0c;产生系统复位信号&#xff1b;若定时‘喂狗’则不产生系统复位信号 定时中断基本结构&#xff08;对比&#xff09; IWDG键寄存器 独立看门狗超时时间 WWDG(窗口看门狗) WWDG特性 WWDG超时时间 由于…

在办公室环境中用HMD替代传统显示器的优势

VR头戴式显示器&#xff08;HMD&#xff09;是进入虚拟现实环境的一把钥匙&#xff0c;拥有HMD的您将能够在虚拟现实世界中尽情探索未知领域&#xff0c;正如如今的互联网一样&#xff0c;虚拟现实环境能够为您提供现实中无法实现的或不可能实现的事。随着技术的不断进步&#…

黑马2024AI+JavaWeb开发入门Day04-SpringBootWeb入门-HTTP协议-分层解耦-IOCDI飞书作业

视频地址&#xff1a;哔哩哔哩 讲义作业飞书地址&#xff1a;day04作业&#xff08;IOC&DI&#xff09; 作业很简单&#xff0c;主要是练习拆分为三层架构controller、service、dao&#xff0c;并基于IOC & DI进行解耦。 1、结构&#xff1a; 2、代码 网盘链接&…

【iOS】多线程基础

【iOS】多线程基础 文章目录 【iOS】多线程基础前言进程与线程进程进程的状态进程的一个控制结构进程的上下文切换 线程为什么要用线程什么是线程线程和进程的关系线程的上下文切换 线程和进程的优缺点 小结 前言 笔者由于对于GCD不是很了解&#xff0c;导致了项目中网络请求哪…

Android矩阵Matrix在1张宽平大Bitmap批量绘制N个小Bitmap,Kotlin(1)

Android矩阵Matrix在1张宽平大Bitmap批量绘制N个小Bitmap&#xff0c;Kotlin&#xff08;1&#xff09; import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Canvas import android.graphics.Color import android.graphics.Matri…

vue2+svg+elementui实现花瓣图自定义el-select回显色卡图片

项目需要实现花瓣图&#xff0c;但是改图表在echarts&#xff0c;highCharts等案例中均未出现&#xff0c;有类似的韦恩图&#xff0c;但是和需求有所差距&#xff1b; 为实现该效果&#xff0c;静态图表上采取svg来手动绘制花瓣&#xff1a; 确定中心点&#xff0c;以该点为中…

二百七十八、ClickHouse——将本月第一天所在的那一周视为第一周,无论它是从周几开始的,查询某个日期是本月第几周

一、目的 ClickHouse指标表中有个字段week_of_month&#xff0c;含义是这条数据属于本月第几周。 而且将本月第一天所在的那一周视为第一周&#xff0c;无论它是从周几开始的。比如2024-12-01是周日&#xff0c;即12月第一周。而2024-12-02是周一&#xff0c;即12月第二周 二…

快充协议IC支持全协议,内部集成LDO支持输出电压3.3V,支持宽电压范围3.3~30V

随着快充技术的不断发展&#xff0c;越来越多的电子产品都使用上了快充&#xff0c;市面上大多数受电端取电芯片只有取电功能&#xff0c;而有些产品则需要更多功能支持&#xff0c;例如产品需要快充支持又要读取电压&#xff0c;就只能在使用取电协议芯片的同时再增加一颗串口…

深入傅里叶级数与傅里叶变换:从基础到应用

傅里叶分析是数学、物理和工程领域的一项基础工具&#xff0c;其核心思想是将复杂的信号或函数分解为一系列简单的正弦和余弦函数的叠加。本文将带你从傅里叶级数入门&#xff0c;逐步深入傅里叶变换的概念及其应用场景。 一、傅里叶级数&#xff1a;周期信号的分解 1. 什么是傅…

brew安装mongodb和php-mongodb扩展新手教程

1、首先保证macos下成功安装了Homebrew&#xff0c; 在终端输入如下命令&#xff1a; brew search mongodb 搜索是不是有mongodb资源&#xff0c; 演示效果如下&#xff1a; 2、下面来介绍Brew 安装 MongoDB&#xff0c;代码如下&#xff1a; brew tap mongodb/brew brew in…

记录一次网关异常

记一次网关异常 网关时不时就会出现下面的异常。关键是不知道什么时候就会报错&#xff0c;并且有时候就算什么都不操作&#xff0c;也会导致这个异常。 ERROR org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in schedul…

使用Python和OpenCV自动检测并去除图像中的字幕

在图像处理和视频编辑领域&#xff0c;手动划分区域以定位和处理特定元素&#xff08;如字幕&#xff09;是一项耗时且劳动密集型的工作。专业人士常常需要花费大量时间来确保每一帧中的字幕都被精确地定位和移除&#xff0c;这不仅效率低下&#xff0c;而且容易出错。本文介绍…