一文了解AOL算子加速库

过去一年,随着ChatGPT的发布与快速迭代,基于大数据量、大参数量、大算力的预训练大模型已成为人工智能产业的主要路线。大模型的普及与发展不仅依靠模型本身的创新,更依赖于算力底座的支撑以及软件生态的繁荣,需要伙伴和开发者的积极参与。为加速大模型算力释放,昇腾提供AOLAscend Operator Library)算子加速库,不仅覆盖Softmax、MatMul等基础算子,也包括了大模型结构泛化的Flash Attention等高性能融合算子,开发者可以直接使用昇腾内置的算子加速库使能大模型创新与应用。

1 为什么需要算子加速库

算子实际上是面向深度学习任务高度优化的函数,它是网络中层或者节点的计算逻辑,开发者在实现这些计算逻辑的时候,不仅要实现功能逻辑,还要考虑硬件指令的适配,如何支持不同大小/类型的输入,以及如何针对不同的输入Shape进行切分,并保证算子的运行性能。可见,一个算子的代码如此复杂,如果神经网络中的每一个算子都由开发人员实现一遍,那么可想而知,神经网络构建的工作量有多大,难度有多高,特别是面对当前日益复杂的大模型。能否针对某种计算逻辑开发一个通用实现?这样,开发者便像搭房子一样构建网络而无需关注具体的算子实现。

为此,昇腾算子加速库提供了丰富的经过深度优化的高性能算子,且更亲和昇腾AI处理器,可供开发者直接调用,使能大模型极致性能优化,正是这些算子组成了能够让AI任务在昇腾硬件上飞速执行的弹药库。

2 昇腾基础算子加速库

昇腾基础算子加速库包括1400+种高性能算子,其中包括常用深度学习算法计算类型的NN(NeuralNetwork)算子库、能够提供高性能媒体数据处理能力的DVPPDigital Vision Pre-Processing)算子库、分布式训练中提供卡间高效数据传输的HCCLHuawei Collective Communication Library)算子库等。

  • NN(NeuralNetwork)算子库覆盖了包括TensorFlow、Pytorch、MindSpore、ONNX等框架在内的常用深度学习算法的计算类型,包括Softmax、MatMul、Convolution等典型算子,在算子库中占有最大比重。
  • BLAS(Basic Linear Algebra Subprograms)算子库:BLAS为基础线性代数程序集,是进行向量和矩阵等基本线性代数操作的数值计算库,CANN支持通用的矩阵乘和基础的Max、Min、Sum、乘加等基础数学运算。
  • DVPP(Digital Video Pre-Processor)算子库:DVPP是昇腾AI处理器内置的图像处理单元,支持高性能视频编解码、图片编解码、图像裁剪缩放等预处理能力,通过DVPP算子可快速体验媒体处理硬加速能力。
  • AIPP(AI Pre-Processing)算子库:AIPP可用于在AI Core上完成图像预处理,包括图像尺寸更改、色域转换(转换图像格式)、减均值/乘系数(图像归一化),并与模型推理过程融合,满足推理输入要求。
  • HCCL(Huawei Collective Communication Library)算子库:HCCL是基于昇腾硬件的高性能集合通信库,提供单机多卡以及多机多卡间的数据并行、模型并行集合通信方案。支持AllReduce、Broadcast、Allgather、ReduceScatter、AlltoAll等通信原语,Ring、Mesh、HD等通信算法,在HCCS、RoCE和PCIe高速链路实现集合通信。

3  昇腾融合算子加速库

在主流大模型网络模型中,大量使用典型的Multi-Head Attention结构,带来了巨大的计算和内存开销。其运行过程中,矩阵乘和softmax结果存放在片上内存会带来巨大的内存消耗,访存性能严重下降,甚至会导致模型无法正常运行,同时网络中的矩阵和向量计算串行执行,也会导致硬件算力发挥受限。

斯坦福的Tri DAO提出了FlashAttention融合算子,其原理是对attention处理过程进行切分和计算等价,使得attention的多个步骤在一个算子中完成,并且通过多重循环、每次处理一小部分数据,以近似流式的方式访问片上内存,减少了片上内存访问的总数据量,并能够将计算和数据搬运更好的重叠隐藏。

CANN针对昇腾AI处理器的片上内存和缓存大小,以及数据搬运通路,优化实现FlashAttention融合算子,充分利用片上缓存,提升Attention处理性能。根据实测,在一些典型场景中,CANN的FlashAttention算子相比融合前的小算子取得了5倍以上的性能提升。开发者可直接调用相关算子接口使能大模型极致性能优化。

Flash Attention算子融合机制

由此可知,算子融合(Operator Fusion)基本操作就是将多个连续的操作或算子合并成一个单一的算子,常用于深度学习和其他计算密集型任务中,以减少计算和内存开销。使用算子融合有助于提高执行效率,减少数据传输和临时存储,以及提高缓存利用率。 

