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

CANN/ops-transformer FFA算子设计

1 计算过程【免费下载链接】ops-transformer本项目是CANN提供的transformer类大模型算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-transformer按照FusedFloydAttention正向计算流程实现整体计算流程如下query, key_1通过特定矩阵乘计算得到a_0与query, key_2通过特定矩阵乘计算得到的a_1相加然后再乘以缩放系数scale_value。此时的结果通过atten_mask进行select操作将atten_mask中为true的位置进行遮蔽得到结果masked_attention_score即atten_mask中为true的位置在select后结果为负的极小值经过softmax计算之后变成0从而达到遮蔽效果。借鉴FlashAttention加速算法FusedFloydAttention使用FlashSoftmax操作对masked_attention_score进行运算用以代替原公式中的softmax运算而后将结果与value做matmul运算。由于FlashSoftmax操作对masked_attention_score的Skv(输入key、value的sequence length)方向进行了切分故实现过程中存在一个刷新流程具体如下每次FlashSoftmax计算只对切分后的一个SkvSplitSkvSplit是针对Skv轴进行切分之后的序列长度的简称进行操作并从第二次循环开始记录exp其中 i 表示Skv切分后的循环变量针对exp的i是从1开始 exp的计算公式如下 $$ exp[i] e^{max_{i - 1} - max_{i}} $$当i 0时计算出的MM[PV]结果直接保存到ub_attention_out[0]的ub中。从i 1开始需要增加Mul和Add操作即将上一次的MM[PV]的结果和当前exp相乘相乘完的结果和本次MM[PV]的结果相加得到的结果保存到ub_attention_out[1]的ub中。以此类推遍历Skv计算完成。由于FlashSoftmax计算中的除sum被后移到输出attention_out之前因此最后需要将ub中的ub_attention_out按行除以softmax_sum并将最终完整的结果保存到输出内存attention_out(Final)上。2 Tiling设计Tiling操作的目的是为了找到一种更高效的NPU执行方式原始的数据量一般是非常大的没有办法通过一次指令调用就完成所有计算因此需要将数据量分到多个核上并行计算且每个核上也需要考虑如何循环计算性能最优不同的输入可能有不同的最优执行方式所以需要通过tiling策略决定怎么将数据分配到各个核上进行计算。根据硬件架构特征AI Core分成AIC和AIV两个独立的核AIC和AIV核拥有自己独立的Scalar计算单元能够独立加载自己的代码段单独执行。AIC和AIV分离的架构可以使得AIC和AIV并行执行。AIC和AIV之间数据交互的通路是L2和GMGlobal Memory高带宽存储器两者之间的交互次数对性能影响是比较大的同时由于AIC和AIV算力差异两者需要使用不同的基本块大小本着尽量减少AIC和AIV通信次数和发挥最大算力的原则CVtiling分离策略应运而生可以有效地减少CV通信次数同时根据不同单元的buffer特征选择不同的基本块进行计算从而提升算子性能。对于FFA算子Vector计算涉及多个输入、输出、中间计算结果、double-buffer设计等需要将buffer分配成多份最优分配方案中最大一份为32KB由于Vector计算使用的数据类型是float32因此Vector的tiling基本块为8 * 1024。为了充分发挥Cube的算力在CV之间一轮计算的数据量进行了4:1的配比又由于Cube侧的输入数据类型是float16输出是float32Cube的基本块为32 * 32所以通过nRatio32配比出32 * 1024的数据量。伪代码如下// C-Tiling: (S1_c_i,D)x(D,S2_c_i) (S1_c_i, S2_c_i):(32,1024) // V-Tiling: (S1_v_i, S2_v_i) (8,1024) // C侧 matmul计算 Bmm((S1_c_i,D)x(D,S2_c_i)) 32*1024 // 输出结果32*1024放到workspace上 // V侧 Vector计算 for S1_c_i/S1_v_i32/8: copy_gm_to_ub(S1_v_i*S2_v_i) // 从bmm的workspace上拷入bmm结果数据 Vector(S1_v_i,S2_v_i) // 进行Vector计算 copy_ub_to_gm(S1_v_i*S2_v_i) // Vector计算结束得到最终输出数据拷贝到GM上 // 由于Cube侧计算数据比Vector侧大因此ub内需要再次进行Vector Tiling从而产生了S1方向的配比S1_c_i/S1_v_i上述示例中仅在S1方向开了配比S2方向C/V计算的长度是一致的当然也可以在S1/S2方向均开启配比这样做的好处是Cube一次可以发射大块的数据避免因为小块数据不断发射带来的通信开销也能最大程度地使用Cube单元的buffer。3 流水设计为了追求极致性能必须充分利用硬件资源通常需要进行不同pipeline的流水设计。流水设计的宗旨是尽量使某一条pipeline达成bound效果使硬件的某一个单元一直在工作达到性能上限。3.1 V侧流水V侧流水设计需要考虑Vector内部的搬运及计算过程实施的优化手段主要是double buffer。 Vec的功能被拆分成2个流水任务Stage1、Stage2每个任务专注于完成单一功能需要处理的数据被切分成2片使用ping-pong表示两个数据处理任务每个任务需要依次搬运DataCopy与计算Clc操作。任务间的箭头表达数据间的依赖关系比如Stage1处理完DataCopy之后Stage2才能对Clc进行处理。 不进行流水设计时搬运与计算任务之间是串行执行的会出现断流现象即第一次DataCopy完成之后的搬运流水就一直处于空闲状态直到第一次搬入的数据计算完成并搬出之后搬运流水才会继续工作进行第二次DataCopyVector计算和搬出流水也存在同样问题。通常这种情况下性能是极差的。对ping-pong流水间的double buffer处理后对于同一片数据搬运DataCopy与计算Clc之间的处理具有依赖关系需要串行处理不同的数据切片同一时间点可以有多个任务在并行处理由此达到任务并行、提升性能的目的。其中ping、pong两块计算数据所占用的内存资源均相互独立。融合算子V侧计算过程较多情况也比较复杂通常简单的double buffer是无法覆盖所有情况的因此会出现不同的计算流水排布。3.2 CV流水对于融合算子V侧的计算是依赖C侧的计算结果的如果只关注V侧流水不关注C侧则C侧与V侧很有可能是串行流水的效果不能达到并行计算的目的无法使得融合算子性能达到最优从而有了CV流水设计。此外CV流水在不同算子情况下表现的现象也是不一致的Cube双发机制可实现两种场景下的流水优化C侧总耗时 V侧总耗时该场景流水特征下Vector计算节点少计算速度快在Atlas A2 训练系列产品 C:V1:2的情况下Cube的搬运时长足以掩盖Vector的计算时长因此只要关注Cube的MTE2耗时即可最终达成MTE2 bound。在Cube双发机制下提前发射两块Cube计算Cube1、Cube2计算可以衔接使得Cube利用率最高达成Cube bound。C侧总耗时 V侧总耗时C侧连续发射两块Cube计算这样可以保证V侧计算完上一轮时可以立马启动当前轮的计算而不用等待Cube1的数据。这样可以使V侧一直在工作达成Vector bound。4 优化效果单算子推理耗时输入shapeB, H, N, M, K, DChunksAscendCs加速比 (Speedup)(1, 32, 256, 256, 256, 32)0.02820.02091.35x(1, 32, 384, 384, 384, 32)0.09550.06041.58x(1, 32, 512, 512, 512, 32)0.19410.13831.40x(1, 32, 768, 768, 768, 32)0.76400.45631.67x(1, 16, 256, 256, 256, 64)0.01580.01421.11x(1, 16, 384, 384, 384, 64)0.05610.03161.78x(1, 16, 512, 512, 512, 64)0.12050.11511.05x(1, 16, 768, 768, 768, 64)0.42490.33021.29x显存占用输入shapeB, H, N, M, K, DChunkGBAscendCGB显存节省率 (Mem Saving)(1, 32, 256, 256, 256, 32)6.382.6558.46%(1, 32, 384, 384, 384, 32)19.975.5172.41%(1, 32, 512, 512, 512, 32)45.509.5079.12%(1, 16, 256, 256, 256, 64)3.882.4038.14%(1, 16, 384, 384, 384, 64)11.535.1855.07%(1, 16, 512, 512, 512, 64)25.509.1364.20%5 附录——FusedFloydAttention算子中IterateBatch配置本方案中涉及两种类型的批量矩阵乘数据格式ND第一种是: NMD NKD, 其中N是batch轴 D是K轴;第二种是: NMD KMD, 其中M是batch轴 D是K轴第一种方案中batch轴在最外轴M和K可能有切片这样每次单batch的ND矩阵是连续的但是不同batch的ND矩阵间可能会存在间隔。比如M256, 假设切片为N[0:16]M[128:256]D[:], 每个batch为 128*D 的数据 batch数据起始地址之间间隔256 * D;针对这种情形我们使用IterateBatch的NORMAL数据排布对于batch数据之间的地址间隔需要配置matrixStrideA matrixStrideB等参数这两个参数能指定输入A矩阵和B矩阵的相邻batch的ND矩阵间的间隔。上述的例子中将matrixStrideA设置为 256*D。第二种方案中batch轴在中间这种情形下每次单batch的ND是不连续的跳跃的。一种方法是实现中自己控制数据搬运使用低阶接口或者使用AscendC中的高阶接IterateBatch。使用IterateBatch针对batch在中间轴的情况可配置使用BSNGD的数据排布格式。其中每个batch计算一个SD数据。例如NMD KMD可以把B矩阵KMD理解为[B1,SK,N1,GM, DD]这种排布这样就能使用IterateBatch高阶接口。使用IterateBatch每次调用时的batch数据需要指定但是不能任意指定有硬件约束。主要是要求指定的计算batch数据能完全搬运进L1 cache(对于910B为512KB)即计算数据量不能超过NPU L1 Cache。下面是相关的计算流程。计算一个批次Batch矩阵乘计算的数据量 (Bytes)oneBatchBytes datatype Bytes * D * (K1 K2)K1与K2取实际计算的矩阵的轴的切片长度比如上面例子中M[128:256]对应的是128实际最大的batch数量则如下maxBatchNums Floor(L1Size / oneBatchBytes) # 向下取整对应的循环次数如下Loops Ceil(TotalBatches, maxBatchNums) # 向上取整【免费下载链接】ops-transformer本项目是CANN提供的transformer类大模型算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-transformer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

