转载:【AI系统】CANN 算子类型

news/2024/12/12 18:37:02/文章来源:https://www.cnblogs.com/wujinwanai/p/18600920

算子是编程和数学中的重要概念,它们是用于执行特定操作的符号或函数,以便处理输入值并生成输出值。本文将会介绍 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 的相互关联如下图所示:

image

其中,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(算子类型,算子类名) ”进行算子的注册。

image

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

转载自:https://www.cnblogs.com/ZOMI/articles/18560637

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

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

相关文章

四个强大的 Salesforce 开源替方案(附成本对比)

探索 Salesforce CRM 的最佳开源替代方案。了解像 NocoBase 这样的工具如何为寻求强大 CRM 解决方案的企业提供灵活定制和高性价比。关于 Salesforce Salesforce 于1999 年在美国旧金山创立,作为最早一批提供软件即服务(SaaS) 的公司之一,Salesforce 开创了基于云计算的商业…

转载:【AI系统】混合并行

混合并行(HybridParallel)是一种用于分布式计算的高级策略,它结合了数据并行和模型并行的优势,以更高效地利用计算资源,解决深度学习中的大模型训练问题。混合并行不仅能提高计算效率,还能在有限的硬件资源下处理更大的模型和数据集。在深度学习中,数据并行和模型并行各…

转载:【AI系统】张量并行

在大模型的训练中,单个设备往往无法满足计算和存储需求,因此需要借助分布式训练技术。其中,模型并行(Model Parallelism, MP)是一种重要的方法。模型并行的基本思想是将模型的计算任务拆分到不同的设备上执行,以提高训练效率和处理更大规模的模型。下面将重点介绍模型并行…

转载:【AI系统】动手实现 PyTorch 微分

这里记录一下使用操作符重载(OO)编程方式的自动微分,其中数学实现模式则是使用反向模式(Reverse Mode),综合起来就叫做反向 OO 实现 AD 啦。 基础知识 下面一起来回顾一下操作符重载和反向模式的一些基本概念,然后一起去尝试着用 Python 去实现 PyTorch 这个 AI 框架中最…

转载:【AI系统】计算图原理

在前面的文章曾经提到过,目前主流的 AI 框架都选择使用计算图来抽象神经网络计算表达,通过通用的数据结构(张量)来理解、表达和执行神经网络模型,通过计算图可以把 AI 系统化的问题形象地表示出来。 本文将会以 AI 概念落地的时候,遇到的一些问题与挑战,因此引出了计算图…

转载:【AI系统】计算图基本介绍

在 AI 框架发展的最近一个阶段,技术上主要以计算图来描述神经网络。前期实践最终催生出了工业级 AI:TensorFlow 和 PyTorch,这一时期同时伴随着如 Chainer、DyNet、CNTK、PaddlePaddle、JAX 等激发了框架设计灵感的诸多实验课程。 TensorFlow 和 PyTorch,特别是 PyTorch 代…

转载:【AI系统】什么是微分

自动微分(Automatic Differentiation,AD)是一种对计算机程序进行高效准确求导的技术,一直被广泛应用于计算流体力学、大气科学、工业设计仿真优化等领域。 近年来,机器学习技术的兴起也驱动着对自动微分技术的研究进入一个新的阶段。随着自动微分和其他微分技术研究的深入…

转载:【AI系统】Auto-Tuning 原理

在硬件平台驱动算子运行需要使用各种优化方式来提高性能,然而传统的手工编写算子库面临各种窘境,衍生出了自动生成高性能算子的的方式,称为自动调优。在本文我们首先分析传统算子库面临的挑战,之后介绍基于 TVM 的业界领先的三个自动调优系统。 高性能算子挑战 DNN 部署的硬…

转载:【AI系统】微分计算模式

上一篇文章简单了解计算机中常用几种微分方式。本文将深入介绍 AI 框架离不开的核心功能:自动微分。 而自动微分则是分为前向微分和后向微分两种实现模式,不同的实现模式有不同的机制和计算逻辑,而无论哪种模式都离不开雅克比矩阵,所以我们也会深入了解一下雅克比矩阵的原理…

转载:【AI系统】AI 框架之争

在前面的内容主要是讲述了 AI 框架在数学上对自动微分进行表达和处理,最后表示称为开发者和应用程序都能很好地去编写深度学习中神经网络的工具和库,整体流程如下所示:除了要回答最核心的数学表示原理以外,实际上 AI 框架还要思考和解决许多问题,如 AI 框架如何对实际的神…

转载:【AI系统】指令和存储优化

除了应用极广的循环优化,在 AI 编译器底层还存在指令和存储这两种不同优化。 指令优化 指令优化依赖于硬件提供的特殊加速计算指令。这些指令,如向量化和张量化,能够显著提高计算密度和执行效率。向量化允许我们并行处理数据,而张量化则进一步扩展了这一概念,通过将数据组…

转载:【AI系统】算子循环优化

在具体硬件执行计算的时候,实际会大量地使用 for 等循环指令不断地去读取不同的数据执行重复的指令(SIMT/SIMD),因此循环优化主要是为了提升数据的局部性或者计算的并行性,从而提升整体算子性能,当然这二者都需要 AI 芯片硬件的支持。 循环优化挑战 数据局部性 数据的局部…