新闻详情

新闻详情

首页 / 资讯中心 / 详情

oil-gas-ops-prospect融合注意力算子FusedBiasSoftmax揭秘:3次算子发射合成1个kernel

发布时间:2026/10/1 21:37:11来源:尧图网络
oil-gas-ops-prospect融合注意力算子FusedBiasSoftmax揭秘:3次算子发射合成1个kernel
oil-gas-ops-prospect融合注意力算子FusedBiasSoftmax揭秘3次算子发射合成1个kernel【免费下载链接】oil-gas-ops-prospect面向油气勘探oil gas exploration领域的昇腾自定义算子库。仓名即 oil-gas-ops油气算子 prospect勘探目标面向地震成像、全波形反演等勘探计算场景项目地址: https://gitcode.com/cann/oil-gas-ops-prospectoil-gas-ops-prospect是面向油气勘探领域的昇腾Ascend自定义算子库其中的FusedBiasSoftmax融合算子把注意力前向里常见的两次 bias 累加 一次 softmax共 3 次算子发射合成了1 个 kernel原地写回结果显著减少中间访存与 kernel 发射开销。本文带你读懂它的原理、实现与调用方式。 一分钟看懂FusedBiasSoftmax 算什么数学定义很简单$$y \mathrm{softmax}(x b_1 b_2,\ \mathrm{dim}-1)$$方向名称含义shapedtype输入xlogits[B, H, Q, S]fp32 / fp16 / bf16输入可选bias1可广播偏置如 mask bias[B,H,1,S]或[B,H,Q,S]与x相同输入可选bias2全尺寸偏置如 triangle bias[B,H,Q,S]与x相同输出ysoftmax 概率与x相同与x相同这正是 openfold 结构预测中注意力核心的标准形态logits 先加上mask bias可广播和triangle bias全尺寸再沿最后一维做 softmax。⚡ 为什么要把 3 次发射合成 1 个 kernel在原版 openfold 的attn_core_inplace_cuda.forward_中同样的语义要发射 3 次 kernellogits bias1add 算子logits bias2add 算子logits softmax(logits)in-place softmax每次发射都意味着中间结果写回 HBM主机内存→ 下一次 kernel 再读出来外加 kernel 发射本身的调度开销。而 bias 累加与 softmax 都是逐行独立、计算强度低的访存密集操作单独发射时性能会被访存和 launch 开销主导。FusedBiasSoftmax 的做法是数据进片上 UB 后就不落地——bias 累加、fp32 域 softmax、写回全部在一个 kernel 的流水内完成中间访存被彻底消除。 单 kernel 是怎么实现的实现分为 host 侧切分tiling与 device 侧流水线两部分。Host 侧按行切分预算 UB切分核心算法在 fused_bias_softmax_tiling_core.h逻辑直观按行均分把B*H*Q行均匀分给若干 AIV 核不能整除的余数行交给大核多处理 1 行见ComputeRowSplitUB 预算模型每行要占多少 UB按x 载入 y 写出 非 fp32 中转 bias 载入/中转逐项计价入队张量按 double buffer队列深度 2计两份再为高阶 SoftMax API 预留 32KB32B 对齐行宽S对齐到 32 字节padding 用 0 填充保证向量单元高效搬运dtypes 分发tiling key 取0fp32、1fp16、2bf16kernel 侧据此实例化不同模板。算子注册与约束校验见 FusedBiasSoftmax.cpp要求输入必须是 4D且S width满足1 ≤ S ≤ 4096。Device 侧双缓冲三拍流水线kernel 实现在 FusedBiasSoftmax.h入口为 fused_bias_softmax.cpp主循环是一组经典的三拍流水CopyIn ──→ Compute ──→ CopyOut 双缓冲预取下一拍 fp32 域 Add SoftMax 写回 GMCopyInDataCopyPad把 x 与 bias 行搬运入 UB同时预取下一迭代的数据用队列FBS_QUE_DEPTH 2隐藏搬运延迟广播形态的 bias1 只载入迭代覆盖到的 distinct 行省 UBCompute非 fp32 输入先Cast到 fp32 域bias 逐块Add再调用高阶SoftMaxAPI 完成行归一化——精度上等价于 fp32 累加写回时再Cast回原 dtypeCopyOut结果按原布局写回 GM。因为y与x共享同一块 device 内存原地写回连一份中间 buffer 都省掉了。 Python 调用3 行上手Python 封装在 fused_bias_softmax.py支持 PyTorch autograd 与 CPU 回退import os os.environ[OIL_GAS_OPS_FUSED_BIAS_SOFTMAX_IMPL] ascendc from oil_gas_ops_prospect.fused_bias_softmax import fused_bias_softmax, attention_core x torch.randn(2, 4, 64, 128, dtypetorch.bfloat16, devicenpu) b1 torch.randn(2, 4, 1, 128, dtypetorch.bfloat16, devicenpu) # 广播 b2 torch.randn(2, 4, 64, 128, dtypetorch.bfloat16, devicenpu) # 全尺寸 y fused_bias_softmax(x, b1, b2) # 原地写回 x几个实用细节实现切换环境变量OIL_GAS_OPS_FUSED_BIAS_SOFTMAX_IMPL取值torch默认/ascendc/auto张量不在 NPU 上时自动回退到纯 PyTorch 参考实现CPU 上也能跑通同一套代码attention_core 组合封装attention_core(q, k, v, bias1, bias2)等价 openfold 的AttentionCoreFunction.apply前向走FusedBiasSoftmax反向走配套融合算子FusedSoftmaxGradaclnn 直接调用C 侧接口为aclnnFusedBiasSoftmax样例见 test_aclnn_fused_bias_softmax.cpp。✅ 精度与性能如何验证测试覆盖三层均有现成脚本层级位置内容切分 UT无卡可跑test_fused_bias_softmax_tiling.cpp直接驱动 tiling 核心算法断言行切分与 UB 预算NPU 精度/性能test_fused_bias_softmax_npu.py精度对拍 原地写回断言 别名隔离 性能微基准aclnn 系统测试aclnnFusedBiasSoftmax按cases.json多 shape 循环 launch精度契约fp32max_diff ≤ 1e-5bf16 契约式atol2e-2, rtol4e-3。性能基准对 torch 参考实现逐 case 打印speedupwarmup 5、iter 20覆盖[2,4,64,128]~[8,8,256,256]的典型注意力形状。运行入口bash build.sh -u --st --opsfused_bias_softmax # 多 shape aclnn 系统测试 延伸阅读算子数学定义与约束全文docs/zh/op_list.md接口签名与环境变量docs/zh/api_list.md反向配套算子 FusedSoftmaxGrad 源码ascendc/operators/fused_softmax_grad/算子开发指南想写自己的融合算子docs/zh/develop/operator_development_guide.md想动手跑起来先克隆仓库支持 CANN 9.0.0、Ascend 910Bgit clone https://gitcode.com/cann/oil-gas-ops-prospect.git cd oil-gas-ops-prospect bash build.sh --install一句话总结FusedBiasSoftmax 用host 侧按行切分 device 侧双缓冲三拍流水 fp32 域中间计算三板斧把注意力前向的 3 次 kernel 发射压成 1 次中间数据不落 HBM是昇腾上做访存密集小算子融合的一个标准范式。【免费下载链接】oil-gas-ops-prospect面向油气勘探oil gas exploration领域的昇腾自定义算子库。仓名即 oil-gas-ops油气算子 prospect勘探目标面向地震成像、全波形反演等勘探计算场景项目地址: https://gitcode.com/cann/oil-gas-ops-prospect创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Pogo Pin压缩裕量分析:用Python揪出多针阵列风险针位 2026/10/1 22:39:59