CANN/ops-transformer FFA算子设计

1 计算过程 【免费下载链接】ops-transformer 本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-transformer 按照FusedFloydAttention正向计算流程实现,整体计算流程如下&#x…...

CANNBot技能:模型推理预取优化

【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills name: model-infer-prefetch description: 基于 PyTorch 框架的昇腾 N…...

组态屏工程备份 / 恢复 / 加密 / 密码忘记

在工业自动化现场,组态屏作为人机交互的核心设备,承载着设备监控、参数设置、报警记录等关键功能。而组态工程文件,则是这块屏幕的“灵魂”——一旦工程丢失或损坏,重新编写不仅耗时数日,甚至可能因工艺参数遗忘而导致…...

可解释AI如何破解人机协同决策的信任难题?

1. 项目概述:当AI开始解释自己最近几年,我参与和观察了不少将人工智能(AI)引入关键决策流程的项目,从医疗诊断辅助到金融风控,再到工业运维。一个越来越强烈的感受是:当AI的预测或建议摆在我们面…...

CANN π₀.₅模型训练优化说明

π₀.₅ 模型训练昇腾迁移与性能优化说明 【免费下载链接】cann-recipes-embodied-intelligence 本项目针对具身智能业务中的典型模型、加速算法,提供基于CANN平台的优化样例 项目地址: https://gitcode.com/cann/cann-recipes-embodied-intelligence 背景介…...

