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

ops-reduce:ReduceMax 与 ReduceMean 的并行优化

Transformer 推理中 Reduce 类算子无处不在:LayerNorm 需要算 mean 和 var(ReduceMean + 方差),Softmax 需要算 max(ReduceMax)和 sum(ReduceSum),Attention 的归一化因子需要跨序列维度做归约。

ops-reduce 是 CANN 管理所有归约算子的仓库——ReduceMax、ReduceMin、ReduceMean、ReduceProd。它们共享同一个核心问题:计算量极小但搬运量极大。


为什么 Reduce 类算子容易成为瓶颈

以 ReduceMax 为例——在一个[4096, 4096]的 Tensor 上沿行方向找最大值:

  • 数据量:32MB
  • 计算量:4096×4095 = 16M 次比较
  • 计算/搬运比:约 0.5 FLOPs/byte

对比 GEMM 的 52.5 FLOPs/byte——Reduce 的瓶颈非常明显:时间主要花在从 DDR 读数据上,Vector Unit 的比较运算只需要几微秒。


ReduceMax 与 ReduceMean 的典型场景

ReduceMax——Attention 中的 Softmax。Softmax 的第一步需要对 Score 矩阵的每一行找最大值,用于数值稳定性(减去最大值防止 exp 溢出)。这个 ReduceMax 在朴素 Attention 中需要对 32MB 的 Score 矩阵做一次完整扫描。

ReduceMean——LayerNorm。LayerNorm 的第一步mean = sum(x) / n需要对输入 Tensor 做 ReduceSum 再除以 n。LLaMA 的每个 Decoder Block 做两次 LayerNorm——每次都要对隐藏层的[B, n, d]Tensor 做 mean 和 var。


昇腾NPU如何做并行归约

ops-reduce 在 Vector Unit 上做并行归约。一个 Core 处理一部分数据,用 SIMD 指令同时比较多个元素:

// 昇腾 Vector Unit 上的 ReduceMax Kernel(伪代码)// 输入:x (GM 地址), n = 元素数// 输出:max_value (GM 地址)__vector__voidreduce_max_kernel(...){float16 local_max=-FLT_MAX;// 每次处理 128 个元素for(inti=0;i<n;i+=128){float16 vec[128]=load_gm_to_local(x+i);// DDR→L1local_max=vec_max(local_max,vec);// SIMD 比较}// 如果启动了多个 Core,做跨 Core 归约float16 global_max=warp_reduce_max(local_max);store_local_to_gm(global_max,max_value);// L1→DDR}

多 Core 场景中每个 Core 先算自己的局部最大值,然后通过一次跨 Core 的 reduce 操作合并为全局最大值。这个跨 Core reduce 在 Vector Unit 上用warp_reduce_max指令完成——比写 DDR 再读回来快两个数量级。


性能分析

在 Ascend 910 上对不同大小 Tensor 做 ReduceMax 的实测:

Tensor 形状元素数搬运量延迟带宽利用率
[1024]1K2KB3μs15%
[1,4096]4K8KB5μs28%
[4096,4096]16M32MB85μs72%
[8,4096,4096]128M256MB610μs78%

小 Tensor 的带宽利用率低是因为 DMA 启动开销占比大。大 Tensor 的利用率接近硬件上限。


Transformer 中的归约链路

LLaMA-7B 的两次 LayerNorm 的归约链路:

输入 [B, n, d] → ReduceMean → (x - mean)² → ReduceMean → var ↑ ↑ 一次归约 一次归约 mean 缓存 var 缓存

ops-reduce 在 LayerNorm 场景中的优化是:meanvar的归约 Kernel 共享同一个 Tensor 的搬运——mean归约时从 DDR 读一次 x,var归约时复用 L1 上的 x 数据,不需要重新搬运。优化后归约的搬运量从 2 次减到 1 次。

ReduceMean 的融合执行