Pogo Pin压缩裕量分析:用Python揪出多针阵列风险针位

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Flutter牵手Apple Watch:跨端桥接实战与架构解析 2026/10/1 22:39:59

Flutter牵手Apple Watch:跨端桥接实战与架构解析

如果你手里有一块 Apple Watch,想在上面跑一个用 Flutter 写的交互界面,我猜你大概率会先去 pub.dev 搜一圈 watchOS 相关的包,然后发现官方压根没有支持。这个项目其实挺有意思的:Flutter 的跨端优势在手机和平板上确实香&#x…

阅读更多 →
Home Assistant 内网穿透:frp、ngrok 远程访问与安全加固 2026/10/1 22:39:58

Home Assistant 内网穿透:frp、ngrok 远程访问与安全加固

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
openGauss Summit 2025:存储过程增强与AI自治,破解数据库瓶颈 2026/10/1 22:39:52

openGauss Summit 2025:存储过程增强与AI自治,破解数据库瓶颈

1. 数智时代数据库的瓶颈与openGauss Summit 2025的看点1.1 为什么openGauss Summit 2025值得关注做数据库相关工作的人,这两年最大的感受应该是:过去拼的是单机性能,现在拼的是“整个数据基础设施能不能跟上业务变化”。尤其当AI大模型、实时…

阅读更多 →
Zabbix邮件报警配置与排错:SMTP、媒介类型、动作和降噪 2026/10/1 22:39:52

Zabbix邮件报警配置与排错:SMTP、媒介类型、动作和降噪

做运维这行,监控搭起来只是第一步,真正让人半夜从床上弹起来的,永远是那条没发出去的报警。我见过太多环境,Zabbix 的图做得漂漂亮亮,触发器写得严丝合缝,结果主机真挂了,收件箱里一篇寂静——问…

阅读更多 →
超构表面远场偏振态分析:动量空间C/V点提取与后处理全流程 2026/10/1 22:39:45

超构表面远场偏振态分析:动量空间C/V点提取与后处理全流程

超构表面的远场偏振态分析,这几年在纳米光子学里是真的热。不管是超表面透镜、偏振转换器还是谷光子学器件,大家最终都要回答一个核心问题:我设计的结构,在动量空间(也就是远场辐射的k矢量空间)里&#xff…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