前言
本文作为Transformer模型部署的下篇,会以典型的Lightglue算法为例,介绍优化的完整流程。
Lightglue性能优化实战
- Self-Attention(自注意力) 模块用于捕捉同一张图像内部关键点之间的全局关系,使得网络能够理解点与点之间的上下文语义结构,从而增强特征的判别性;
- Cross-Attention(交叉注意力) 模块则让一张图的关键点能够“看到”另一张图的所有关键点,实现跨图像的特征交互与匹配可能性评估。这种机制使得模型可以在全局范围内考虑潜在的匹配对,而不仅仅依赖于局部相似性。
通过多层堆叠的注意力模块,LightGlue 能够逐步细化匹配预测,在特征空间中聚合语义信息并抑制错误匹配。最终,模型输出一组置信度加权的匹配对,通常经过简单的后处理(例如阈值筛选或几何一致性检查)即可获得稳定的结果。
总体而言,LightGlue 将 Transformer 的强大上下文建模能力引入特征点匹配领域,实现了从“点对点的相似性比较”向“全局语义关系推理”的转变。它不仅继承了 Transformer 的灵活结构和可扩展性,还通过结构优化实现了端到端的高效匹配,是传统几何方法与深度视觉算法之间的重要桥梁。
本节我们重点分析Lightglue的Transformer结构,通过html静态性能分析报告了解部署性能瓶颈,并使用上一节介绍的优化策略提升性能,同时保持模型的输出一致性不变。最终Lightglue算法的BPU耗时预估从16.37ms下降到14.9ms,优化幅度达到9%,效果显著。
html分析报告解读
可以使用PTQ的fast-perf方法编译ONNX模型,得到html静态性能分析报告,此时报告中显示的latency为16.37ms。

通过算子耗时预估发现,在每个CrossAttention结构的开头,有两个Matmul算子各跟随一个Reshape,这两个Reshape的最后一维度会从16 Padding到128,导致需要耗费共485us,占模型总耗时的2.8%,该模型一共有5个CrossAttention结构,这10个Reshape一共耗时2.4ms,约占总耗时的14%,需要优化。

该模型并无其他耗时明显较高的算子,由此我们可以从Reshape入手优化模型结构,提升部署性能。
需要特别注意的是,html的算子耗时预估只体现单个算子的执行时间,实际BPU在推理模型时,会并行执行多个算子的计算指令,因此html中所有算子的累计耗时并不会等于模型的总耗时。
性能优化流程
CrossAttention结构的Pytorch源码如下所示,主要关注Attention和CrossBlock类的forward函数。为方便对比模型的Shape变化情况,forward代码的大部分变量均替换为固定数值,并使用注释标明每次计算后的Shape情况。
结合算法原理,可以发现这里的结构是将qk0/qk1做数据搬运后分别与v1/v0做Attention计算,在Attention中qk1/qk0又会做一次数据搬运。其中较高的耗时发生在数据搬运第一步的Reshape,Reshape的最后一维从16 Padding到256,带来了较高的BPU硬件对齐耗时。既然这样,我们可以考虑先做Transpose,将Tensor本身就有的256维移动到最后,再对前几维做Reshape。如此一来Tensor的最后一维就会直接符合BPU对齐规则,避免硬件对齐浪费计算资源。

上方左图为原始版本的CrossAttention结构示意图,右图为重新整理数据排布后的示意图。这种调整不会影响计算精度,也不需要重训模型,原本训练好的权重可以直接加载到该模型中,并保证修改前后模型输出的一致性。
修改后的Pytorch代码如下,全部修改点为:
把CrossBlock模块中qk0和qk1扩展成四维,并将原本的先Reshape再Permute修改为先Permute再Reshape
去除Attention模块Matmul前对第二个张量做的Permute,改为对第一个张量做Permute
使用fast-perf编译优化后的模型,得到html静态性能分析报告,查看CrossAttention中的算子预估耗时,发现原本200us以上的Reshape操作已经消失,且所有数据搬运类算子均没有额外的BPU硬件对齐。现在的Reshape和Transpose算子均只有很轻微的耗时。

优化前后性能对比
通过统计html中,发现模型优化后,Reshape算子的累计耗时明显下降。

优化后模型的html静态性能分析报告显示完整模型的latency为14.9ms,显著低于原版的16.37ms,性能提升约9%,收益明显。

由此,可以认为已经较为理想地完成了对Lightglue模型中数据搬运算子的耗时优化。