LobeHub 这玩意儿,到底香在哪?

先说结论:LobeHub 是目前我在前端圈里看到的,最接近“智能体操作系统”的一个东西。不是吹,是真的好用到让我有点慌。事情是这样的前阵子我在搞一个自动化工单系统,本来打算自己撸一套 Agent 调度逻辑,结果写到第三天我…...

AI+SPU-Net:机器人辅助脊柱手术的自动切面规划技术详解

1. 项目概述与核心价值在骨科脊柱外科领域,椎板切除术是一项常规且至关重要的减压手术,用于治疗椎管狭窄、椎间盘突出等疾病。手术的核心在于精准、安全地切除椎板骨质,为受压的神经结构“松绑”。然而,传统手术高度依赖主刀医生的…...

CANN/ops-fft:FFT算子库

ops-fft 【免费下载链接】ops-fft ops-fft 是 CANN (Compute Architecture for Neural Networks)算子库中提供 FFT 类计算的基础算子库,采用模块化设计,支持灵活的算子开发和管理。 项目地址: https://gitcode.com/cann/ops-fft…...

CANN一维最近邻上采样算子

aclnnUpsampleNearest1dV2 【免费下载链接】ops-cv 本项目是CANN提供的图像处理、目标检测相关的算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-cv 📄 查看源码 产品支持情况 产品是否支持Ascend 950PR/Ascend 950…...

Figma中文界面终极指南:3分钟让英文设计工具秒变中文

Figma中文界面终极指南:3分钟让英文设计工具秒变中文 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而苦恼吗?FigmaCN是一款专为中文用户…...

CANN/asc-devkit贡献指南

贡献指南 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/c…...

库存预测准确率大PK!实在Agent如何终结企业“库存积压”噩梦?

摘要:在2026年全球供应链进入“盈利竞赛”的理性成熟期,库存预测的精准度已成为制造与流通企业的生命线。面对IDC预测的300亿美元规模市场,企业不仅面临库存积压与资金占用的双重压力,更深陷系统围墙、信创适配难及传统自动化工具…...

对比自行维护与使用 Taotoken 聚合 API 的运维复杂度

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比自行维护与使用 Taotoken 聚合 API 的运维复杂度 在构建基于大模型的应用时,开发者通常面临一个选择:是…...

2026年隔热条十大品牌:谁是真正的研发王者?