除了Flash Attention类算子,昇腾还提供了MoE结构下的高性能融合算子、针对分布式场景提供MC²(Merged Compute and Communication)通算融合类算子等。

MoE (Mixture-of-Experts,混合专家系统)结构将稠密网络的FFN层扩展成具有相同结构的专家网络,通过路由或门控网络决定激活哪些expert进行计算,从而能够实现在低成本下训练更大的模型。昇腾针对MoE结构提供了诸多高性能融合算子,比如GroupedMatMul融合算子可支持专家分组能力、使能多专家多核并行计算;MoeGatingTopKSoftmax将gating部分的softmax以及topk计算融合;MoEInitRouting、MoEFinalizeRouting对routing进行加速处理以提升MoE结构在NPU上的执行性能。

MC²通算融合类算子的工作原理是将通信和计算的操作过程融合,使得计算和通信可以流水并行提升性能,典型算子包括AllGatherMatMul、MatMulReduceScatter、MatMulAllReduce等,这些算子将AllGather、ReduceScatter、AllGather等通信过程和MatMul计算融合,使SP、TP等并行场景下的通信和矩阵计算(Linear)流水并行,可将GPT-3的整网性能提升10%左右。

目前,昇腾已开放部分融合算子代码样例,开发者可以访问https://gitee.com/ascend/cann-ops-adv进行体验和使用。这意味着,开发者不仅可以直接使用昇腾融合算子加速库使能大模型极致性能,也可以从自有的大模型算法和应用出发,基于开放的融合算子代码样例和Ascend C算子编程API开展定制优化,从而提升大模型运行性能或优化资源占用,构建差异化算法竞争力。

4 更多介绍

关于昇腾算子加速库的相关介绍就到这里,欢迎大家关注后续技术分享。如需获取更多学习资源请登录昇腾社区。

更多CANN开放能力介绍:

《Ascend C 2.0新特性详解,支撑大模型融合算子高效开发》

《深度解读昇腾CANN小shape算子计算优化技术,进一步减少调度开销》

《深度解读昇腾CANN模型下沉技术,提升模型调度性能》

《深度解读昇腾CANN计算图优化技术,提升算法计算效率》

《深度解读昇腾CANN多流并行技术,提高硬件资源利用率》

《深度解读昇腾CANN内存复用技术,降低网络内存占用》

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

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

相关文章

Vue3逻辑复用及内置组件

Vue3的逻辑复用主要通过“组合式函数”、“自定义指令”及“插件”来实现。提高了代码复用性,增强代码可维护性及促进团队合作。 1 逻辑复用 1.1 组合式函数 利用Vue组合式API来封装和复用有状态逻辑的函数。对组合式函数有如下约定: 命名&#xff0…

Sentinel限流规则详解

上一期教程讲解了 Sentinel 的快速入门:Sentinel快速入门,这一期主要讲述 Sentinel 的限流规则 簇点链路 簇点链路就是项目内的调用链路(Controller -> Service -> Mapper),链路中被监控的每个接口就是一个资源…

wkhtmltopdf 工具安装与使用

前情提要: 最近一个同事请叫我一个问题,他发现一片不错的博文,是在博客园的,但是不能下载这篇文章,我看了一下才发现,原来csdn也是不行的。合理。毕竟是人家辛苦写的文章,不能就这么被别人随便c…

《Java初阶数据结构》----7.<优先级队列PriorityQueue>

前言 大家好,我目前在学习java。之前也学了一段时间,但是没有发布博客。时间过的真的很快。我会利用好这个暑假,来复习之前学过的内容,并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…

[渗透测试] 主动信息收集

主动信息收集 在红蓝对抗过程中,资产属于核心地位,攻击方(红方)要尽可能的去获取对方资产,暴露目标资产,包括IP地址、网络设备、安全设备、服务器、存储在服务器中的数据等。防守方也要清楚自己有多少有价…

宝塔SSL续签失败

我有2个网站a和b(文字中用baidu.com替换我的域名) b是要续签那个,但续签报错: nginx version: nginx/1.22.1 nginx: [emerg] host not found in upstream "github.com" in /www/server/panel/vhost/nginx/proxy/a.bai…

设计模式--创建型

实现 #include <iostream> #include <memory>// 抽象产品类 class Product {public:virtual ~Product() {}virtual void Operation() const 0; };// 具体产品 类A class ConcreteProductA : public Product {public:virtual void Operation() const override {st…

ESP-01S、ESP8266、ESP32等模块通信乱码的排查方法