ReduceMean 可以跟下游算子融合。LayerNorm 的(x - mean) / sqrt(var + eps)中,ReduceMean 和后面的计算共享同一个 x 的搬运——x 搬入 L1 后先做 ReduceMean,mean 的结果留存在 L1 中,后续的x - mean和 ReduceVar 直接使用——x 不需要重新搬运。

融合后 LayerNorm 的总搬运量从 2 次降到 1 次。实测中 LLaMA-7B 的 LayerNorm 延迟从 12μs 降到 7μs。

性能分析表的补充

Ascend 910 上不同 Tensor 大小的 ReduceMean(axis=-1)性能:

Tensor 形状元素数延迟瓶颈环节
[1, 4096]4K4μsDMA 启动
[4, 4096, 4096]64M210μsDDR 带宽
[8, 4096, 4096]128M395μsDDR 带宽
[1, 4096, 4096]16M56μsDDR 带宽

Batch 维度增加时延迟近线性增长——ops-reduce 在 Batch 维度上可以并行,每个 Batch 分给不同 Core 处理,Batch=8 时 4 个 Core 并行能把延迟从 395μs 降到 110μs。

参考仓库

ops-reduce 归约算子库

ops-math 数学算子库

http://www.jsqmd.com/news/868160/

相关文章:

  • 把大脑交给自己,而非交给 AI —— Files.md 的“极简知识管理“哲学
  • RK3588下位机程序无响应问题排查
  • 百度网盘提取码终极查询指南:10秒告别手动搜索的烦恼
  • 北大等研究揭示:AI答题正确背后存在可被捕捉的作弊行为漏洞
  • python文化旅游服务系统 小程序系统
  • 私有化 IM vs 公有云 IM:3 个维度告诉你该怎么选
  • 为什么你的 AI 应用做不成 Agent
  • 抖音下载神器:免费批量下载视频、图集、音乐和直播回放完整指南
  • 基于TinyEngine低代码引擎的AI Agent开发完整指南
  • 长沙短视频拍摄引流哪家更值得信赖
  • python新能源汽车4s店车辆管理系统
  • 5分钟搞定Windows 11区域语言模拟:Locale Remulator终极指南
  • 2026年4月正规的接待台定制源头厂家推荐,创意接待台定制吸引目光 - 品牌推荐师
  • 有限域算术:GF(2^n) 运算与在 AES/ECC 中的应用
  • Python/JS/Go三语言生成质量对比,错误率、可维护性、安全漏洞全维度打分,开发者速查清单!
  • 2026年IEEE TEVC,面向城市电缆布线优化的双层多精度搜索框架
  • 2026现阶段合肥养老中心怎么选?聚焦专业护理价值的深度指南 - 2026年企业推荐榜
  • 2026大模型安全评估报告|一键通关撰写攻略(备案专用)
  • ElevenLabs方言支持白皮书(2024Q2):安徽话覆盖度仅61.7%?我们逆向解析其phoneme inventory并开源替代音素映射表
  • 搞定环境一致性神器:Linux 环境下 Docker 新手入门全攻略
  • 2026年Q2简阳冷库安装市场:专业本地服务商的价值凸显 - 2026年企业推荐榜
  • 2026年4月行业内评价好的挡车球实力厂家推荐,迎宾石/马路牙子/标识石/路缘石/彩色水磨石,挡车球直销厂家口碑推荐 - 品牌推荐师
  • 语音克隆怎么弄?2026 最新零基础全流程教程(3 分钟上手)
  • 通用人工智能(AGI)完整技术方案:以字序生命模型(WOLM)为认知内核的双脑协同架构
  • taotoken的审计日志功能让我们清晰追踪了每一次api调用
  • 离线语音控制技术解析:从原理到实战的嵌入式智能硬件方案
  • ChatGPT自动提炼FAQ的3层过滤机制:语义去重→意图归类→合规校验,附Python+LangChain实现代码
  • 终极指南:如何用Udeler轻松下载Udemy课程进行离线学习
  • 2026年靠谱的东莞家电面板可靠供应商推荐 - 行业平台推荐
  • python星星行李寄存系统