随着建筑节能标准的不断提高,隔热条在门窗幕墙系统中的重要性日益凸显。作为门窗节能系统的核心部件,隔热条不仅直接影响建筑的节能效果,还关系到居住安全和企业的可持续发展。在这个竞争激烈的市场中,哪些品牌能够脱颖而出&#…...

大语言模型能力结构实证研究:参数量与智能的非线性关系

1. 项目概述:我们到底在研究什么?最近几年,大语言模型(LLM)的浪潮席卷了整个行业,从ChatGPT的横空出世到各类开源模型的百花齐放,我们似乎每天都在见证“奇迹”。但作为一名在一线摸爬滚打多年的…...

AI如何突破人文学科认知局限:从海量数据处理到量化分析实践

1. 项目概述:当AI遇见人文,一场认知边界的重塑“人工智能如何突破人文学科的认知局限并引领数字人文复兴”——这个标题听起来宏大,但内核其实非常具体。作为一名在数字人文领域摸爬滚打了十来年的从业者,我亲眼见证了从早期简单的…...

CANN/ops-cv 3D最近邻上采样算子

aclnnUpsampleNearest3d 【免费下载链接】ops-cv 本项目是CANN提供的图像处理、目标检测相关的算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-cv 📄 查看源码 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT…...

CANN元数据定义FrameworkType

FrameworkType 【免费下载链接】metadef Ascend Metadata Definition 项目地址: https://gitcode.com/cann/metadef 函数功能 设置原始模型的框架类型。 函数原型 [OpRegistrationData](https://link.gitcode.com/i/e39588e20f92bc787b393b3e218d186f) &Framewor…...

CANN版本发布管理8.5.0-beta.1

CANN 8.5.0-beta 1 【免费下载链接】release-management CANN版本发布管理仓库 项目地址: https://gitcode.com/cann/release-management 版本地址 CANN 8.5.0-beta 1 版本目录说明如下: ├── aarch64 # CPU为ARM类型 │ ├── ops …...

AI赋能学术研究:基于NLP的SDGs自动映射技术解析与实践

1. 项目概述:当学术研究遇见全球议程最近几年,无论是申请科研基金、撰写项目报告,还是发表学术论文,我身边越来越多的同行开始被问到一个问题:“你的这项研究,与联合国的可持续发展目标(SDGs&am…...

LangChain Tool + Agent 最小可运行示例解析

下面给出一个代码示例: 展示如何使用 LangChain 通义千问(Qwen),通过 ReAct Agent 安全地调用自定义工具完成数学计算任务。 示例代码取自《AI Agent智能体开发实践》第8章。 # -*- coding: utf-8 -*- """ Creat…...

【SITS2026独家前瞻】:AI技术大会同期活动5大不可错过的隐藏议程与入场暗号

更多请点击: https://intelliparadigm.com 第一章:SITS2026大会同期活动全景导览 SITS2026(Smart Infrastructure & Technology Summit 2026)同期活动覆盖技术实践、产业对接与开发者赋能三大维度,形成“主论坛12…...

【信号去噪】基于马氏距离和EDF统计(IEE-TSP)的基于小波的多元信号去噪方法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

第9章:从直播到录播——知识产品的矩阵化运营 /《程序员AI时代实现 直播知识付费实现月入100万的落地详细实战方案》

第9章:从直播到录播——知识产品的矩阵化运营 如果说到前面那些章节,我更像是把直播当成卖时间的主动收入事业来做的话,从这一章开始,我想给你看一个更加根本的跃迁逻辑。一场直播卖得好,你赚数字的绝对值是靠每一分钟…...

多智能体粒子群优化的ELM模型预测控制附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

CANN PyPTO索引添加UB函数

pypto.index_add__ub 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列…...

联邦学习在物联网场景下的性能评估与基准测试实践

1. 项目概述:当联邦学习遇上物联网,我们如何量化其真实性能?如果你正在关注边缘智能或者分布式机器学习,那么“联邦学习”这个词对你来说一定不陌生。它被誉为解决数据孤岛和隐私保护问题的关键技术,尤其是在物联网这个…...

CANN/ops-math循环填充2D反向传播

aclnnCircularPad2dBackward 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math 📄 查看源码 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√…...

AISMM模型如何重塑技术决策链:4类典型组织架构下的领导力适配公式(附诊断速查表)

更多请点击: https://intelliparadigm.com 第一章:AISMM模型与技术领导力 AISMM(Artificial Intelligence Strategy Maturity Model)是一种面向AI工程化落地的五阶段能力成熟度框架,专为技术领导者设计,用…...

CANN算子测试挑战赛提交

团队信息 【免费下载链接】cann-competitions 本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。 项目地址: https://gitcode.com/cann/cann-competitions 团队名称:群星闪耀时所属单位:南昌航空大学团队…...