ESP-01S、ESP8266、ESP32等模块通信乱码的排查方法 ESP-01S模块 遇到问题首先按重要顺序及排除法来解决问题 1&#xff0c;你的USB转串口工具是否有问题&#xff1f; 请将TXD与RXD短接在一起进行测试&#xff0c;自收自发应该是正常的&#xff0c;请确保这点。 ESP-01S的串口…

ffmpeg ffplay.c 源码分析二:数据读取线程

本章主要是分析 数据读取线程read_thread 中的工作。如上图红色框框的部分 从ffplay框架分析我们可以看到&#xff0c;ffplay有专⻔的线程read_thread()读取数据&#xff0c; 且在调⽤av_read_frame 读取数据包之前需要做&#xff1a; 1.例如打开⽂件&#xff0c; 2.查找配置解…

Servlet 3.0的新特征

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhlServlet 3.0概述 Servlet 3.0规范是在2009年随着Java EE 6的发布而推出的。它引入了一系列新特性和改进,旨在简化Web应用的开发和部署过程,并提高Web应用的性能和可扩展性。Servlet 3.0的发布标…

大语言模型-对比学习-Contrastive Learning

一、对比学习概念 对比学习是一种特殊的无监督学习方法。 旨在通过拉近相关样本的距离并且推远不相关样本的距离&#xff0c;来学习数据表示。 通常使用一种高自由度、自定义的规则来生成正负样本。在模型预训练中有着广泛的应用。 二、对比学习小案例 对比学习主要分为三个…

02 MySQL数据库管理

目录 1.数据库的结构 sql语言主要由以下几部分组成 2. 数据库与表的创建和管理 1&#xff0c;创建数据库 2&#xff0c;创建表并添加数据 3&#xff0c;添加一条数据 4&#xff0c;查询数据 5&#xff0c;更新数据 6&#xff0c;删除数据 3.用户权限管理 1.创建用户 …

js轮播图制作

实现一个简单的JavaScript轮播图可以通过以下步骤完成&#xff1a; 创建HTML结构&#xff0c;包括轮播图容器和图片列表。 使用CSS进行样式设置&#xff0c;包括隐藏多余的图片。 使用JavaScript编写函数来控制图片的切换。

C#中栈和堆以及修饰符

关于堆中字符串的存放 string s1"123" string s2"123" string s1"456" 此时s1输出为456 而s2仍然为123 因为在使用 String str "字符串" 的方式来创建String变量的时候&#xff0c;那么String的值便会存储在String常量池中&#x…

Keepalived和Haproxy

Keepalived和Haproxy 一、Keepalived 1、keepalived概念 调度器的高可用 vip地址主备之间的切换&#xff0c;主在工作时&#xff0c;vip地址值在主上&#xff0c;主停止工作&#xff0c;vip飘移到备服务器 在主备的优先级不变的情况下&#xff0c;主恢复工作&#xff0c;v…

C++——编译报重复定义错误的解决办法

原因&#xff1a; 头文件被多次编译。 解决办法&#xff1a; 找到包含头文件的地方&#xff0c;仔细检查。 比如&#xff1a; 这两句话是包含关系&#xff0c;写了第一句就不用第二句了。 因为&#xff1a;第一句是编译 tracker/detector/rknn_model_zoo/examples/yolov5/c…

【MySQL进阶之路 | 高级篇】简谈redo日志

1. 前言 事务有四种特性&#xff1a;原子性&#xff0c;一致性&#xff0c;隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢&#xff1f; 事务的隔离性由锁机制实现。而事务的原子性&#xff0c;一致性和持久性由事务的redo日志和undo日志来保证。 REDO LOG称为…

云计算实训13——DNS域名解析、ntp时间服务器配置、主从DNS配置、多区域DNS搭建

一、DNS域名解析 1.正向解析 将域名解析为IP地址 DNS正向解析核心配置 (1)安装bind [rootdns ~]# yum -y install bind (2)编辑配置文件 编辑named.conf文件&#xff0c;限定访问权限 [rootdns ~]# vim /etc/named.conf 编辑named.rfc文件&#xff0c;指定要访问的域名 [ro…

【数据结构】:用Java实现链表

在 ArrayList 任意位置插入或者删除元素时&#xff0c;就需要将后序元素整体往前或者往后搬移&#xff0c;时间复杂度为 O(n)&#xff0c;效率比较低&#xff0c;因此 ArrayList 不适合做任意位置插入和删除比较多的场景。因此&#xff1a;java 集合中又引入了 LinkedList&…

一步一步测试DNS隧道

目录 0、前言 1、DNS解析 1.1 DNS简介 1.2 DNS查询类型 1.3 DNS解析过程 2、DNS隧道准备工作 2.1 DNS隧道介绍 2.1.1 什么是DNS隧道&#xff1f; 2.1.2 DNS隧道的原理 2.2 客户端、服务端准备 2.3 域名准备 2.4 连接隧道 2.5 遇坑 3、隧道确认和利用…