当前位置: 首页 > news >正文

算子相关通用概念整理

在 AI 框架中,算子一般指一些最基本的代数运算(如:矩阵加法、矩阵乘法等),多个算子之间也可以根据需要组合成更加复杂的融合算子(如:flash-attention 算子等)。算子的输入和输出都是 Tensor(张量),下面将对算子开发中涉及的一些基本概念进行介绍。

一、概述

什么是算子?

在 AI 框架中,算子一般指一些最基本的代数运算(如:矩阵加法、矩阵乘法等),多个算子之间也可以根据需要组合成更加复杂的融合算子(如:flash-attention 算子等)。算子的输入和输出都是 Tensor(张量)。

融合算子:将多个独立的“小算子”融合成一个“大算子”,多个小算子的功能和大算子的功能等价,但融合算子在性能或者内存等方面优于独立的小算子。

另外,算子更多地是 AI 框架中的一个概念,在硬件底层算子具体的执行部分,一般叫做 Kernel(核函数)。

下面将首先对算子开发中涉及的一些基本概念进行介绍(可以用 CUDA 作为参考,大部分概念都是相似的),然后会以具体的矩阵加法和乘法算子的代码实现为例进行讲解。

二、基本概念

2.1 Device

2.2 Context

Context 主要负责管理线程中各项资源的生命周期。

一般来说,Context 与其它概念之间具有以下关系:

每一个线程都具有一个默认的 Context,无需手动创建,也无法被删除。我们也可以手动创建更多的 Context,使用后需要及时释放。另外,在线程中,默认使用最后一次创建的 Context。

2.3 Stream

Stream 主要负责维护一些异步操作的执行顺序,这些操作包括:

说明:在 GPU/NPU 上调用的函数,被称为核函数(Kernel function)。核函数使用 __global__ 关键字进行定义,会被 GPU/NPU 上的多个线程执行。

同一个 Stream 里的操作是严格串行的(顺序执行),而不同 Stream 之间则可以并行执行。来自不同 Stream 的 Kernel 可以共享 GPU/NPU 的内核并发执行。

一般来说,Context 与其它概念之间具有以下关系:

每一个 Context 都具有一个默认的 Stream,无需手动创建,也无法被删除。我们也可以手动创建更多的 Stream,并将多个操作分配到不同的 Stream 上,这样就可以实现多个操作的并行,Stream 使用后需要及时释放。

2.4 Task

Task 或 Kernel,是 Device 上真正的任务执行体。

一般来说,Task 与其它概念之间具有以下关系:

  • 一个 Stream 中可以下发多个 Task;
  • 多个 Task 之间可以插入 Event,用于同步不同 Stream 之间的 Task。
  • 一个线程或 Context 中可以创建多个 Stream;
  • 不同线程或 Context 间的 Stream 在 Device 上相互隔离。
  • Host 到 Device 的数据传输;
  • 调用 Kernel;
  • 其它由 Host 发起并由 Device 执行的动作。
  • 一个进程可以创建多个 Context;
  • 一个线程只能同时使用一个 Context,该 Context 对应一个唯一的 Device,线程可以通过切换 Context 来切换要使用的 Device;
  • 一个 Device 可以拥有多个 Context,但同时只能使用一个 Context。
  • Host:一般指 CPU(负责调度);
  • Device:一般指 GPU、NPU(负责计算)。

整理不易,诚望各位看官点赞 收藏 评论 予以支持,这将成为我持续更新的动力源泉。若您在阅览时存有异议或建议,敬请留言指正批评,让我们携手共同学习,共同进取,吾辈自当相互勉励!

http://www.dtcms.com/a/519867.html

相关文章:

  • Java 操作 PDF 图像:轻松驾驭 PDF 文档中的图片
  • OS_2 进程与线程(进程管理)
  • 网站规划 评价谷歌三件套一键安装
  • 腾讯云服务器如何建设网站百度关键词排名突然没了
  • 【论文笔记】LTX-Video极致速度的视频生成模型
  • 安科瑞防逆流解决方案:物联网技术赋能光伏能源高效管理
  • 如何根据不同的场景选择YOLO相应的基座模型
  • 【OJ】二叉树的经典OJ题
  • Excel 重磅更新 AI技术走进公式
  • div嵌套影响网站收录建设公司需要网站吗
  • VBA技术资料MF383:处理Excel中存储为文本的数据
  • 注册网站的公司名字网站项目建设流程图
  • 大数据存储组件分别位于数据仓库的哪一层
  • Dubbo应用开发之RPC直连开发
  • 坦电容做电源滤波,放在陶瓷电容的前面还是后面好
  • 北京城建亚泰建设集团有限公司网站首页wordpress中文教程 下载
  • 虚幻引擎5 GAS开发俯视角RPG游戏 P06-13 属性菜单 - 边框值
  • Bash 括号:()、{}、[]、$()、$(() )、${}、[[]] 到底有什么区别?
  • bash执行脚本 CondaError: Run ‘conda init‘ before ‘conda activate‘
  • 虚幻引擎5 GAS开发俯视角RPG游戏 P06-11 初始化生命值和法力值属性
  • 做家政网站网络公司基础建设
  • 比特币白皮书
  • 网站速度诊断 慢坚持以高质量发展为首要任务戈
  • 苹果 T2 芯片如何影响 Mac 数据恢复
  • Open XR 手势控制模块开发。Monado 自定义手势识别模型 基于UltraLeap python实现
  • SQL Server ODBC 数据源配置指南(本地 + 远程,附实操细节)
  • 惠普电脑VT虚拟化技术开启指南:新旧BIOS设置全解析
  • SQL NULL 值
  • wordpress建站做客户端WordPress网站图片预加载
  • 动态规划核心原理与高级实战:从入门到精通(Java全解)